Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis:从所有集合中删除特定值_Redis - Fatal编程技术网

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

Redis:从所有集合中删除特定值,redis,Redis,我有一个在Redis中存储数据的程序。命名空间“foo”下的键中存储了任意数量的集合,即keys foo:将返回集合的键列表。我想从名称空间中包含字符串“bar”的所有集合中删除该字符串。本质上(这是在Ruby中): 由于使用了不用于生产的键,这是低效且不原子的。考虑到我事先没有想要操作的集合的键,有没有更好的方法从所有集合中移除“bar”呢 如果这是处理原子性并使其具有性能的唯一方法,我可以使用Lua脚本。这样做的方法是从字符串到集合进行反向查找 在将字符串插入到集合中的代码中,还需要将集合

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

由于使用了不用于生产的
,这是低效且不原子的。考虑到我事先没有想要操作的集合的键,有没有更好的方法从所有集合中移除“bar”呢


如果这是处理原子性并使其具有性能的唯一方法,我可以使用Lua脚本。

这样做的方法是从字符串到集合进行反向查找

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

    如果集合数据已经存在,您可以通过迭代每个集合并创建字符串->集合\名称集合来运行一次性回填作业

  • 现在这些集合已经存在,用于从集合中删除字符串的代码如下所示:

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

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

方法是从字符串到集合进行反向查找

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

    如果集合数据已经存在,您可以通过迭代每个集合并创建字符串->集合\名称集合来运行一次性回填作业

  • 现在这些集合已经存在,用于从集合中删除字符串的代码如下所示:

    redis.smembers("foo:strings:#{string}").each do |set|    
      redis.srem(set, string)
    end
    
您现在不再进行全表扫描键查找