如何批量删除Redis哈希中特定键名的值?

2026-03-31 22:401阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计433个文字,预计阅读时间需要2分钟。

如何批量删除Redis哈希中特定键名的值?

与此类似,但需要哈希解解决方法而不是普通键:如何使用Redis原子性地删除匹配模式的键?我有一堆哈希,前缀如下:prefix:在每个散列下都有一堆键,例如:cc_XX,其中XX是任意字符串。

与此类似,但需要哈希解决方案而不是普通键: How to atomically delete keys matching a pattern using Redis

我有一堆哈希,前缀如下:“prefix:”

在每个散列下都有一堆键,如:“cc_XX”,其中“XX”是2个字母的代码.

我需要一些循环遍历所有redis哈希值,并删除每个cc_XX子键的一些方法,并且我正在寻找一种cli / lua方法来做到这一点(两者都不是很好).

任何建议将不胜感激.

以下 EVAL script应该做你想要的:

local keys = redis.call('KEYS',KEYS[1]) for i,k in ipairs(keys) do local res = redis.call('HKEYS',k) for j,v in ipairs(res) do if string.find(v,ARGV[1]) then redis.call('HDEL',k,v) end end end

您需要通过提供以下参数来调用它:

EVAL <script> 1 prefix:* cc_..

请注意,它会阻止Redis事件循环,直到脚本完成,因此如果您有大量的密钥,它可以冻结Redis一段时间. Atomicity有一个价格.

如何批量删除Redis哈希中特定键名的值?

更新:

如果你不需要原子性,那么下面的脚本将避免阻塞Redis太长时间(但是请注意,如果你有一个巨大的全局数量的键或者如果你的一个哈希对象是巨大的,它仍会阻塞:有没办法避免这种情况).

./redis-cli keys 'prefix:*' | awk ' BEGIN { script = "local res = redis.call('\''HKEYS'\'',KEYS[1]); \ for j,v in ipairs(res) do \ if string.find(v,ARGV[1]) then \ redis.call('\''HDEL'\'',KEYS[1],v); \ end \ end" } { printf "EVAL \"%s\" 1 %s cc_..\n", script, $1 }' | ./redis-cli

(用bash测试)

本文共计433个文字,预计阅读时间需要2分钟。

如何批量删除Redis哈希中特定键名的值?

与此类似,但需要哈希解解决方法而不是普通键:如何使用Redis原子性地删除匹配模式的键?我有一堆哈希,前缀如下:prefix:在每个散列下都有一堆键,例如:cc_XX,其中XX是任意字符串。

与此类似,但需要哈希解决方案而不是普通键: How to atomically delete keys matching a pattern using Redis

我有一堆哈希,前缀如下:“prefix:”

在每个散列下都有一堆键,如:“cc_XX”,其中“XX”是2个字母的代码.

我需要一些循环遍历所有redis哈希值,并删除每个cc_XX子键的一些方法,并且我正在寻找一种cli / lua方法来做到这一点(两者都不是很好).

任何建议将不胜感激.

以下 EVAL script应该做你想要的:

local keys = redis.call('KEYS',KEYS[1]) for i,k in ipairs(keys) do local res = redis.call('HKEYS',k) for j,v in ipairs(res) do if string.find(v,ARGV[1]) then redis.call('HDEL',k,v) end end end

您需要通过提供以下参数来调用它:

EVAL <script> 1 prefix:* cc_..

请注意,它会阻止Redis事件循环,直到脚本完成,因此如果您有大量的密钥,它可以冻结Redis一段时间. Atomicity有一个价格.

如何批量删除Redis哈希中特定键名的值?

更新:

如果你不需要原子性,那么下面的脚本将避免阻塞Redis太长时间(但是请注意,如果你有一个巨大的全局数量的键或者如果你的一个哈希对象是巨大的,它仍会阻塞:有没办法避免这种情况).

./redis-cli keys 'prefix:*' | awk ' BEGIN { script = "local res = redis.call('\''HKEYS'\'',KEYS[1]); \ for j,v in ipairs(res) do \ if string.find(v,ARGV[1]) then \ redis.call('\''HDEL'\'',KEYS[1],v); \ end \ end" } { printf "EVAL \"%s\" 1 %s cc_..\n", script, $1 }' | ./redis-cli

(用bash测试)