1,redis事务
redis中的事务transaction是一组命令集合,要么都执行,要么都不执行。
# MULTI
# SADD "user:1:following" 2
# SADD "user:2:followers" 1
# EXEC
redis将客户端发送的事务执行链放入一个队列queue中,然后接受到EXEC请求后才顺序执行这个命令串,同时保证执行这些的时候不被其他命令打扰。
错误处理:
* 语法错误,redis直接返回错误,连语法正确的其他命令也不会执行
* 运行错误,只有那条出错的语句不会执行成功,其他照样执行
redis木有rollback机制,这个要靠自己去处理出错情况。
2,watch命令介绍
我们知道在一个事务中只有当所有的命令都执行完后才能得到每个结果的返回值,可有些情况下需要先获得一条命令的返回值,然后再根据这个值执行下一条命令。这个时候可以使用watch,watch命令可以监控一个或多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。监控一直持续到EXEC命令(因为事务中的命令是在EXEC之后才执行的,所以在MULTI命令后可以修改watch监控的键值)
Tips:watch命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们需要在EXEC执行失败后重新执行整个函数
执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用unwatch命令取消监控
3,生存时间
在实际开发中经常会遇到一些有时效的数据,比如限时优惠活动、缓存或验证码等,过了一定时间就需要删除这些数据。在redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后redis自动删除它。
# EXPIRE key seconds
# TTL key
返回一个键还要多久就要超时,当键不存在或者木有为键设置超时间接时返回-1
# PERSIST key
取消键的生存时间设置,即将键恢复成永久
除了PERSIST外,使用SET或GETSET命令为键赋值会同时清除键的生存时间。其他命令不会
# PEXPIRE key millseconds
以毫秒为单位的超时设置
# EXPIREAT key time
使用Unix时间作为参数,也就是1970-01-01 00:00:00 到现在的秒数
4,实现缓存cache
为了提高网站的负载能力,常常需要将一些访问频率较高但是对CPU或IO资源消耗较大的操作结果缓存起来,比如每次获取一个单方报价,需要去数据库检索一个大字段,请求IO资源,然后多线程反序列化为一个对象,请求线程资源和CUP资源,那么这个东西就需要缓存起来。
一般来讲会给缓存设置过期时间,防止内存被大量占用。
然而在一些场景中这种方法并不能满足需要,当服务器内存有限的时候,如果大量使用缓存键其生存时间过长会导致redis占满内存,另一方面如果生存时间过短会导致缓存命中率过低而影响效率。
为此,可以限制redis能够使用的最大内存,并让redis按照一定的规则淘汰不需要的缓存键,这种方式在只将redis用做缓存系统时候非常实用,哈哈哈哈,原来用做缓存只是redis的一个小小部分功能而已。
具体方法如下:
修改配置文件的maxmemory参数,单位是字节,当超过这个限制redis会根据maxmemory-policy参数指定的策略删除不需要的键,直到redis占用内存小于指定内存。
redis支持的淘汰键规则:
* volatile-lru 使用LRU算法删除一个键(只对设置了生存时间的键)
* allkeys-lru 使用LRU算法删除一个键,这个比较常用
* volatile-random 随机删除一个键(只对设置了生存时间的键)
* allkeys-random 随机删除一个键
* volatile-ttl 删除生存时间最近的一个键(只对设置了生存时间的键)
* noeviction 不删除键,只返回错误
事实上redis并不会准确将整个数据库中最久未被使用的键删除,而是每次从数据库中随机取3个键并删除这3个键中最久未被使用的键,删除生存时间最接近的键的实现方案也是一样,这个3这个数字可以通过maxmemory-samples来配置。
5,排序
* 有序集合SortedSet的集合操作:
SortedSet常见使用场景是大数据排序,如游戏玩家排行榜,所以很少会需要获得键中全部数据。可以使用下列命令序列来获取集合运算:
MULTI
ZINTERSCORE tempKey ...
ZRANGE tempKey ...
DEL tempKey
EXEC
SORT命令
sort命令可以对list、Set、SortedSet进行排序,并且可以完成类似于关系型数据库中的连接查询任务。
# SORT key ALPHA DESC LIMIT 11, 10
默认SORT以数字排序,添加ALPHA参数可以以字典顺序排序,DESC表示倒序,LIMIT参数不解释
BY参数
很多情况下list或set中存储的元素值代表的是对象的ID,更多时候我们希望根据ID对应的对象的某个属性进行排序,比如提交时间。
如果提供了BY参数,SORT命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中第一个*并获取其值,然后依据该值对元素排序。
# SORT tag:python:posts by post:*->time DESC
上面的post:*是散列键Hash类型,而time是散列键值中的一个属性
GET参数
对于SORT排序后获取了一个ID列表,要显示所有文章的标题,并不需要对每个ID都去请求一次HGET,可以使用SORT命令的GET参数,可以获取多个字段
# SORT tag:python:posts BY post:*->time DESC GET post:*->title GET post:*->time GET #
最后一个# 代表还能获取文章的ID,也就是返回元素本身的值
STORE参数
# SORT tag:python:posts BY post:*->time DESC GET post:*->title GET post:*->time GET # STORE sort.result
STORE参数常用来结合EXPIRE命令缓存排序结果
SORT性能优化:
SORT是redis中最强大最复杂的命令之一,如果使用不好很容易成为性能瓶颈。SORT命令的时间复杂度是O(n + mlogm),其中n表示要排序的列表中的元素个数,m表示要返回的元素个数。当n较大时候SORT命令性能会比较低,并且redis在排序前会建立一个长度为n的容器来存储待排序元素,n较大时严重影响性能
所以要注意:
* 尽可能减少待排序键中元素数量
* 使用LIMIT参数只获取需要的数据,m尽量小,分页查询
* 如果要排序的数据量较大,尽可能使用STORE参数将结果缓存起来。
6,消息通知
一个很常见的例子就是发送邮件。使用redis的list数据结构可以轻松实现,消费者LPUSH到list中,然后消费者RPOP取出任务。
一般来讲消费者需要去不断的轮训这个队列,这个有些不完美。如果有新任务加入到任务队列就通知消费者就好了。其实借助BRPOP命令可以实现这样的需求,不过这个是阻塞的,一直到这个队列中有任务了才会返回。
# BRPOP queue, timetoutseconds
7,优先级队列
BRPOP命令可以同时接受多个键,其完整命令格式为 BRPOP key1 key2
可同时检测多个键,如果所有键都没有元素则阻塞,如果其中有一个键有元素则会从该键中弹出元素。
借此特性可以实现区分优先级的任务队列。
$task = BRPOP queue:confirm.email queue:notify.email 0
execute($task[1])
这样只要confirm队列中有任务,那么取出来的肯定是confirm任务,否则才会去取notify的任务
8,发布/订阅模式
# PUBLISH channel message
向某个频道channel发布一个消息
# SUBSCRIBE channel
# UNSUBSCRIBE channel
按照规则订阅:
支持glob风格的通配符,shell风格的通配符,跟正则式没有半毛钱关系
# PSUBSCRIBE channel.?*
9,管道
客户端和redis使用TCP协议连接。往返时延在数量级上相当于redis处理一条简单命令。
redis底层通信协议对管道pipelining提供了支持,但一组命令中每条命令都不依赖于之前命令的执行结果就可以将这组命令一起通过管道发出去。
10,内存优化
内部编码优化
博客新地址:http://yidao620c.github.io
相关推荐
2025职业教育知识竞赛题库(含答案).pptx
"SOA海鸥算法优化下的KELM核极限学习机分类MATLAB代码详解:传感器故障诊断数据集应用与本地EXCEL数据读取功能",(SOA-KELM)海鸥算法SOA优化KELM核极限学习机分类MATLAB代码 代码注释清楚。 main为运行主程序,可以读取本地EXCEL数据。 很方便,容易上手。 (以传感器故障诊断数据集为例) ,核心关键词:SOA-KELM;海鸥算法优化;核极限学习机分类;MATLAB代码;代码注释清楚;main程序;读取本地EXCEL数据;传感器故障诊断数据集。,SOA-KELM分类算法MATLAB代码:海鸥优化核极限学习机,轻松上手,读取EXCEL数据集进行传感器故障诊断
内容概要:本文由世界经济论坛与Capgemini联合发布,主要阐述了AI代理从简单程序演变为复杂自主系统的进程,强调了它们在现代各行业如医疗保健、教育及金融服务等方面所发挥的作用,并讨论了其潜在收益以及伴随的风险和挑战。文中详细介绍了AI代理的发展历程、核心技术趋势(深度学习、强化学习)、多种类型的AI代理及其系统架构,同时对未来的发展方向——多智能体系统进行了展望,探讨了提高生产力、优化资源配置的新机会。 适合人群:对人工智能感兴趣的各界人士,尤其是关注技术创新对企业和社会长远影响的决策者和技术领导者,如商业领袖、政府官员及其他利益相关方。 使用场景及目标:①帮助政策制定者理解AI代理的功能和应用场景;②为企业管理者提供关于部署和管理AI系统的指导;③为研究者指明未来科研方向并探讨伦理和社会责任等问题;④为技术人员揭示当前最先进技术和最佳实践案例。 其他说明:文中还提到了随着更加先进的AI代理不断涌现,确保安全性和有效监管将是未来发展的重要议题之一。此外,跨行业的共识对于将AI代理顺利整合到各个部门至关重要。文章指出需要建立稳健治理机制来保障AI技术健康发展并服务于公共利益最大化的目标。
2025网络安全理论知识考试题(含答案).pptx
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
基于FATFS系统的STM32F407 SD卡升级Bootloader程序:自动检测与升级流程,stm32f407 SD卡升级 bootloader程序 基于sdio fatfs系统的stm32 bootloader程序 功能简介: 本程序使用fatfs系统读取bin文件。 开机后会自动检测sd卡,检测到sd卡后,再读取固定名称的bin文件,之后会对bin文件进行首包校验,判断该升级包的起始地址是否正确,正确的话,就循环读取bin文件并写入到flash中。 完成升级。 详细流程请看流程图 ,stm32f407; SD卡升级; bootloader程序; fatfs系统读取bin文件; 检测SD卡; 首包校验; 循环写入flash。,STM32F407 SD卡升级Bootloader程序:基于SDIO FATFS系统实现自动升级功能
2025网络与信息安全技术题库及答案.doc
C# WinForm通用软件开发框架源码,基于VS2019 .NET与DevExpress 21,WebApi连接SQLServer2014数据库,互联网化数据访问模式,C# 源码 WinForm?通用软件开发框架平台源码 基于:C#Winform+ WebApi +SQLServer2014数据库 基于:VS2019.NET? DevExpress 21.2.6控件 基于:SQLServer2014?数据库 客户端通过Http访问WebApi获得json数据的模式,本系统走互联网,只需要把WebApi发布在公网即可。 说明:此框架源码除系统管理功能外,其它无源码 ,C#源码; WinForm; WebApi; SQLServer2014; VS2019.NET; DevExpress控件; 互联网模式; 系统管理功能; 发布。,C# WinForm开发框架:基于DevExpress与WebApi的通用软件平台源码
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
基于SqueezeNet迁移学习算法的滚动轴承故障诊断方法研究——在MATLAB r2021b环境下的应用与拓展至多元信号领域的研究,MATLAB环境下一种基于sqeezenet网络迁移学习的滚动轴承故障诊断方法。 算法运行环境为MATLAB r2021b,该代码展示了如何使用深度学习(迁移学习)方法对滚动轴承进行故障诊断,演示了如何将一维轴承振动信号转为二维尺度图图像并使用预训练网络应用迁移学习对轴承故障进行分类。 迁移学习显著减少了传统轴承诊断方法特征提取和特征选择所花费的时间,并在小型数据集中获得了良好的准确性。 算法可迁移至金融时间序列,地震 微震信号,机械振动信号,声发射信号,电压 电流信号,语音信号,声信号,生理信号(ECG,EEG,EMG)等信号。 ,MATLAB环境; SqueezeNet网络; 迁移学习; 滚动轴承故障诊断; 算法运行环境; 一维轴承振动信号转换; 二维尺度图图像; 特征提取和选择; 信号分析;迁移至其他类型信号 (以分号隔开),基于SqueezeNet迁移学习在MATLAB的滚动轴承故障诊断算法优化
基于弱形式PDE建模的COMSOL不相溶两相流渗流水驱油模拟研究,comsol不相溶两相流渗流模拟,水驱油,基于弱形式PDE建模,模型已验证。 ,核心关键词:comsol; 不相溶两相流; 渗流模拟; 水驱油; 弱形式PDE建模; 模型验证。,"基于弱形式PDE建模的COMSOL两相流渗流模拟:验证水驱油模型"
Tiled for Mac是一款功能强大的开源地图编辑器,适用于macOS系统。它支持正交、等距和六边形地图类型,可创建无限大小的地图,并支持多图层编辑。用户可以通过直观的界面快速添加、修改地图元素,使用像素精度放置对象,并支持图块动画和碰撞编辑。Tiled的TMX格式易于理解,支持多种插件扩展,兼容多种游戏引擎,如RPG和平台游戏。它还提供撤销/重做功能,方便用户调整和优化地图。
太阳能光伏MPPT控制蓄电池三阶段充电模型仿真说明文档(附扰动观测法仿真模型,R2015b版),充电控制器,太阳能光伏MPPT控制蓄电池充电模型。 其中,光伏MPPT控制采用扰动观测法(P&O法),蓄电池充电采用三阶段充电控制。 仿真模型附加一份仿真说明文档,便于理解和修改参数。 版本: R2015b ,充电控制器; 光伏MPPT控制; 扰动观测法(P&O法); 蓄电池充电控制; 三阶段充电控制; 仿真模型; 仿真说明文档; 版本:R2015b,"R2015b版:太阳能光伏MPPT三阶段充电控制仿真模型及说明"
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
2025医院收费员考试题题库(含答案).docx
"欧姆龙PLC编程新手宝典:标准程序案例集,包括CP1H脉冲编程与触摸屏实战应用",欧姆龙PLC程序欧姆龙案例欧姆龙标准程序 本产品适用于新手或者在校生 本程序包括有欧姆龙CP1H脉冲程序案例,威纶通触摸屏程序,电子版讲义 程序涉及方面广,适合新手入门学习,掌握了这些以后欧姆龙脉冲程序基本通吃,编程起来无压力 本程序设计到CP1H各个轴的程序编写具体用了ACC PLS2 INI等众多指令, 每个轴的程序都是单独的,包括触摸屏在内,您可以直接调用程序套到直接的程序上,只需要把地址稍微改动即可。 本程序适用于新手、自动化专业在校生学习和提高,另外额外赠送主流的CAD电气原理图纸,包含各种主流的PLC接线原理图,各种成功案例,是每个电气工程师学习和提高最必不可少的资料 ,欧姆龙PLC程序; 欧姆龙案例; 欧姆龙标准程序; 新手学习; 在校生; CP1H脉冲程序案例; 威纶通触摸屏程序; 电子版讲义; 编程指令; 程序设计; PLC接线原理图; 成功案例。,欧姆龙PLC入门宝典:从新手到专业工程师的实用指南
"基于Simulink的锂电池SOC估计模型研究:卡尔曼滤波算法的参数辨识与模型优化",锂电池SOC估计模型 simulink SOC估算卡尔曼滤波估算 SOC电池参数辨识模型10个; 卡尔曼滤波算法锂电池SOC估算估算模型15个; 卡尔曼滤波31个; ,锂电池SOC估计模型; Simulink; SOC估算; 卡尔曼滤波估算; 电池参数辨识模型; 锂电池SOC卡尔曼滤波估算模型; 卡尔曼滤波,基于Simulink的锂电池SOC估计与卡尔曼滤波算法研究
苍鹰算法优化BP神经网络参数:多输入单输出预测建模及效果展示 注:此程序为matlab编写,可直接运行出多种预测结果图与评价指标。效果图为测试数据展示,具体预测效果以个人数据为准。,苍鹰优化算法NGO优化BP神经网络的软值和阈值参数做多输入单输出的拟合预测建模。 程序内注释详细直接替数据就可以使用。 程序语言为matlab。 程序直接运行可以出拟合预测图,迭代优化图,线性拟合预测图,多个预测评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替就可以得到自己满意的效果。 ,核心关键词: 苍鹰优化算法; NGO优化; BP神经网络; 软值和阈值参数; 多输入单输出拟合预测建模; 程序内注释; MATLAB程序语言; 拟合预测图; 迭代优化图; 线性拟合预测图; 预测评价指标。,基于苍鹰优化算法的NGO-BP神经网络模型:多输入单输出拟合预测建模与评估
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
GTP4ALL的安装文件