Redis 慢速DEL大键的替代方案

Redis 慢速DEL大键的替代方案,redis,Redis,在即将发布的Redis 4中有异步取消链接,但在此之前,除了实现无阻塞或最小阻塞的大密钥集删除,还有哪些好的替代方案 重命名为某个唯一的名称,然后过期1秒是一个好的解决方案吗?首先重命名,以便原始密钥名可供使用。立即释放内存不是当务之急,Redis可以在可能的情况下进行异步垃圾收集。EXPIRE不会消除延迟,只会延迟到服务器实际使值过期为止(请注意,Redis使用近似的过期算法)。一旦服务器实际使该值过期,它将发出DEL命令,该命令将阻止服务器,直到删除该值 如果无法使用v4的取消链接,则删除大

在即将发布的Redis 4中有异步取消链接,但在此之前,除了实现无阻塞或最小阻塞的大密钥集删除,还有哪些好的替代方案


重命名为某个唯一的名称,然后过期1秒是一个好的解决方案吗?首先重命名,以便原始密钥名可供使用。立即释放内存不是当务之急,Redis可以在可能的情况下进行异步垃圾收集。

EXPIRE
不会消除延迟,只会延迟到服务器实际使值过期为止(请注意,Redis使用近似的过期算法)。一旦服务器实际使该值过期,它将发出
DEL
命令,该命令将阻止服务器,直到删除该值

如果无法使用v4的
取消链接
,则删除大型集合的最佳方法是以增量方式将其排空。这可以通过服务器端Lua脚本轻松实现,以减少带宽,例如:

local target = KEYS[1]
local count = tonumber(ARGV[1]) or 100
local reply = redis.call('SPOP', target, count)
if reply then
  return #reply
else
  return nil
end

若要排出,请使用要删除的键的名称,并使用或不使用count参数,反复调用上面的脚本,直到得到
nill
Redis回复。

谢谢。Redis是否会在空闲/加载时选择一个过期时间并清理值?我想我主要关心的是阻止需要删除密钥但不关心等待清理的客户端,它希望从Redis调用中快速返回,以便继续其他非Redis工作。v4中的取消链接是否会改善延迟,换句话说,在不阻塞其他不关心正在清理的密钥的客户机的情况下,它会真正异步吗?请选择一个好的时间-是的,但Redis没有考虑使一个值过期所需的时间,因此一个大的值,即使服务器不那么忙,也会花时间退出。Wrt to v4 async UNLINK,yes-释放内存时没有阻塞,但会立即从数据库中删除密钥。