redis - 事物/乐观锁/发布订阅/持久化

事物/乐观锁

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

127.0.0.1:6379> multi   #开启事物
OK
127.0.0.1:6379> set age 18  #命令入队
QUEUED
127.0.0.1:6379> set name jack
QUEUED
127.0.0.1:6379> exec  #执行事务
1) OK
2) OK
127.0.0.1:6379>

一:事物
MULTI
标记一个事务块的开始。
EXEC
执行所有事务块内的命令。
DISCARD
取消事务,放弃执行事务块内的所有命令。

127.0.0.1:6379> watch name #对name开启监听
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name ztind
QUEUED
127.0.0.1:6379> exec
(nil)    ---->事物执行前有对name继续重新设值,本事物将被打断 故结果为nil
127.0.0.1:6379>

二:乐观锁
WATCH key [key ...]
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
UNWATCH
取消 WATCH 命令对所有 key 的监视。
发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

#订阅消息
SUBSCRIBE channel [channel ...]
订阅给定的一个或多个频道的信息。
UNSUBSCRIBE [channel [channel ...]]
指退订给定的频道。

#订阅匹配类的消息
PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道。
PUNSUBSCRIBE [pattern [pattern ...]]
退订所有给定模式的频道。

#为上述两类学习发送消息
PUBLISH channel message   
将信息发送到指定的频道。

#Pubsub 命令用于查看订阅与发布系统状态,它由数个不同格式的子命令组成。
PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态。
eg:pubsub channels
持久化
rdb (redis database)

redis在指定的时间间隔内将内存中的数据快照写入磁盘,保存为dump.rdb文件.

redis为内存储存,断电即失,为了保存数据redis使用dump.rdb来实现数据保存,下次启动redis服务器自动读取。

save策略:

  • save 900 1 表示在900s内至少有1个key修改即保持
  • save 300 10 表示在300s内至少有10个key修改即保持
  • save 60 10000 表示在60s内至少有10000个key修改即保持

dump.rdb文件的生成情况如下:

  • save ,主动执行save命令时生成
  • flushall , 清空所以数据库数据时生成
  • shutdown,关闭redis服务器时生成
aof (append only file)

以日志的方式来记录每个写操作命令,将redis执行过程中的所有写命令记录下来(读操作不记录)保存到appendonly.aof文件中。只追加文件不改写文件。redis服务重启后读取本文件并执行里面的命令来实现数据恢复功能。
默认不开启,可到配置文件redis.conf修改开启 appendonly yes

保存策略:

  • appendfsync always #总是同步修改追加保存
  • appendfsync everysec #每秒修改追加保存(默认)
  • appendfsync no #不同步,交由系统来保存,最快
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章