设为首页 收藏本站
查看: 1013|回复: 0

[经验分享] Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

[复制链接]

尚未签到

发表于 2017-12-20 18:53:22 | 显示全部楼层 |阅读模式
Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

简介
  《Redis 小白指南(一)- 简介、安装、GUI 和 C# 驱动介绍》 讲的是 Redis 的介绍,以及如何在 Windows 上安装并使用,一些 GUI 工具和自己简单封装的 RedisHelper。
  《Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合》讲的是 Redis 中最核心的内容,最常用的就是和数据类型打交道。

目录


  • 事务
  • 过期时间
  • 消息通知
  • 管道
  • 优化内存空间

事务
  事务是一组命令的集合,事务和命令一样都是 Redis 的最小执行单位。即一个事务中的命令,要么都执行,要么都不执行。可以思考关系型数据库中的事务特性 ACID:
  (1)原子性(Atomicity):在事务结束时,其中包含的更新处理要么全部执行,要么完全不执行。
  (2)一致性(Consistency):事务中包含的处理,要满足数据库提前设置的约束,也称完整性。
  (3)隔离性(lsolation):保证不同事务之前互不干扰的特性。
  (4)持久性(Durability):事务一旦结束,DBMS 会保证该时点的数据状态得以保存的特性,也称耐久性。
  Redis 可以保证一个事务中的命令依次执行而不会被其它命令插入。如:Client A 需要执行多条指令,同时 Client B 也执行多条指令,因为网络传输或者时间等因素造成指令发送到 Redis 服务器的顺序有先后,即有可能会出现 A 发送的指令和 B 发送的指令形成了交叉,使用事务就可以避免这种情况。
  遗憾的是,Redis 不支持回滚。
  

MULTI    //开启事务的指令  

  
EXEC    //执行事务,依次执行
  

DSC0000.png

  当客户端发送了 EXEC 的指令后,即使客户端此时突然断开与服务器的链接,事务中的操作依然会依次执行,因为他们都已经被缓存到 Redis 事务的队列中了。

过期时间
  1.设置过期时间意味着一段时间后就会删除 redis 中指定的数据。
  2.应用场景:限时优惠活动、缓存、学校成绩排名和游戏积分排名定期刷新。
  3.命令:
  (1)EXPIRE:
  

EXPIRE key seconds  //seconds 参数表示键的过期时间,单位是秒  

DSC0001.png

  (2)TTL:查看剩余时间
  

TTL key  

DSC0002.png

  (3)DEL:删除
  

DEL key  

  (4)PERSIST:取消键的过期时间设置(将该键切换成永久性质的)
  

PERSIST key  


消息通知
  1.什么情况才会使用呢?
  答:比如,我们的网站进行一些比较耗时的操作时,如发送邮件、复杂的数据运算和 IO 日志记录等都可以使用,因为这样可以避免阻塞前端页面的渲染,避免用户进行长时间的等待。一般我们会使用多线程和异步进行处理这种耗时操作的问题。
  2.什么是消息通知?
  答:你可以理解为常说的消息队列,类似设计模式中的生产/消费模式,一边是生产者(producer),一边是消费者(consumer)。生产者负责把要处理的任务丢到队列里,消费者负责取出队列中的任务进行执行。
  3.特点:
  松耦合:没有语言限制,开发团队可以分别使用不同的开发语言,双方约定好数据的传输格式即可。
  易于扩展:消费者可以有多个,部署在多台服务器上,轻松减轻单台服务器的压力。
DSC0003.png

  不过,从大局来看,企业常采用第三方更为专业的 MQ,如 RabbitMQ 替代 Redis 的消息队列机制。《[.NET] RabbitMQ 的行为艺术》

管道
  客户端和 Redis 采用的是 TCP 进行连接。
  我们对 Redis 发送一条指令后进行等待,完毕后返回执行结果;接着,发送第二条指令,再次等待 Redis 执行完毕后的执行结果;第三次发送指令 ... ...。
  虽然现在的网络带宽已经足够快,不过如果执行的命令过多,性能消耗依然是挺明显的。
  管道机制,它把多条命令一次性组合起来发送到 Redis 服务器执行,再返回所有的执行结果,与之前的相比减少了两端网络请求的次数从而提高了性能。
DSC0004.png


优化内存空间
  虽然在现在这个年代,内存条的价格已经非常便宜,但相对于硬盘来说,价格依然非常高昂,进行内存空间成本的控制和资源的有效利用也是一个迫切的主题。
  1.精简键名和键值。不过需要自己把握精简的尺度,因为要基于可读性的基础上进行精简,过于精简不易于维护也容易造成命名冲突。
  2.选择合适的数据类型进行存储。
  3.定时清理(删除)无效的缓存数据,或者设置自动过期时间。
  4.配置 Redis 可用的最大空间大小,进行资源的合理分配。

系列
  《Redis 小白指南(一)- 简介、安装、GUI 和 C# 驱动介绍》
  《Redis 小白指南(二)- 聊聊五大类型:字符串、散列、列表、集合和有序集合》
  《Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间》
  《Redis 小白指南(四)- 数据的持久化保存》
  【博主】反骨仔
  【原文】http://www.cnblogs.com/liqingwen/p/6920680.html
  【GitHub】https://github.com/liqingwen2015/Wen.Helpers/blob/master/Wen.Helpers.Common/Redis/RedisHelper.cs
  【参考】《Redis 入门指南》

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426175-1-1.html 上篇帖子: redis 模糊查找keys 下篇帖子: redis:php-redis中有序集合 zset的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表