Redis高级应用(四)

1.1 生产消费模型

图片[1]|Redis高级应用(四)|leon的博客

1.1.1 消息模式

  • 发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(pulish-subscribe);队列模式中consumers可以同时从服务端读取消息,每个消息只被期中一个consumer读到。
  • 发布-订阅模式中消息被广播到所有的consumer中,topic中的消息将被分发到组中的一个成员中,同一组中的consumer可以在不同的程序中,也可以再不同的机器中。

1.1.2 Redis发布订阅

  • Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
  • Redis客户端可以订阅任意数量的频道。

图片[2]|Redis高级应用(四)|leon的博客

1.1.3 订阅发布实例

1.1.3.1 订阅频道

  • 在2个客户端终端订阅频道后会一直监视该频道:
10.0.0.103:6379> subscribe rss1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "rss1"
3) (integer) 1

1.1.3.2 发布消息

  • 在频道端发布消息:
10.0.0.103:6379> publish rss1 "Redis is a great caching technique"
(integer) 2         # 返回值代表订阅该频道的数量

1.1.3.3 查看客户端消息

10.0.0.103:6379> subscribe rss1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "rss1"
3) (integer) 1
1) "message"
2) "rss1"
3) "Redis is a great caching technique"

1.1.3.4 退订频道

10.0.0.103:6379> unsubscribe rss1
1) "unsubscribe"
2) "rss1"
3) (integer) 0

1.1.3.5 显示订阅的频道和订阅频道者的数量

10.0.0.103:6379> pubsub channels
1) "rss1"
10.0.0.103:6379> pubsub numsub rss1
1) "rss1"
2) (integer) 1

1.2 Redis事务

1.2.1 Redis事务说明

  • Redis事务可以一次执行多个命令:
  1. 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。
  2. 事务在执行的过程中不会被其他客户端发送来的命令请求所打断。
  3. 原子性:事务中的命令要么全部被执行,要么全部都不执行
  • 执行过程:
  1. 开始事务
  2. 命令入队
  3. 执行事务

1.2.2 事务相关命令

discard:取消事务,放弃执行事务块内的所有命令

exec:执行所有事务块内的命令

multi:标记一个事务块的开始

unwatch:取消watch命令对所有key的监视

watch key [key...]:监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。

1.2.3 模拟银行转账操作

A账户3000元,B账户5000元,从B账户转1000元给A账户,因为减钱和增钱是同时发生的,所以放入事务中进行:

10.0.0.103:6379> zadd salary 3000 a 5000 b
(integer) 2
10.0.0.103:6379> zrange salary 0 -1 WITHSCORES
1) "a"
2) "3000"
3) "b"
4) "5000"
10.0.0.103:6379> multi
OK
10.0.0.103:6379> zincrby salary 1000 a
QUEUED
10.0.0.103:6379> zincrby salary -1000 b
QUEUED
10.0.0.103:6379> exec
1) "4000"
2) "4000"
10.0.0.103:6379> zrange salary 0 -1 WITHSCORES
1) "a"
2) "4000"
3) "b"
4) "4000"

1.3 服务器命令

1.3.1 查看服务器信息

10.0.0.103:6379> info
# Server
redis_version:4.0.2
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:6d80e3ae847c28b1
...省略部分输出内容...

1.3.2 查看客户端列表

10.0.0.103:6379> client list
id=3 addr=10.0.0.103:50275 fd=9 name= age=1445 idle=803 flags=N db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=4 addr=10.0.0.103:50276 fd=10 name= age=1425 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
id=5 addr=10.0.0.103:50277 fd=8 name= age=949 idle=861 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=pubsub

1.3.3 删除客户端

10.0.0.103:6379> client kill 10.0.0.103:50277
OK

1.3.4 其他命令

dbsize      # 查看数据库内数据条数
flushall    # 清空所有数据
flushdb     # 清空当前库
monitor     # 监控实时指令
shutdown    # 关闭服务器
save        # 将当前数据保存

1.4 慢日志查询

slow log是redis用来记录查询执行事件的日志系统,slow log 保存在内存里面,读写速度非常快。可以通过改写redis.conf文件或者用config get和config set 命令对它们动态地进行修改。

1.4.1 查看当前慢日志配置

10.0.0.103:6379> config get slow*
1) "slowlog-log-slower-than"
2) "10000"
3) "slowlog-max-len"
4) "128"

1.4.2 查看慢日志

10.0.0.103:6379> slowlog get
(empty list or set)

1.4.3 重置慢日志

10.0.0.103:6379> slowlog reset
OK

1.5 数据备份

1.5.1 获取当前目录

10.0.0.103:6379> config get dir
1) "dir"
2) "/root"

1.5.2 备份文件

10.0.0.103:6379> save
OK          # 生成时在redis当前目录中
[root@centos7 ~]# ll -h dump.rdb
-rw-r--r-- 1 root root 436 Dec  6 14:16 dump.rdb

1.5.3 保存备份

只要保存dump.rdb文件即可。

1.5.4 恢复备份

只需将dump.rdb放入redis当前目录即可。

温馨提示:本文最后更新于2022-12-20 20:57:49,已超过523天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/888.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享