Истечение срока действия геопространственных объектов в 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 2

1 ответ:

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

Redis не истекает срок действия членов в отсортированном наборе (или Geoset). Вы должны удалить их сами, если это необходимо.

В вашем случае вам нужно будет сохранить два отсортированных набора-один для вашего GeoSet и один для управления TTLs в качестве баллов.

Например, предположив, что ваш член называется "foo", чтобы добавить его:

ZADD ttls 30 foo
ZADD elems -8.616021 41.154503 foo

Чтобы истечь вручную, сначала найдите члены с вызовом ZRANGEBYSCORE ttls, а затем удалите их из обоих наборов.

Совет: предпочтительно использовать метку времени в качестве счета вместо секунд.