首页 > 数据库 >使用StackExchange.Redis组件C#模糊删除模糊查找

使用StackExchange.Redis组件C#模糊删除模糊查找

时间:2023-05-05 14:00:24浏览次数:40  
标签:C# pattern 模糊 Redis redisResult keys var

 

C# StackExchange.Redis 模糊删除 模糊查找

 

复制代码
 /// <summary>
        /// 模糊查找
        /// </summary>
        /// <param name="key"></param>
        public List<XJDataDll.Tag.Point> SelectTags(string pattern)
        {
            List<XJDataDll.Tag.Point> result = new List<XJDataDll.Tag.Point>();
            try
            {


                var redisResult = _Redisconnection.GetDatabase().ScriptEvaluate(LuaScript.Prepare(
                                //Redis的keys模糊查询:
                                " local res = redis.call('KEYS', @keypattern) " +
                                " return res "), new { @keypattern = pattern });

                if (!redisResult.IsNull)
                {
                    RedisKey[] preSult = (RedisKey[])redisResult;
                    var Tags = _Redisconnection.GetDatabase().StringGet(preSult);

                    if (Tags != null)
                    {
                        result = Tags.Select(o => XJDataDll.Json.DataJsonSerializer.JsonToObject<XJDataDll.Tag.Point>(o.ToString())).ToList();
                    }
                }



            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (result == null)
                {
                    result = new List<XJDataDll.Tag.Point>();
                }
            }

            return result;
        }
复制代码 复制代码
    /// <summary>
        /// 模糊删除
        /// </summary>
        /// <param name="key"></param>
        public void LikeRemove(string pattern)
        {
            try
            {


                var redisResult = _Redisconnection.GetDatabase().ScriptEvaluate(LuaScript.Prepare(
                                //Redis的keys模糊查询:
                                " local res = redis.call('KEYS', @keypattern) " +
                                " return res "), new { @keypattern = pattern });

                if (!redisResult.IsNull)
                {
                    RedisKey[] preSult = (RedisKey[])redisResult;
                    _Redisconnection.GetDatabase().KeyDelete(preSult);
                }
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }
        }
复制代码

 

StackExchange.Redis 模糊查询和删除

 

 初始化连接对象

_connectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
_connMultiplexer = ConnectionMultiplexer.Connect(_connectionString);
_db = _connMultiplexer.GetDatabase(db);

通过 keys或scan查找出匹配的key,StackExchange.Redis 中调用 keys/scan/size/flush/save/集群 等命令须使用 IServer 对象

_server = _connMultiplexer.GetServer(_connMultiplexer.GetEndPoints()[0]); //默认一个服务器
var pattern = "BUIK_201710*";
var keys = _server.Keys(database: _db.Database, pattern: pattern); //StackExchange.Redis 会根据redis版本决定用keys还是scan(>2.8) 
return _db.KeyDelete(keys.ToArray()); //删除一组key

如果数据量很大(比如几十万个key),以上操作会很慢,甚至超时,原因未知,因为通过命令执行keys是很快的

为了提高效率,可以通过Lua脚本进行模糊查询的批量操作

复制代码
var pattern = "BUIK_201710*";
var redisResult = await _db.ScriptEvaluateAsync(LuaScript.Prepare(
                //Redis的keys模糊查询:
                " local res = redis.call('KEYS', @keypattern) " +
                " return res "), new { @keypattern = pattern });

if (!redisResult.IsNull) {
  _db.KeyDelete((string[])redisResult);  //删除一组key
}
复制代码

当然也可以通过脚本执行删除,不赘述,参考:https://www.cnblogs.com/skig/p/redis-lua-batch.html

标签:C#,pattern,模糊,Redis,redisResult,keys,var
From: https://www.cnblogs.com/Leo_wl/p/17373919.html

相关文章

  • 页面引入css样式时,使用link和@import有什么区别
    css文件引入的方式有两种:1.HTML中使用link标签<linkrel="stylesheet"href="style.css/>2.css中使用@import@import"style.css"/*使用字符创*/@importurl("style.css")/*使用url地址*/link和@import区别link属于HTML标签,除了加载css外,还可以做很多其的他事,比......
  • Tomcat配置ssl证书
    1.生成ssl证书keytool-genkeypair-alias“tomcat”-keyalg“RSA”-keystore“D:\ssl\tomcat.keystore”-validity365002.将生成证书复制到tomcatssl文件夹下,修改tomcat配置,找到tomcat/conf/server.xml文件<Connectorport="8081"protocol="org.apache.coyote.http1......
  • C#_上传文件到服务器的temp文件夹
    C#_上传文件到服务器的temp文件夹1.写在*.aspx中<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="有效代码_上传文件到服务器的temp文件夹.aspx.cs"Inherits="web_page_ssc_上传文件到服务器的temp文件夹"%><!DOCTYPEhtml><htmlxmlns=&......
  • EMMC分区设置
    一、fdisk-l(查看盘符)二、fdisk/dev/mmcblk0(对EMMC进行分区设置) 1、p(查看当前的分区)2、d(删除分区)3、n(新建分区) 4、w(保存设置并退出) 三、mkfs.ext4(格式化分区) 四、mount /源地址  /目标地址(挂载分区) 五、df-h(查看可用分区) ......
  • C# Winfom实现Toast功能
    publicclassToast{publicclassToastInfo{publicFormOwner{get;set;}publicstringText{get;set;}="";publicboolIncrease{get;set;}=true;publicintSt......
  • mysql_clone
    HowtoInstall安装UsingtheINSTALLPLUGINstatement:Unix/Linux:mysql>INSTALLPLUGINcloneSONAME'mysql_clone.so';Windows:mysql>INSTALLPLUGINcloneSONAME'mysql_clone.dll';Usingtheplugin-loadoptionintheMySQLco......
  • 转载:PageOffice在线打开office文件添加盖章没反应
    1、在控制面板的程序功能里面卸载印章客户端,然后重新打开文件,根据提示安装印章客户端sealsetup.exe,重新盖章试试。(**注意:**安装卸载的时候,先关闭所有的浏览器和所有的office,关闭以后再打开任务管理器,点击详信息,看看有没有WINWORD.EXE和EXCEL.EXE,有的话结束了。)如果还不能解......
  • CrackRTF 1
    查壳先运行看看是个啥:要我们输入密码(1),估计还有密码(2),随便输了就直接给你退出,先不管密码(2)是否存在遇到了再说。32位,进IDA找主函数:int__cdeclmain_0(intargc,constchar**argv,constchar**envp){DWORDv3;//eaxDWORDv4;//eaxcharStr[260];//[esp+4Ch......
  • AWS Serverless Lambda Function架构设计的几种方式
    如何构建大型Serverless应用从路由方式上,Lambda大致可以分为三种架构方式1:单体应用式这种方式和传统RESTAPI很相似,以nodejs为例,在service内部使用express框架作路由,如下图所示代码示例如下constexpress=require('express')constapp=express()app.listen(80,()=>......
  • ETF2100/5900 Introductory Econometrics
    ETF2100/5900IntroductoryEconometricsAssignment2—ACaseStudyontheBirth-weightofBabyImportantnotes:1.Thisisanindividualassignment.Thisassignmentisworth20%ofthisunit’stotalmark.Markswillbedeductedforlatesubmissiononthefoll......