从Hashes清除X键

时间:2013-10-18 16:58:00

标签: redis servicestack

我的redis数据库中有3个哈希:

设置:recentbooks

设置:badbooks

设置:funnybooks

所有哈希都包含书ID作为键。

我想从所有哈希中删除包含234 Id的书。

我该怎么做:

  • Lua Scripting

  • 管道

  • 其他

2 个答案:

答案 0 :(得分:2)

使用ServiceStack redis客户端API,您可以像这样管道删除请求:

var client = new RedisClient("localhost", 6379);

using (var pipeline = client.CreatePipeline())
{
    pipeline.QueueCommand(r => r.RemoveEntryFromHash("set:recentbooks", "234"));
    pipeline.QueueCommand(r => r.RemoveEntryFromHash("set:badbooks", "234"));
    pipeline.QueueCommand(r => r.RemoveEntryFromHash("set:funnybooks", "234"));

    // All deletes will be sent at once.
    pipeline.Flush();
}

答案 1 :(得分:1)

使用LUA脚本很容易:

EVAL "redis.call('HDEL',KEYS[2],KEYS[1]);
      redis.call('HDEL',KEYS[3],KEYS[1]);
      redis.call('HDEL',KEYS[4],KEYS[1]);" 
      4 234 set:recentbooks set:badbooks set:funnybooks

我从未使用过ServiceStack,但是通过上面的信息,您可以在ServiceStack中调用redis客户端来删除密钥。

您也可以在文件中编写lua脚本,然后使用参数调用它:

redis-cli> EVAL "$(cat myscript.lua)" 4 234 set:recentbooks set:badbooks set:funnybooks