gpt4 book ai didi

Redis:从所有集合中删除特定值

转载 作者:IT王子 更新时间:2023-10-29 06:08:42 26 4
gpt4 key购买 nike

我有一个在 Redis 中存储数据的程序。在命名空间“foo”下的键中存储了任意数量的集合,即 keys foo:* 将返回集合的键列表。我想从命名空间中包含它的所有集合中删除字符串“bar”。本质上(这是在 Ruby 中):

redis.keys("foo:*").each do |key|
redis.srem(key, "bar")
end

由于使用了 keys,它不是为生产使用而设计的,这是低效的并且不是原子的。鉴于我事先没有要操作的集合的 key ,是否有更好的方法从所有集合中删除“bar”?

如果 Lua 脚本是处理原子性并使其高效的唯一方法,我会接受它。

最佳答案

执行此操作的方法是从字符串到集合进行反向查找。

  • 在将字符串插入集合的代码中,您还将把集合名称插入到该字符串的集合中。例如,将字符串 bar 插入集合 foo:baz 也会导致将值 foo:baz 插入集合 foo:strings :bar 或类似的东西。

    如果集合数据已经存在,您可以通过迭代每个集合并创建 string->set_name 集合来运行一次性回填作业。

  • 现在这些集合已经存在,从集合中删除字符串的代码类似于:

    redis.smembers("foo:strings:#{string}").each do |set|    
    redis.srem(set, string)
    end

您现在不再进行全表扫描键查找。

关于Redis:从所有集合中删除特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19556779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com