StackExchange.Redis 使用LuaScript脚本模糊查询hash

获取redis连接

    public class RedisHelper
    {
        private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["RedisConnection"].ConnectionString;
        private static ConnectionMultiplexer _connection;
        private static ConnectionMultiplexer Connection
        {
            get
            {
                if (_connection == null || !_connection.IsConnected)
                {
                    _connection = ConnectionMultiplexer.Connect(ConnectionString);
                }
                return _connection;
            }
        }

        public static IDatabase GetDatabase()
        {
            ConnectionMultiplexer redis = Connection;
            //return redis.GetDatabase(RedisDatebaseId);
            return redis.GetDatabase();
        }
    }

//根据模糊查询条件获取key值集合

   var pattern = "UserInfoHash:*";//匹配符
   var redisResult = db.ScriptEvaluate(LuaScript.Prepare(
                //Redis的keys模糊查询:
                " local res = redis.call('KEYS', @keypattern) " +
                " return res "), new { @keypattern = pattern });
   string[] preSult = (string[])redisResult;//将返回的结果集转为数组

//根据key值集合获取所有Hash 

var list = new List<ICustomInfo>();//定义存放客户信息的集合
string json = "{ 'UserInfoHash:0', 'UserInfoHash:1','UserInfoHash:2', 'UserInfoHash:4' }";

//Redis的keys模糊查询:
" local result={}  local mykeys=" + json + "; " +
               " for i,v in pairs(mykeys) do result[i]=redis.call('hgetall',v) end; " +
               " return result"));
//将结果集转为数组 
var vals = (StackExchange.Redis.RedisResult[])redisResult1;
     foreach (var val in vals)
                {
                    string[] preval = (string[])val;
                    int indexCount = Array.IndexOf(preval, "CustomerCode");
                    int indexPwd = Array.IndexOf(preval, "Password");

                    string ac = preval[indexCount + 1];//账号的值,等于账号名称所在的下标+1
                    list.Add(new CustomInfo()
                    {
                        Password = preval[indexPwd + 1],
                        Account = ac,
                        UpdateTime = DateTime.Now,
                        Token = StringExtension.ToBase64String(string.Format("{0}:{1}", DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"), ac))
                    });
                }

注:根据key模糊查询一次数据过多时,可能会报超时问题。 解决方法:在redis连接字符串加入对应的  syncTimeout=10000(发送/接收超时设置(毫秒) )

 

转载于:https://www.cnblogs.com/-xyl/p/11245104.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值