【问题标题】:Redis: set maximum number of elements of a setRedis:设置集合的最大元素数
【发布时间】:2016-01-12 08:28:56
【问题描述】:

在 redis 中,是否可以将最大数量的元素设置为一个集合,因此当使用 sadd 时,redis 服务器会阻止该集合包含超过最大数量的元素?例如类似:

127.0.0.1:6379> SETSIZE KEY 100

提前致谢。

【问题讨论】:

标签: redis


【解决方案1】:

不,通常的命令无法实现,但 LUA 脚本可以实现:

local size = redis.call('SCARD', KEYS[1]);
if size < tonumber(ARGV[1], 10) then 
    return redis.call('SADD', KEYS[1], ARGV[2]);
end  
return -1;

【讨论】:

  • 并非如此。您仍然可以直接修改设置,而无需通过 Kia 脚本。
  • 没有 LUA 就不可能以原子方式做到这一点。你错了,@The Real Bill
  • 你在说什么?没有什么可以阻止你在没有 Lua 的情况下向集合中添加东西。没有什么。我建议你淡化你的态度——尤其是当你是不正确的人时。没有人谈论原子操作,因为这无关紧要。您提出的脚本不会限制 Redis 中一组项目的数量,它只是阻止该脚本执行此操作。它实际上不能限制集合,因为 Redis 没有该功能。只要有可用内存,调用 SADD 仍会添加项目。
  • 问题是如何以最大数量向 SET 添加元素 - 简而言之“如果 SET 中的元素计数
  • 不,问题是如何让 Redis 防止 SADD 添加超出数字 - 限制集合。你不能这样做。包含 Lua 脚本的客户端代码可以避免调用 SADD,但只要有可用内存,服务器就不能阻止 SADD 添加另一个成员。 Redis 中的所有操作都是原子的,因此与它无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2021-09-16
  • 2022-10-15
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
相关资源
最近更新 更多