我正在使用redis扫描来遍历redis数据库中的密钥。这是我正在使用的代码
#example :1
start_cursor=0
r=redis.StrictRedis(host='localhost',port=6379)
cur, keys = r.scan(cursor=start_cursor, match='*', count=3)
records=len(keys)
values=[]
values.extend(i for i in keys)
print cur,records,values
while cur != 0:
cur, keys = r.scan(cursor=cur, match='*', count=3)
records+=len(keys)
data = r.mget(keys=keys)
values.extend(i for i in keys)
print cur, len(keys),values
print "Total records scanned :{}".format(records)
我的数据库具有(键,值)(1,1)(2,2)(3,3)(4,4)(5,5)格式的以下值
当我使用
扫描记录时
start_cursor=0
我得到以下记录
scan #=>Cursor,new records,all records
scan #1 =>5,3,['1', '2', '5']
scan #2 =>0,2,['1', '2', '5', '3', '4']
Total Records scanned :5
当我从扫描#1的光标编号开始扫描时说(5)。在示例1中,我从扫描#2获取了记录
Example : 2
start_cursor=5
scan #=>Cursor,new records,all records
scan #1 =>0 2 ['3', '4']
Total Records scanned :2
到目前为止一切都很好。当我再插入四个新数据时,说(6,6)(7,7)(8,8)(9,9),然后使用相同的start_cursor = 5
扫描数据例如:2
我缺少一些数据,说这里缺少(6)。
Example : 3
start_cursor=5
scan #=>Cursor,new records,all records
scan #1 =>3 3 ['3', '4', '9']
scan #1 =>0 2 ['3', '4', '9', '7', '8']
Total Records scanned :5
Redis扫描是否将扫描在扫描操作开始后插入的数据?如果没有,还有其他方法可以实现吗?
提前谢谢!
答案 0 :(得分:1)
来自doc:
在整个迭代过程中不经常出现的元素可能会返回,也可能不会返回:它是未定义的。
由于数据是在扫描操作开始后插入的,因此这些数据为不稳定的当前状态。因此SCAN
不能保证返回新插入的数据。
如果没有,还有其他方法可以实现吗?
AFAIK,没有其他方法可以实现。