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