我有一个大的Redis排序集。我们需要每天重新索引集合中的数据,而客户主动请求集合中的数据。我的计划是使用不同的密钥构建第二个集合,然后用新的密钥替换现有的密钥:
查看RENAME文档,它指出:
如果newkey已经存在,则会被覆盖,当发生这种情况时,RENAME会执行隐式DEL操作,因此如果删除的键包含非常大的值,即使RENAME本身通常是常量操作,也可能导致高延迟。
我想知道,如果重新命名" live"排序集(例如,#34;死"),然后重命名新的"索引"排序设置为"直播" - 并管理这些请求。然后,只发出一个单独的DEL命令来删除" dead"设置:
想法?
答案 0 :(得分:2)
使用DEL
,您只是推迟了问题。在DEL
期间,redis会阻止其他客户端。
首先,我要调查问题的严重程度。 可以成为问题,例如在我们的登台系统上删除3.5GB ZSET
密钥大约需要2秒。
如果出现问题,请使用ZREMRANGEBYRANK
和DEL
拆分ZCARD
。
流水线是有效的(非事务性的),因此有助于通过ZCARD
预先确定总大小,然后发出N ZREMRANGEBYRANK
个命令(管道),范围为(例如)-10000 0
,以' 0 -1'结尾。删除所有成员后,Redis会自动删除密钥(排序集)本身。
希望这有帮助,TW