StackExchange.Redis模糊查询

StackExchange.Redis用LuaScript执行代参命令

Redis在查询上提供给.net的api方法,只有StringGet、StringGetBit、StringGetRange。如果想做模糊查询,该怎么办?Redis Client那么强大,api不可能只限于此,查了查Redis官网,果然有大招,那就是LuaScript.
我们来先认识一下LuaScript,它是一个EVAL脚本。Redis2.6.0有内置的Lua编译器,EVAL就是用来在Lua编译器里执行脚本的。

LuaScript的源生使用

使用之前我们先来瞄一眼EVAL原貌,下图是命令示例:
在这里插入图片描述

1.EVAL 的第一个参数是Lua 5.1的脚本。脚本不需要定义Lua方法体(也不需要

),它只是一个即将运行在Redis服务器上下文中的Lua程序

2.第二个参数是跟在脚本之后的指示Redis键名的个数,键可访问脚本中下标以1为基数的KEYS[n]变量。

3.其他的参数以ARGV 来命名
示例返回结果:

    1) "key1"
    2) "key2"
    3) "first"
    4) "second"

以Lua脚本去调用Redis命令可以从用下两个不同的Lua函数,区别于出错处理方式:
redis.call() 抛出错误给调用者
redis.pcall() 以Lua表的形式返回结果

C#中使用LuaScript

言归正传,回到代码中来,Redis如何使用LuaScript呢?直接上代码实菜吧,写一个模糊查询key的方法,这里我已经实例好了一个cache单例,直接使用:

        /// <summary>
        /// 判断是否存在包含keyPattern的key
        /// </summary>
        /// <param name="keyPattern"></param>
        /// <returns></returns>
        public bool ExistPatternKey(string keyPattern) 
        {
            var script = "return redis.call('keys',@pattern)";
            var prepared = LuaScript.Prepare(script);
            var cacheResult= cache.ScriptEvaluate(prepared, new { pattern = keyPattern });
            if (cacheResult.IsNull)
            {
                return false;
            }
            return ((string[])cacheResult).Length > 0;
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值