В 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"