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原貌,下图是命令示例:
StackExchange.Redis模糊查询_第1张图片

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单例,直接使用:

        /// 
        /// 判断是否存在包含keyPattern的key
        /// 
        /// 
        /// 
        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;
        }

你可能感兴趣的:(.net,后端开发)