Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
三、事务处理
Redis的事务处理比较简单。只能保证client发起的事务中的命令可以连续的执行,而且不会插入其他的client命令,当一个client在连接 中发出multi命令时,这个连接就进入一个事务的上下文,该连接后续的命令不会执行,而是存放到一个队列中,当执行exec命令时,redis会顺序的 执行队列中的所有命令。如果其中执行出现错去,执行正确的不会回滚,次不同于关系型数据库的事务。
回滚后age的值已经改变。
取消一个事务用discard,取消事务队列,数据全部回滚。
Redis乐观锁:使用watch监视指定的key,当exec时如果监视的key从调用watch后发生过变化,这整个事务会失败。可调用watch多
次监视多个key。watch和事务对整个连接有效,如果断开了连接监视和事务都会清除(exec,discard,unwatch也不例外)。
四、持久化机制
Redis是一个支持持久化的内存数据库,Redis需要经常将内存中的数据同步到磁盘来保证持久化。
Redis支持两种持久化方式:
1、snapshotting(快照),将数据存放到文件里,默认方式。
是将内存中的数据已快照的方式写入到二进制文件中,默认文件dump.rdb,可以通过配置设置自动做快照持久化的方式。可配置Redis在n秒内如果超过m
个key被修改就自动保存快照。
save 900 1 #900秒内如果超过1个key被修改,者发起快照保存
save 300 10 #300秒内如果超过10个key被修改,这快照保存
save 60 10000 #60秒内如果超过10000个数据被修改,发起快照保存
2、 Append-only file(缩写为aof),将读写操作存放到文件中。
由于快照方式在一定间隔时间做一次,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于使用aof时,redis会将每一个收到的写命令都通过write函数住家到文件中当redis启东市会通过重新执行文件中保存
的写命令来在内存中重新建立整个数据库的内容。
由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上,这样aof方式的持久化也还是有可能会丢失一部分数据。
可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。
appendonly yes #启用aof持久化方式
#appendfsync always //收到写命令就立即写入磁盘,最慢,但是保证了数据的完整持久化
appendfsync everysec //每秒中写入磁盘一次,在性能和持久化方面做了很好的折中
#appendfsync no //完全依赖os,性能最好,持久化没有保证
开启以后,在bin文件夹中会多两个存储文件,如下:
五、发布与订阅信息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解除消息发布者和订阅者之间的耦合,Redis作为一个pub/sub的server,在订
阅者和发布者之间起到消息路由的功能。订阅者通过subscribe和psubscribe命令向redis订阅自己感兴趣的消息类型,redis将信息
类型成为通道(channel)。当发布者通过关publish命令向redis
server发送特定类型的信息时,订阅该消息类型的全部client都会接收到此消息。
例如开启三个客户端,一个发布消息,另外两个订阅消息,如下
六、虚拟内存的使用
Redis的虚拟内存是暂时吧不经常访问的数据从内存交换到磁盘中,从而腾出内存空间用于其他的访问数据,尤其对于redis这样的内存数据库,内存总是
不够用的。除了分隔到多个redis server外,提高数据库的容量的方法就是使用虚拟内存,把那些不常访问的数据交换到磁盘上。
通过配置vm相关的redis.config配置:
vm-enable yes #开启vm功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 10000000 #redis使用的最大内存上线
vm-page-size 32 #每个页面的大小32字节
vm-pages 123217729 #最多使用多小个页面
vm-max-threads 4 #用于执行value对象换入的工作线程数量
虚拟内存管理在2.6及之上版本取消了
Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用的更多相关文章
- RBMQ发布和订阅消息
RBMQ发布和订阅消息 exchange 参考翻译自: RabbitMQ官网 生产者并非将消息直接发送到queue,而是发送到exchange中,具体将消息发送到特定的队列还是多个队列,或者是丢弃,取 ...
- Redis源码解析:30发布和订阅
Redis的发布与订阅功能,由SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE,PUNSUBSCRIBE,以及PUBLISH等命令实现. 通过执行SUBSCRIBE命令,客户端可以订阅 ...
- 【笔记】《Redis设计与实现》chapter18 发布与订阅
chapter18 发布与订阅 客户端订阅频道. 客户端向频道发送消息, 消息被传递至各个订阅者. 匹配模式 客户端订阅模式. 客户端向频道发送消息, 消息被传递给正在订阅匹配模式的订阅者. 另一个模 ...
- EasyNetQ使用(六)【多态发布和订阅,消息版本控制】
你能够订阅一个接口,然后发布基于这个接口的实现. 让我们看下一个示例.我有一个接口IAnimal和两个实现Cat和Dog: public interface IAnimal { string Name ...
- Redis 发布与订阅 消息
基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务. ...
- 07_NoSQL数据库之Redis数据库:Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
事务处理 Redis对事务的支持目前还比较简单.Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令.当一个client在一个连接中发出mul ...
- Redis 学习之持久化机制、发布订阅、虚拟内存
一.持久化机制 Redis是一个支持持久化的内存数据库,redis会经常将内存中的数据同步到硬盘上来保证数据持久化,从而避免服务器宕机数据丢失问题,或者减少服务器内存消耗提高性能. 持久化方式: 1. ...
- Redis的高级应用-安全性和主从复制
Redis的服务器命令和键值命令(String,Hash,List,Set,Zset)相对简单,只需查看文档即可. 文档地址: http://www.runoob.com/redis/redis-tu ...
- 【redis】06Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
上节课详细讲解了redis数据库的常用命令,以及redis数据库高级应用当中的, 安全性,跟咱们的主从复制, 这节课呢,咱们继续来讲咱们的高级应用, 首先来看一下咱们的事务处理, 事务处理 我前面说过 ...
随机推荐
- Javascript 模块化理解
原始时代: script标签引入javascript文件 -------- html ------- <div id="result"></div> < ...
- react入门安装
react的入门安装 1.react的适用方法有两种,其一是依赖在线的cdn地址: https://reactjs.org/docs/cdn-links.html 官方给的cdn地址如下 <sc ...
- python程序转exe程序之一——cx_Freeze
原始网页 : http://keliang.blog.51cto.com/3359430/661884 本人用的64位系统,一开始装了32位的cx_freeze,结果貌似无法自动找到本地的python ...
- Android 採用HTML设计界面
由于Android软件开发分工眼下还没有细化,程序猿往往须要负责软件界面的开发,尽管软件的界面图片已经由美工设计好了.可是假设使用layout技术把软件做成美丽的界面确实非常困难,而是也比較耗时.An ...
- vue UI 框架
(1)Element 饿了么 vue 2.0后台UI框架 (Star:18382) https://github.com/ElemeFE/element (1-1)Vuetify 最新的ui 框架 ...
- POJ 1991 DP
题意: 思路: 考虑DP 先把事件按照地点顺序排个序 f[i][j][0]表示从i到j还没有去过 现在在i f[i][j][1]表示从i到j还没有去过 现在在j 那么方程就呼之欲出了 f[i][j][ ...
- 给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片
[问题] 关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件 过程中,问题转换为,需要给当前iOS项目中,添加一个图片. 类似于Windows开发中的资源文件,其中图片文件属于资源的 ...
- vue中computed与watch的异同
一.computed 和 watch 都可以观察页面的数据变化.当处理页面的数据变化时,我们有时候很容易滥用watch. 而通常更好的办法是使用computed属性,而不是命令是的watch回调. ...
- shell项目-告警系统
告警系统 1. 告警系统需求分析 需求:使用shell定制各种个性化告警工具,但需要统一化管理.规范化管理. 思路:指定一个脚本包,包含主程序.子程序.配置文件.邮件引擎.输出日志等. 主程序:作为整 ...
- 【习题 8-7 UVA - 11925】Generating Permutations
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让你把排列1..n变换成对应的输入序列. 每次可以交换前两个数字,或者把第一个数字放到末尾去. 可以逆向考虑. 即把无序的序列变换成 ...