Истечение срока действия геопространственных объектов в Redis
В Redis есть предложения по истечению срока действия отсортированного набора элементов (см. https://groups.google.com/d/msg/redis-db/rXXMCLNkNSs/Bcbd5Ae12qQJ и https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis/), я попробовал рабочий подход к истечению геопространственных индексов с командами ZREMRANGEBYSCORE и ZREMRANGEBYRANK безуспешно (ничего не удалено).
Я преуспел, используя ZREMRANGEBYLEX.
Есть ли способ работать с геопространственными элементами, кроме Струны?
Обновление :
Например, если время жизни (ttl) элемента равно 30 сек, я добавляю его следующим образом:
geoadd 1 -8.616021 41.154503 30
Теперь предположим, что рабочий выполняет через 40 секунд, я ожидал, что
zremrangebyscore 1 0 40
Сделал бы работу, но это не так,
ZREMRANGEBYLEX 1 [0 [40
Делает это. Почему такое поведение? Это означает, что оценка геопространственного элемента поддерживает только лексикографические операции?
1 ответ:
Сортированные наборы имеют элементы (строки), и каждый элемент имеет счет (с плавающей запятой). Геосети используют счет для кодирования координат.
Redis не истекает срок действия членов в отсортированном наборе (или Geoset). Вы должны удалить их сами, если это необходимо.
В вашем случае вам нужно будет сохранить два отсортированных набора-один для вашего GeoSet и один для управления TTLs в качестве баллов.
Например, предположив, что ваш член называется "foo", чтобы добавить его:
ZADD ttls 30 foo ZADD elems -8.616021 41.154503 foo
Чтобы истечь вручную, сначала найдите члены с вызовом
ZRANGEBYSCORE ttls
, а затем удалите их из обоих наборов.Совет: предпочтительно использовать метку времени в качестве счета вместо секунд.