Redis入门篇(2)- 奇淫技巧

本文介绍了Redis的慢查询配置,包括slowlog-log-slower-than和slowlog-max-len两个属性,以及配置的两种方式。还阐述了使用Lua解决Redis事务操作的方法,因Redis原生事务有局限,结合Lua可提供强大事务支持,最后给出将排名前3用户等级升一级的案例。

慢查询

许多的存储系统都提供了慢查询的配置,来帮助开发和运维排查线上哪些指令执行的时间耗时过长导致系统响应过慢。同样的Redis也不逊色,也提供了类似慢查询指令的配置。
Redis主要提供了两个配置属性slowlog-log-slower-thanslowlog-max-len,来配置慢查询指令的记录规则。

  • slowlog-log-slower-than

设置指令执行时间的阀值,如果超过该时间将会被记录下来。单位是微秒(1秒=1000毫秒=1000000微秒)默认值:10000微秒,建议配成10毫秒。

  • slowlog-max-len

记录最多的慢查询指令条数。其实Redis对于慢查询指令并不是记录在文件当中,而是以列表类型的格式存放与Redis内存中。如果慢查询的指令数量超出设定值将会以先进先出的方式剔除指令。 我们可以通过命令slowlog get [n] 获取前 n 条 慢查询指令。

  • 慢查询的相关指令
// 1. 获取前n条慢查询指令
slowlog get [n]
// 2. 查询当前慢查询指令列表的长度
slowlog len
// 3. 重置慢查询指令列表
slowlog reset

怎么用

慢查询的配置有两种方式

  • 修改redis的配置文件
  • 通过命令行进行修改,如下:
> config set slowlog-log-slower-than
> config set slowlog-max-len

此方式只能临时生效,如果希望服务重启后依然生效需要执行config rewrite 将配置持久化到本地文件。

使用Lua解决Redis的事务操作

Redis的PipleLine能够封装多个命令一次性传输至服务端执行,但这种批量操作并不是原子性操作。原生的批量操作虽然是原子性操作,但是功能的支持有限。Redis可以结合multi、exec、watch 三个指令来实现简单性的事务,对于指令语法上的错误能有效的实现数据回滚,但面对运行时发生的错误(如:某集合原先存放的数据类型为数值型,在添加时加入字符串类型导致报错),就不能回滚数据。为了能够满足事务的场景,Redis通过与Lua脚本的结合提供了强大的事务支持。(关于Lua脚本的语法大家网上自行查阅,本篇不做讲解)

怎么用

Lua脚本和Redis结合使用有3种方法

  1. eval 脚本内容 key个数 key列表 参数列表
> eval 'return "hello" .. KEY[1] .. ARGV[1]' 1 redis world
  1. redis-cli --eval 脚本文件 key个数 key列表 参数列表
$ redis-cli --eval /home/zmj/test.lua
  1. evalsha SHA值 key个数 key列表 参数列表
> evalsha dsfdsjl343j42lj34l23j4l3 1 redis world

该命令是先将Lua脚本加载至redis内存中会获得一个SHA1值,然后通过SHA1执行。此方式能够有效的复用脚本,提高执行效率。关于管理lua脚本的命令如下

// 加载脚本至redis内存中
$ redis-cli script load "$(cat /home/zmj/batch_incr.lua)"
// 是否存在此SHA1的脚本
> script exists 4ff9d1c915292602c
// 清除redis内存中的所有Lua脚本
> script flush

案例

需求:将排名前3的用户等级都上升一级

  • Lua脚本(batch_incr.lua)
-- 1. 前3名用户(使用Redis内置的API)
local userList = redis.call("SMEMBERS",KEYS[1]);
local count = 0 ;
-- 2. 遍历前3名用户
for index,key in ipairs(userList)
do
-- 3. 增加用户等级
	redis.call("incr",key);
	count=count+1;
end
return count;
  • 执行脚本
$ redis-cli --eval /home/zmj/batch_incr.lua

书写技术文章是一个循序渐进的过程,所以我不能保证每句话、每行代码都是对的,但至少能保证不复制、不粘贴,每篇文章都是自己对技术的认识、细心斟酌总结出来的。乔布斯说:我们在这个星球上的时间都很短,很少有机会去做几件真正伟大的事情,同时要做得好,我必须要趁我还年轻的时候完成这些事。
其实我想说的是,我是一枚程序员,我只想在有限的时间内尽可能去沉淀我这一生中所能沉淀下来的东西


清山绿水始于尘,博学多识贵于勤。

我有酒,你有故事吗?

微信公众号:「Java锦囊」。

欢迎一起谈天说地,聊Java。


基于分布式模型预测控制的多个固定翼无人机一致性控制(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,采用Matlab代码实现相关算法,属于顶级EI期刊的复现研究成果。文中重点研究了分布式模型预测控制(DMPC)在多无人机系统中的一致性控制问题,通过构建固定翼无人机的动力学模型,结合分布式协同控制策略,实现多无人机在复杂环境下的轨迹一致性和稳定协同飞行。研究涵盖了控制算法设计、系统建模、优化求解及仿真验证全过程,并提供了完整的Matlab代码支持,便于读者复现实验结果。; 适合人群:具备自动控制、无人机系统或优化算法基础,从事科研或工程应用的研究生、科研人员及自动化、航空航天领域的研发工程师;熟悉Matlab编程和基本控制理论者更佳; 使用场景及目标:①用于多无人机协同控制系统的算法研究与仿真验证;②支撑科研论文复现、毕业设计或项目开发;③掌握分布式模型预测控制在实际系统中的应用方法,提升对多智能体协同控制的理解与实践能力; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注DMPC算法的构建流程、约束处理方式及一致性协议的设计逻辑,同时可拓展学习文中提及的路径规划、编队控制等相关技术,以深化对无人机集群控制的整体认知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值