如何指定Redis Sorted Set固定大小?

时间:2015-09-11 06:34:21

标签: redis

我是新手使用Redis,最近我遇到了一个问题,当我在解决系统中处理高并发性问题的解决方案时,我想使用Redis,每个人都知道来自In-的访问权限内存比IO快得多。 Redis排序集是用于执行此操作的可能工具,我们希望使用固定大小的排序集来包含用户的手机号码,我用Google搜索/删除了很多,没有找到任何有意义的消息,那么任何人都可以告诉我如何指定Redis Sorted Set一个固定的大小?并且set应该告诉我对排序集的任何添加操作是否成功?

由于

2 个答案:

答案 0 :(得分:5)

我认为您无法指定尺寸,您必须自己检查。

您可以使用ZCARD

ZCARD KEY

或者您可以删除第一个元素ZREMRANGEBYRANK

[ZREMRANGEBYRANK][2] [KEY] 0 -[YOURSIZE]

答案 1 :(得分:0)

这可以通过 lua 脚本通过在添加元素 (ZCARD) 之前检查设置大小 (ZADD) 来完成。复杂度为 O(log(|setsize|)) :

-- KEYS[1] the sorted set
-- ARGV[1] the score 
-- ARGV[2] the member 
-- ARGV[3] the max size of the sorted set 
-- Returns number of elements added
--
if redis.call('ZCARD', KEYS[1]) < tonumber(ARGV[3]) then
    return redis.call('ZADD', KEYS[1], ARGV[1], ARGV[2])
else
    return 0    
end

如果您将上述代码段保存为 test.lua 文件,然后运行几次,例如

,您可以尝试一下
redis-cli --eval test.lua myset , 1 A 3
redis-cli --eval test.lua myset , 2 B 3
redis-cli --eval test.lua myset , 3 C 3
redis-cli --eval test.lua myset , 4 D 3
redis-cli --eval test.lua myset , 5 E 3

验证

127.0.0.1:6379> ZRANGE myset 0 100
1) "A"
2) "B"
3) "C"