redis - not in redis查询怎么写

标签 redis

<分区>

如何获取所有不是以“enduser”开头的key

My List

"enduser_tom"
"master_1"
"enduser_jack"
"slave_1"
"slave_2"
"enduser_harry"
"enduser_panther"

Result should be :

"master_1"
"slave_1"
"slave_2"

这是我试过的

  • keys * ->列出所有的keys
  • keys *enduser -> 列出所有以 最终用户
  • keys enduser* -> 列出所有以 enduser 开头的键

因此需要帮助才能获得上述结果。

最佳答案

据我所知,KEYS 命令无法执行此操作。

使用 Lua 脚本:

local keys, filtered = redis.call('KEYS', '*'), {};
for i=1,#keys do
    if string.sub(keys[i], 1, string.len(ARGV[1])) ~= ARGV[1] then
        filtered[#filtered + 1] = keys[i];
    end
end
return filtered

SCRIPT LOAD 注册脚本,稍后您可以使用 EVALSHA 执行它:

127.0.0.1:6379> SCRIPT LOAD "local keys, filtered = redis.call('KEYS', '*'), {};\nfor i=1,#keys do\n    if string.sub(keys[i], 1, string.len(ARGV[1])) ~= ARGV[1] then\n        filtered[#filtered + 1] = keys[i];\n    end\nend\nreturn filtered"
"fca86e91217c20c90b268539603bdb16c7fdbc32"
127.0.0.1:6379> EVALSHA fca86e91217c20c90b268539603bdb16c7fdbc32 0 enduser

您还可以将其保存到文件中并使用 redis-cli --eval 执行它:

redis-cli --eval not_startswith.lua , enduser

关于redis - not in redis查询怎么写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174614/

相关文章:

redis - 有没有办法在 Kubernetes 上自动缩放 Redis 集群?

node.js - 用于 node.js 中聊天服务器的 Redis pub/sub

laravel - 如何连接不同用户的Redis数据库?

php - 使用 Homestead 在 Laravel 中使用 Redis 队列

redis - 故障转移和客户端超时

javascript - Redis - 如何列出数据库中的所有键?

django - 我想将 django 与 celery (redis) 一起使用。我需要在 django 应用程序的服务器上安装 redis 吗?或者我可以有一个单独的redis服务器吗?

redis - key 过期事件

laravel - 如何存储过滤后的数据?

caching - 安全分布式缓存的解决方案