redis 模糊查找keys

Redis入门教程可参考:超强、超详细Redis数据库入门教程

Redis操作命令可参考:Redis操作命令总结

redis可以通过命令Keys Match来进行键值的模糊匹配,借助StackExchange.Redis时,由于Dll内部没有实现Keys Match的操作,不过,StackExchange.Redis提供了直接执行Lua语句的入口:

RedisResult ScriptEvaluate(LoadedLuaScript script, object parameters = null, CommandFlags flags = CommandFlags.None);
RedisResult ScriptEvaluate(string script, RedisKey[] keys = null, RedisValue[] values = null, CommandFlags flags = CommandFlags.None);
RedisResult ScriptEvaluate(byte[] hash, RedisKey[] keys = null, RedisValue[] values = null, CommandFlags flags = CommandFlags.None);
RedisResult ScriptEvaluate(LuaScript script, object parameters = null, CommandFlags flags = CommandFlags.None);

Windows下调试Lua的环境搭建可参考如下:Windows下Lua+Redis 断点调试环境搭建==Linux下类似

Keys Match,当数据规模较大时使用,会严重影响Redis性能,Redis还可以通过SCAN命令模糊匹配Key。

以上两种方式的Lua语句如下:

//使用Keys *模糊匹配Key
return redis.call(‘keys‘,KEYS[1]) 

//使用SCAN模糊匹配Key
local dbsize=redis.call(‘dbsize‘) local res=redis.call(‘scan‘,0,‘match‘,KEYS[1],‘count‘,dbsize) return res[2]

StackExchange.Redis调用如下:

        private static object _locker = new Object();
        private static ConnectionMultiplexer _instance = null;

        public static ConnectionMultiplexer Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock (_locker)
                    {
                        if (_instance == null || !_instance.IsConnected)
                        {
                            _instance = ConnectionMultiplexer.Connect(ConfigUtils.ArrangeResultHost);
                        }
                    }
                }
                return _instance;
            }
        }

        public static IDatabase GetDatabase()
        {
            return Instance.GetDatabase();
        }

        //使用Keys *模糊匹配Key
        public static List<string> GetKeys(string key) {
            var result=(string[])GetDatabase().ScriptEvaluate(LuaScript.Prepare("return redis.call(‘KEYS‘,@keypattern)"),new{ keypattern=key });
            return result.ToList();
        }

        //使用SCAN模糊匹配Key
        public static List<string> GetKeys(string key)
        {
            var result = (string[])GetDatabase().ScriptEvaluate(
                LuaScript.Prepare("local dbsize=redis.call(‘dbsize‘) local res=redis.call(‘scan‘,0,‘match‘,KEYS[1],‘count‘,dbsize) return res[2]"),
                new RedisKey[] { key });
            return result.ToList();
        }
时间: 2024-10-25 08:41:30

redis 模糊查找keys的相关文章

2.redis通用keys操作

1.查询所有key keys * 2.模糊匹配 keys si[t|m]e 3.匹配某个不确定的字符 keys si?e 4.随机返回key randomkey 5.查询key类型 type age 6.判断key是否存在 exists site 7.删除key del age 8.重命名key rename site wangzhi 9.重命名key,如果重命名的key存在,不覆盖:重命名的key不存在,就新建key 10.使用某个数据库 redis默认有16个数据库. select 1 11

004 redis的keys的操作

一.概述 在redis之中,都是键值对的形式. keys就是表示的根本.现在我们来学习一下keys的命令. 二 .命令 keys * :查看当前库中的全部键. 这个命令支持通配: * :通配多个字符. ? :通配单个字符 exists key : 可以判断键是否存在. 命中是返回1,否则为0. del key : 删除key . type key : 获取对应key的value的类型 expire key 毫秒值:给key设置生命周期. ttl key : 查看key剩余的生命周期. 原文地址:

Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失

最近的互联网线上事故发生比较频繁,20180919顺丰发生了一起线上删库事件,在这里就不介绍了. 在这里讲述一下最近发生在我公司的事故,以及如何避免,并且如何处理优化. 间接原因还有很多,技术跟不上业务的发展,由每日百万量到千万级是一个大的跨进,公司对于系统优化的处理优先级不高,技术开发人手的短缺 第一次宕机20180913某个点,公司某服务化项目的RDS实例连接飙升,CPU升到100%,拒绝了其他应用的所有请求服务整个过程如下: 监控报警,显示RDS的CPU使用率达到80%以上,DBA介入,准

Redis 【keys】 一句话说明

DEL----------------------------------删除给定的一个或多个key DUMP--------------------------------序列化给定key,并返回被序列化的值 EXISTS------------------------------检查给定 key 是否存在 EXPIRE------------------------------为给定key设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除,单位:秒 EXPIREAT----

Redis批量删除keys

redis中del可以删除单个key,对于批量删除key的需求我们可以借助linux的xargs 代码如下: /usr/local/bin/redis-cli keys xxxxxx | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径 //如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del 如果要指定 Redis 数据库访问密码,使用

Linux安装Redis和Redis基本操作命令

01Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等

Redis Persistence 之 redis database

1.关于redis持久化问题,看看官网文档: 注:redis提供了多种不同方式的持久化选项: RDB(即 redis database)持久化表现在特定的时间间隔内某一个时间点的快照.可以理解为,在指定时间间隔内将内存中的数据集快照写入磁盘,也就是常说的snapshot快照,它恢复时是将快照文件直接读入内存中. AOF持久性地记录在服务器中的所有写操作命令,并且在服务器重新启动时执行这些操作命令.(关于AOF会在下一篇博文中介绍.) 补充说明:(redis设置连接数据库密码的操作命令) 注:使用

Java 连接使用 Redis

1. 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. 首先你需要下载驱动包,下载 jedis.jar,确保下载最新驱动包.(还有common-pool2...jar,见jedis.jar 的依赖jar包) 在你的classpath中包含该驱动包. 2. 连接到 redis 服务 import redis.clients.jedis.Jedis; public class RedisJava {

Java 使用 Redis

安装 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. Java的安装配置可以参考我们的 Java开发环境配置 接下来让我们安装 Java redis 驱动: 首先你需要下载驱动包,下载 jedis.jar,确保下载最新驱动包. 在你的classpath中包含该驱动包. 连接到 redis 服务 import redis.clients.jedis.Jedis; public class Red