Redis事务
- 事务
1.1 事务概念
|
事务:可以一次性执行多条命令。Redis事务非常简单。 特点: 1. 批量操作在发送exec命令前被放入队列缓存。 2. 收到exec命令后进入事务执行,事务中任意命令执行失败,其余命令依然被执行。(redis事务不保证ACID特性) 3. 事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 |
1.2 redis事务使用方法
|
1:使用multi命令开启事务。 2:在事务中,设置数据操作都会被放入到队列中保存。 3:使用exec 提交事务命令执行,把数据依次存储到redis中。 4:使用discard命令取消事务。 |
扩展命令: watch unwatch
1.3 案例操作
|
> multi 开启事务 > set p1 1 > set p2 2 > set p3 3 > exec 执行,提交 --------------------------- > multi 开启事务 > set p4 4 > set p5 5 > set p6 6 > discard 取消,回滚 ----------------------------- redis事务有问题,支持太简单,不保证事务ACID特性: > multi 开启事务 > set age 18 OK > set like chi,shui OK > incr like ERR 失败,但是并没有进行回滚 > incr age OK > exec |
- Redis 持久性机制
2.1 redis持久化机制是什么?
|
Redis是内存数据库。如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。 Redis 的持久化机制: 会经常将内存中的数据,同步到硬盘来保证持久化。
|
2.2 redis持久化机制分类 (分为两种)
|
1. snapshotting(快照):rdb方式,默认方式,每隔一段时间刷盘,全量备份。 2.append-only file :aof方式,类似于日志记录,连续的增量备份。 |
2.3 RDB 方式 (默认方式,默认开启)
将内存中的数据以快照的方式写入到二进制文件中,默认dump.rdb。
可以进行设置redis在多少秒内如果超过n个key发生修改,则进行自动做快照。
1. RDB方式配置,编辑redis.conf文件:vim redis.conf
|
dbfilename dump.rdb 默认存储rdb数据的文件名 (177行) dir ./ 默认文件存储的目录,默认redis/bin目录下 (187行) 可以修改放在/usr/local/redis/etc目录下 save 900 1 #900秒内如果超过一个key被修改,则发起快照保存 (142行) save 300 10 save 60 10000 |
2:RDB方式特点
|
每隔一段时间才刷盘,可能会数据丢失。 适用于对数据实时性要求不高,容忍数据丢失。 用于学习,测试,生产环境一般不用。 |
2.4 AOF 方式 (默认关闭,需要通过配置文件进行开启)
只要redis执行写操作,aof通过write函数写入追加到日志命令中。
当redis重启时,重新执行文件中保存的写命令来在内存中重建数据库的内容。
1. AOF方式配置,编辑redis.conf文件:vim redis.conf
|
appendfilename "appendonly.aof" //aof的文件名(508行) appendonly yes //启动aof持久化 (504行) aof持久化方式有三种修改方式,选择其中一种:(533行) appendfsync always :一旦修改立即写入到硬盘。保证完全持久化,效率慢 appendfsync everysec :每秒钟写入磁盘一次 appendfsync no :完全依赖操作系统 提示:实际开发中采用aof中的appendfsync always方式。 |
2. AOF方式特点
|
AOF日志会在持续运行中持续增大,由于Redis重启过程需要优先加载AOF日志进行指令重放以恢复数据,恢复时间会无比漫长。所以需要定期进行AOF重写,对AOF日志进行瘦身。目前AOF是Redis持久化的主流方式。 |
2.5 RDB和AOF方式的比较
|
|
注意:redis3.0以前rdb 和 aof 两种方式,只能用一种。
默认采用rdb,如果开启了aof,rdb默认关闭。
Redis4.0以后,rdb 和 aof 两种方式可以配合使用。
- Redis 消息发布和订阅
Redis发布订阅(pub/sub)是一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息。客户端可以订阅任意数量的频道。
3.1 语法
使用publish [频道] [发布消息] 进行发布消息
使用subscribe [频道] 订阅频道,可以接收监听频道发布消息
|
|
3.2 示例展示
|
打开多个终端,都进入到redis 终端1: 订阅频道 ,可以监听到频道发布的内容 subscribe cctv 终端2: 订阅频道 subscribe cctv 终端3: 发布消息 , 返回整数,代表多少终端监听 publish cctv 'hello world!' |

浙公网安备 33010602011771号