StackExchange.Redis 使用LuaScript脚本模糊查询hash
原文: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
list.Add(new CustomInfo()
{
Password = preval[indexPwd + ],
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(发送/接收超时设置(毫秒) )
StackExchange.Redis 使用LuaScript脚本模糊查询hash的更多相关文章
- redis+lua实现脚本一键查询
场景 经常需要查redis某个key的值,需要执行三条命令才能查到 redis-cli,启动redis select num,选择db get key,查询语句 需要执行三条命令才能实现某个key的查 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
前言 使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey&qu ...
- stackExchange.redis 实现模糊匹配批量查询
如果使用redis的频次较高,那么业务中经常会出现需要根据关键字进行批量查询,所以总结一下StackExchange中使用批量查询的方法(如果数据量很大,那么在redis中模糊查询很耗时,请慎用!) ...
- StackExchange.Redis 模糊查询和删除
初始化连接对象 _connectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString" ...
- Redis中的关系查询(范围查询,模糊查询等...)
本文部分转自于:http://blog.csdn.net/dc_726/article/details/42784317 本文对Redis如何保存关系型数据,以及如何对其匹配.范围.模糊查询进行举例讲 ...
- StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用
ConnectionMultiplexer ConnectionMultiplexer 是StackExchange.Redis的核心对象,用这个类的实例来进行Redis的一系列操作,对于一个整个应用 ...
- StackExchange.Redis 之 hash 类型示例
StackExchange.Redis 的组件封装示例网上有很多,自行百度搜索即可. 这里只演示如何使用Hash类型操作数据: // 在 hash 中存入或修改一个值 并设置order_hashkey ...
- Redis模糊查询
最近使用Redis优化项目功能,其中有一部分为模糊查询,找了很多帖子,也没有找到很好的解决方案和思路,最终皇天不负有心人啊,终于让我找到了!!! 感谢该帖作者:WalkerAlone 原文链接:ht ...
随机推荐
- 字符串format函数使用
#format拼接字符串,format()内的参数必须为可迭代的对象p1="i am {2},age {1},{0}".format("seven",18,'a ...
- GDB学习笔记
GDB是UNIX及UNIX-like下的调试工具.GDB这个调试工具相比于VC.z的优点是具有修复网络断点以及恢复链接等功能. 一.功能 一般来说,GDB主要帮助你完成下面四个方面的功能: 1.启动你 ...
- php中判断数组键值,array_key_exists和isset区别
$arr = array('key' => NULL); if(isset($arr['key'])){ echo 'isset'; } else { echo 'unset'; } echo ...
- bzoj3252 攻略 贪心+dfs序+线段树
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3252 题解 有一个非常显然的贪心思路:每次选择目前走到那儿能够获得的新权值最大的点. 证明的话 ...
- 企业级监控软件Zabbix搭建部署之zabbix在WEB页面中的配置
企业级监控软件zabbix搭建部署之zabbix在WEB页面中的配置 企业级监控软件zabbix搭建部署之zabbix在WEB页面中的配置 关于安装请看 http://www.linuxidc.com ...
- vue的keep-alive组件
keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 <keep-alive> <l ...
- UIWebView和WKWebView一些琐事
WebViewJavascriptBridge 1.load加载 ,去本地查找html路径方式 NSString* htmlPath = [[NSBundle mainBundle] pathForR ...
- phpjm解密程序,也适用于其他混淆加密的破解
<?php $file = 'plugin.php'; //要破解的文件 $fp = fopen($file, 'r'); $str = fread($fp, filesize($file)); ...
- 洛谷P1242 新汉诺塔(dfs,模拟退火)
洛谷P1242 新汉诺塔 最开始的思路是贪心地将盘子从大到小依次从初始位置移动到目标位置. 方法和基本的汉诺塔问题的方法一样,对于盘子 \(i\) ,将盘子 \(1\to i-1\) 放置到中间柱子上 ...
- Python3.5自带venv创建虚拟环境
为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,保持全局解释器的干净整洁,使其只作为创建(更多)虚拟环境的源. windows下创建虚拟环境 Python3.5自带venv,只需执行py ...