Redis复习篇(二)

喜夏-厌秋 提交于 2020-03-17 03:41:14

1. Redis 发布订阅

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

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
在这里插入图片描述

当有消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅他的三个客户端

1.2 发布订阅常用命令

  • 1 PSUBSCRIBE pattern [pattern …]
    订阅一个或多个符合给定模式的频道。
  • 2 PUBSUB subcommand [argument [argument …]]
    查看订阅与发布系统状态。
  • 3 PUBLISH channel message
    将信息发送到指定的频道。
  • 4 PUNSUBSCRIBE [pattern [pattern …]]
    退订所有给定模式的频道。
  • 5 SUBSCRIBE channel [channel …]
    订阅给定的一个或多个频道的信息。
  • 6 UNSUBSCRIBE [channel [channel …]]
    指退订给定的频道。

1.3 常用场景

  • 基于Redis轻量级的缓存数据库特性,结合其发布订阅的功能,我们可以实现一个简单的实时聊天系统。
  • 分布式架构中常常会遇到读写分离的场景,在写入的过程中,我们可以依靠Redis的发布订阅功能使得写入的值及时发布到各个读得程序中,保证了数据的一致性。

2. Redis的事务

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

批量操作在发送 EXEC 命令前被放入队列缓存。
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:

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

2.1 实例

以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

  • 单个Redis的执行是原子性的,但是Redis没有在事务上增加任何维护原子性的机制,所以Redis的事务执行不是原子性的。其事务可以理解为一组打包的批量执行脚本,但是批量指令并非原子性的操作,中间的某个指令失败不会影响下一个指令的执行,也不会回滚以前的指令执行。
    比如:
redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。

2.2 Redis事务的命令

  • 1 DISCARD
    取消事务,放弃执行事务块内的所有命令。
  • 2 EXEC
    执行所有事务块内的命令。
  • 3 MULTI
    标记一个事务块的开始。
  • 4 UNWATCH
    取消 WATCH 命令对所有 key 的监视。
  • 5 WATCH key [key …]
    监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

3. Redis 数据备份与恢复

  • 语法: 该命令将在 redis 安装目录中创建dump.rdb文件。
redis 127.0.0.1:6379> SAVE 
OK
  • 恢复数据
    如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:
redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"

以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。

  • Bgsave
    创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。
    实例:
127.0.0.1:6379> BGSAVE

Background saving started
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!