Есть ли способ установить ограничение на число участников в отсортированном наборе redis?

Скажем, я хочу сохранить 10 самых последних дополнений к отсортированному набору redis, где 11-е добавление выталкивает 1-е из списка. И пока он не достигнет 10 пунктов, он просто растет нормально.

Должен ли я сам проверять длину каждого добавления и удалять 1-й элемент?


person Andrew Arrow    schedule 28.03.2013    source источник


Ответы (2)


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

ZREMRANGEBYRANK [KEY] 0 -10

person Ori Dar    schedule 29.03.2013
comment
Чтобы сохранить 10 самых высоких значений в zset, как задал OP, вам нужно будет использовать 0 -11, поскольку диапазоны Redis включаются. - person Erhhung; 02.04.2016
comment
Я предполагаю, что вы будете запускать это каждый раз, если будете добавлять элементы один за другим, сценарий lua будет работать лучше, не так ли? - person PirateApp; 09.05.2018

если вам просто нужно удалить первого члена в ZSet, вы можете использовать эту команду:

ZREMRANGEBYRANK key 0 0 

вы также можете отсортировать 11-й элемент как первый элемент в ZSet, используя ZADD со счетом 1:

ZADD key 1 member

EX:

redis 127.0.0.1:6379> ZADD myzset 1 one
(целое число) 1
redis 127.0.0.1:6379> ZADD myzset 1 two
(целое число) 1
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 withscores
1) "один"
2) "1"
3) "два"
4) "1"
redis 127.0.0.1:6379> ZREMRANGEBYRANK myzset 0 0
(целое число) 1
redis 127.0.0.1:6379> ZADD myzset 1 three
(целое число) 1
redis 127.0.0.1:6379> ZRANGE myzset 0 -1 withscores
1) "три"
2) "1"
3) "два"
4) "1"

person ahmed hamdy    schedule 28.10.2013