Python操作Redis大全( 二 )

二、列表 lists
Python操作Redis主要利用了redis模块来实现 , list表操作函数主要模拟了Redis操作命令LPUSH , LRANGE , LINDEX , BLPOP , BRPOP 。 函数说明如下:

  1. lpush函数实现了从向指定redis列表头部压入数据功能 , lpush key value
  2. lrange获取列表指定范围的函数 , lrange key start end
  3. lindex根据列表下标量获取列表元素值 , lindex key index
  4. blpop从列表头部取出第一个元素 , 返回该元素值并从列表删除(l代表left , 左边)
  5. 【Python操作Redis大全】brpop从列表尾部取出第一个元素 , 返回该元素值并从列表删除(r代表right , 右边)
  6. LPUSHX、RPUSHX以及其他一些Redis列表(List)函数目前版本无法实现 , 如有可实现方法博客代码事例将会得到更新 。
示例代码如下:
#!/usr/bin/python# -*- coding:utf-8 -*-# __author__ = 'Jack'pool = redis.ConnectionPool(host='127.0.0.1', port=6379)r = redis.Redis(connection_pool=pool)r.flushall # 清空Redisr.lpush('oo', 11) # 保存顺序为: 33,22,11r.lpushx('oo', 00) # 在name对应的list中添加元素 , 只有name已经存在时 , 值添加到列表的最左边print(r.llen('oo')) # name对应的list元素的个数r.linsert('oo', 'before', 11, 99) # 在11之前插入值99r.lset('oo', 1, 88) # 对name对应的list中的某一个索引位置重新赋值print(r.lrange('oo', 0, -1)) # 在name对应的列表分片获取数据r.lrem('oo', 88, num=1) # 在name对应的list中删除指定的值.num=0 , 删除列表中所有的指定值;num=2,从前到后 , 删除2个;num=-2,从后向前 , 删除2个print(r.lrange('oo', 0, -1))print(r.lpop('oo')) # 在name对应的列表的左侧获取第一个元素并在列表中移除 , 返回值则是第一个元素print(r.lindex('oo', 0)) # 在name对应的列表中根据索引获取列表元素r.lpush('l1', 11) # index为0r.rpush('l1', 22)r.rpush('l1', 33)r.rpush('l1', 44)r.rpush('l1', 55) # index为4r.ltrim('l1', 1, 3) # 在name对应的列表中移除没有在[start-end]索引之间的值print(r.lrange('l1', 0, -1))r.rpoplpush('l1', 'l1') # 从一个列表取出最右边的元素 , 同时将其添加至另一个列表的最左边;src要取数据的列表的name, dst要添加数据的列表的nameprint(r.lrange('l1', 0, -1))r.brpoplpush('l1', 'l1', timeout=3) # # timeout , 当src对应的列表中没有数据时 , 阻塞等待其有数据的超时时间(秒) , 0 表示永远阻塞print(r.lrange('l1', 0, -1))print(r.blpop('l1', 3)) # 从列表头部取出第一个元素 , 返回该元素值并从列表删除(l代表left , 左边)print(r.lrange('l1', 0, -1))'''# 由于redis类库中没有提供对列表元素的增量迭代 , 如果想要循环name对应的列表的所有元素 , 那么就需要:# 1、获取name对应的所有列表# 2、循环列表# 但是 , 如果列表非常大 , 那么就有可能在第一步时就将程序的内容撑爆 , 所有有必要自定义一个增量迭代的功能:'''print('自定义增量迭代:')r.flushallr.lpush('l1', 11) # index为0r.rpush('l1', 22)r.rpush('l1', 33)r.rpush('l1', 44)r.rpush('l1', 55) # index为4def list_iter(name):list_count = r.llen(name)for index in range(list_count):yield r.lindex(name, index)for item in list_iter('l1'):print(item)输出结果如下:
2[b'0', b'88', b'11'][b'0', b'11']b'0'b'11'[b'22', b'33', b'44'][b'44', b'22', b'33'][b'33', b'44', b'22'](b'l1', b'33')[b'44', b'22']自定义增量迭代:b'11'b'22'b'33'b'44'b'55'


推荐阅读