как сканировать ключи, значения которых были обновлены с момента последнего сканирования - PullRequest
1 голос
/ 31 мая 2019

Я хотел бы периодически сканировать экземпляр Redis на наличие ключей, которые изменились с момента последнего сканирования. между сканированиями я не хочу обрабатывать ключи.

например, один ключ может получить тысячу обновлений между сканированиями. Я забочусь о самом последнем значении только при следующем периодическом сканировании.

1 Ответ

1 голос
/ 01 июня 2019

В Redis нет встроенного способа добиться этого (пока).

Вы можете, например, перекодировать свое приложение и добавить какой-то способ отслеживания обновлений.Например, куда бы вы ни звонили SET foo bar, звоните также ZADD updated <timestamp> foo.Затем вы можете использовать «обновленный» отсортированный набор для получения обновленных ключей.

В качестве альтернативы, вы можете попробовать использовать RedisGears для автоматизации отслеживания (для начинающих).Предполагая, что у вас запущен RedisGears (т.е. docker run -it -p 6379:6379 redislabs/redisgears), вы можете сделать что-то вроде следующего:

$ cat gear.py
def addToUpdatedZset(x):
    import time
    now = time.time()
    execute('ZADD', 'updated', now, x['key'])
    return x

GB().filter(lambda x: x['key'] != 'updated').foreach(addToUpdatedZset).register('*')

$ redis-cli RG.PYEXECUTE "$(cat gear.py)"
OK
$ redis-cli
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> SET foo bar
OK
127.0.0.1:6379> KEYS *
1) "updated"
2) "foo"
127.0.0.1:6379> ZRANGE updated 0 -1 WITHSCORES
1) "foo"
2) "1559339877.1392548"
127.0.0.1:6379> SET baz qux
OK
127.0.0.1:6379> KEYS *
1) "updated"
2) "baz"
3) "foo"
127.0.0.1:6379> ZRANGE updated 0 -1 WITHSCORES
1) "foo"
2) "1559339877.1392548"
3) "baz"
4) "1559339911.5493586"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...