Будет ли Redis Scan сканировать данные, вставленные после запуска операции сканирования?

Я использую сканирование 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). Я получаю записи из сканирования № 2 в моем примере 1.

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 Scan сканировать данные, вставленные после запуска операции сканирования? Если нет, есть ли другой способ добиться этого?

Заранее спасибо!!


person Jebaseelan Ravi    schedule 05.08.2019    source источник


Ответы (1)


Из документа:

Элементы, которые не постоянно присутствовали в коллекции во время полной итерации, могут быть возвращены или нет: это не определено.

Поскольку данные вставляются после начала операции сканирования, эти данные НЕ ПОСТОЯННО ПРИСУТСТВУЮТ. Таким образом, SCAN не гарантирует возврата вновь вставленных данных.

Если нет, есть ли другой способ добиться этого?

AFAIK, другого способа добиться этого нет.

person for_stack    schedule 06.08.2019