import redis
#
# class MyRedis():
# def __enter__(self):
# self.conn = redis.Redis()
# return self.conn
#
# def __exit__(self, exc_type, exc_val, exc_tb):
# self.conn.close()
#
#
# with MyRedis() as conn:
# 列表操作
# 1 lpush(name,values)
# conn.lpush('l1',1,2,3,4,5,'lqz')
# 2 rpush
# conn.rpush('l1','egon')
# 3 lpushx(name,value)
# 在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
# conn.lpushx('l2',9)
# conn.lpushx('l1',9)
# llen(name)
# res=conn.llen('l1')
# print(res)
# linsert(name, where, refvalue, value)) 在某个位置插入值
# where :BEFORE或AFTER,大小写都行
# refvalue: lqz 表示以lqz为标准(不是下标索引)
# conn.linsert('l1','after','lqz','刘亦菲')
# conn.linsert('l1','before','lqz','baby')
# lset
# conn.lset('l1',0,'黄晓明')
# conn.lset('l1',5,'老伙计')
# lrem
# 第二个参数count:
# count = 0,删除列表中所有的指定值;
# count=2,从前到后,删除2个;
# count=-2,从后向前,删除2个
# conn.lrem('l1',0,'lqz') # 把所有lqz都删除
# conn.lrem('l1',2,'lqz') # 从前往后,删除2个lqz
# conn.lrem('l1',-1,'lqz') # 从前往后,删除2个lqz
# lpop
# res=conn.lpop('l1')
# res=conn.rpop('l1')
# print(res)
# lindex(不删除)
# res=conn.lindex('l1',0)
# print(res)
# lrange # 前闭后闭区间
# res = conn.lrange('l1', 0, 0)
# print(res)
# ltrim
# res=conn.ltrim('l1',3,5)
# print(res)
# rpoplpush 需要两个列表
# conn.lpush('l2','lqz','egon')
# conn.rpoplpush('l1','l1')
# blpop # block:阻塞 左边弹出
# res=conn.blpop('l1')
# print(res)
'''
lpush
llen
linsert
lset
lrem
lpop
lrange # 使用它,自定义增量迭代
blpop
'''
### redis类库中没有提供对列表元素的增量迭代,借助lrange
import redis
conn = redis.Redis()
# res=conn.lrange('l2',0,9999) # 全部取出来
# res=conn.lrange('l2',0,conn.llen('l2')) # 从0取到列表长度
# 类似于字典的hgetall,一次性全取出来,存在的问题是,因为不知道列表有多大,很有可能撑爆内存
# 我们实现一个增量迭代
# print(res)
# for i in range(10000):
# conn.lpush('l_test','test_%s'%i)
# res=conn.lrange('l2',0,conn.llen('l2'))
# print(res)
# res = conn.lrange('l_test', 0, 9)
# print(res)
# def lscan_iter(name, conn, count=10):
# cursor = 0
# lenght = conn.llen(name) # 计算列表总长度
# while cursor < lenght:
# data = conn.lrange(name, cursor, (cursor+count) - 1)
# cursor += count
#
# for item in data: