StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
来源:互联网 发布:excel 调用js 编辑:程序博客网 时间:2024/06/09 04:46
前言
使用StackExchange.Redis没有直接相关的方法进行模糊查询的批量删除和修改操作,虽然可以通过Scan相关的方法进行模糊查询,例如:HashScan("hashkey", "*key*"),然后再使用相关的方法进行相关的批量操作,但是如果缓存数据量比较大,效率低下,那么可以使用Lua脚本进行模糊查询的批量操作:ScriptEvaluate(LuaScript.Prepare(...))。
通过keys进行模糊查询后的批量操作
批量删除
1 var redis = ConnectionMultiplexer.Connect("127.0.0.1:6379,allowAdmin = true"); 2 redis.GetDatabase().ScriptEvaluate(LuaScript.Prepare( 3 //Redis的keys模糊查询: 4 " local ks = redis.call('KEYS', @keypattern) " + //local ks为定义一个局部变量,其中用于存储获取到的keys 5 " for i=1,#ks,5000 do " + //#ks为ks集合的个数, 语句的意思: for(int i = 1; i <= ks.Count; i+=5000) 6 " redis.call('del', unpack(ks, i, math.min(i+4999, #ks))) " + //Lua集合索引值从1为起始,unpack为解包,获取ks集合中的数据,每次5000,然后执行删除 7 " end " + 8 " return true " 9 ),10 new { keypattern = "mykey*" });
批量修改
1 redis.GetDatabase().ScriptEvaluate(LuaScript.Prepare(2 " local ks = redis.call('KEYS', @keypattern) " + 3 " for i=1,#ks do " + 4 " redis.call('set', ks[i], @value) " +5 " end " +6 " return true "),7 new { keypattern = "mykey*", value = "setval" });
对Hash集合下的key进行模糊查询后的批量操作
批量删除
1 redis.GetDatabase().ScriptEvaluate(LuaScript.Prepare( 2 " local ks = redis.call('hkeys', @hashid) " + 3 " local fkeys = {} " + 4 " for i=1,#ks do " + 5 //使用string.find进行匹配操作 6 " if string.find(ks[i], @keypattern) then " + 7 " fkeys[#fkeys + 1] = ks[i] " + 8 " end " + 9 " end " +10 " for i=1,#fkeys,5000 do " +11 " redis.call('hdel', @hashid, unpack(fkeys, i, math.min(i+4999, #fkeys))) " +12 " end " +13 " return true "14 ),15 new { hashid = "hkey", keypattern = "^mykey" }); //keypattern为可使用正则表达式
批量修改
1 redis.GetDatabase().ScriptEvaluate(LuaScript.Prepare( 2 " local ks = redis.call('hkeys', @hashid) " + 3 " local fkeys = {} " + 4 " for i=1,#ks do " + 5 " if string.find(ks[i], @keypattern) then " + 6 " fkeys[#fkeys + 1] = ks[i] " + 7 " end " + 8 " end " + 9 " for i=1,#fkeys do " +10 " redis.call('hset', @hashid, fkeys[i], @value) " +11 " end " +12 " return true "13 ),14 new { hashid = "hkey", keypattern = "^key", value = "hashValue" }); //keypattern为可使用正则表达式
对Set集合下的值进行模糊查询后的批量操作
批量删除
1 redis.GetDatabase().ScriptEvaluate(LuaScript.Prepare( 2 " local ks = redis.call('smembers', @keyid) " + 3 " local fkeys = {} " + 4 " for i=1,#ks do " + 5 " if string.find(ks[i], @keypattern) then " + 6 " fkeys[#fkeys + 1] = ks[i] " + 7 " end " + 8 " end " + 9 " for i=1,#fkeys,5000 do " +10 " redis.call('srem', @keyid, unpack(fkeys, i, math.min(i+4999, #fkeys))) " +11 " end " +12 " return true "13 ),14 new { keyid = "setkey", keypattern = "^myval" }); //keypattern为可使用正则表达式
注意
从 Redis 2.6.0 版本开始,才可通过内置的 Lua 解释器,使用 EVAL 命令对 Lua 脚本进行求值。
0 0
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
- ssm批量删除和模糊查询
- 用户信息的增删改查:非空验证添加,模糊查询,修改密码,批量和全部删除
- Redis模糊查询、模糊删除
- html angular+route:模糊查询+限定年龄范围+全部删除+批量删除+修改密码+添加用户
- 隔行换色+删除+批量删除+排序+模糊查询+修改+添加
- 数据的查询、模糊查询、新建、修改、删除
- 关于redis的pipline和lua脚本
- javascript操作table增加,批量删除,模糊查询,文本框修改(兼容IE,FF)
- 模糊查询,,排序,,隔行变色,,全选,反选,批量删除,修改
- redis的通配符和批量删除Key
- StackExchange.Redis官方文档(八)【脚本】
- Mybatis批量查询和模糊查询
- java memcached客户端,模糊查询/批量删除/查询所有的key
- 模糊查询+删除+修改+添加习题
- 购车模糊查询+排序+删除+修改
- redis中跑lua脚本删除指定key
- StackExchange.Redis
- 2017 年前端工具趋势
- 动画相关
- 网络安全之ipconfig
- 在IDEA中使用MyBatis Generator逆向工程生成代码
- Java三大器之过滤器(Filter)的工作原理和代码演示
- StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
- 【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(三) 针对在线服务的资源强稳定
- 学习笔记——Maven实战(七)常用Maven插件介绍(上)
- 排列函数
- 重新构建二叉树
- SymPy学习之SymPy Core
- 探究View的事件分发
- LaTeX基础教程
- Struts2工作原理2