Redis总结(4)--redis高级特性

Redis高级特性

  • 发布与订阅
  • redis事务
    • redis的ACID
    • 事务概述
    • 事务命令
    • Watch执行
    • Redis弱事务性
  • redis慢查询日志
    • 慢查询设置
    • 慢查询定位和处理
  • redis监视器
    • 实时监视器
    • Redis监控平台

发布与订阅

redis提供了发布订阅功能,可以用于消息的传输
redis的发布订阅功能机制包括3个部分,publisher,subscriber和channel
Redis总结(4)--redis高级特性_第1张图片
常用命令:
subscribe ch1 ch2
publish channel message
unsubscribe ch1
psubscribe 模式匹配 +模式
punsubscribe

使用场景:
redis哨兵模式中,哨兵通过发布订阅的方式与redis主服务器和redis从服务器进行通信
redission是一个分布式框架锁,在redisson分布式锁释放的时候,是使用发布与订阅的方式通知的

redis事务

redis的ACID

  1. Atomicity(原子性):构成事务的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行
    Redis一个队列中的命令执行或者不执行
  2. Consistency(一致性):数据库在事务执行前后状态都必须是稳定或者是一致的。redis集群不能保证时时一致性,只能是最终一致性
  3. Isolation(隔离性): 事物之间不会互相影响,redis命令是顺序执行的,在一个事务中,有可能被执行其他客户端的命令
  4. Durability(持久性): 事务执行后必须写入磁盘,redis持久化,但不保证数据完整性

事务概述

  1. redis的事务是通过multi、exec\discard和watch四个命令来实现的
  2. redis的单个命令都是原子性的,所以这里需要确保事务性的对象是命令集合
  3. redis将命令集合序列化并确保处于同一事务的命令集合连续且不被打断执行
  4. redis不支持回滚操作

事务命令

  1. multi:用于标记事务块的开始,redis会将后续的命令逐个放入队列
  2. exec:执行命令队列
  3. watch:监视key
  4. unwatch:清楚监视key
    如果某条命令在入队过程中发生错误,redisClient将flags设置为REDIS_DIRTY_EXEC,EXEC命令将会失效

Watch执行

redisDb 有一个watched_keys字典,key是某个被监视的数据key,值是一个链表,记录了所有监视这个数据的客户端
监控机制触发:当修改数据后,监视这个数据的客户端的flags置为REDIS_DIRTY_FLAG
事务执行:RedisClient向服务器端发送exec命令,服务器判断RedisClient的flags,如果是REDIS_DIRTY_FLAG,则exec命令返回nil
Redis总结(4)--redis高级特性_第2张图片

Redis弱事务性

redis语法错误会导致整个事物的命令在队列里面都清除
redis运行错误只会清空当前命令,之前执行正确的不会回滚

redis慢查询日志

慢查询设置

在redis.conf种可以配置和慢查询日志相关的选项

slowlog-log-slower-than 10000 #执行时间超过多少微秒的会被记录 0 全记录,<0 不记录
slowlog-max-len 128 存储慢查询日志条数

查看日志

slowlog get

慢查询定位和处理

  1. 尽量使用短的key,对于value也可以精简,能用int就用int
  2. 避免使用keys *,hgetall等全量
  3. 减少大key的存取,打散为小key 100k以上
  4. 将rdb模式改为aof,fork子进程数据量过大导致redis性能大幅下降,或者关闭持久化(适用于数据量小、有固定数据源)
  5. 想要一次添加多条数据的时候可以用管道
  6. 尽可能使用哈希存储
  7. 尽量限制redis使用内存大小,这样可以避免redis使用swap分区或者出现OOM错误

redis监视器

redis客户端 通过执行MONITOR命令可以将自己变成一个监视器,实时接受并打印出服务器当前处理的命令请求的相关信息。
此时,当其他客户向服务端发送一条命令请求时,服务器除了会处理这条命令请求之外,还会将这条命令请求的信息发送给所有监视器
Redis总结(4)--redis高级特性_第3张图片
redis1客户端
Redis总结(4)--redis高级特性_第4张图片
redis2客户端
Redis总结(4)--redis高级特性_第5张图片

实时监视器

redisServer维护一个monitors的链表,每次收到MONITOR命令之后,将客户追加到链表尾部

Redis监控平台

grafana、prometheus以及redis_exporter
grafana:一个开箱即用的可视化工具,具有功能齐全的度量仪表盘和图形编辑器,有灵活丰富的图形优化选项,可以混合多种风格,支持多个数据源特点
Prometheus:是一个开源的服务监控系统,通过HTTP协议从远程的机器手机数据并存储在本地的时序数据库上
redis_exporter为Prometheus提供了redis指标的导出,配合Prometheus以及grafana进行可视化以及监控
Redis总结(4)--redis高级特性_第6张图片

你可能感兴趣的:(redis,redis,redis事务,redis高级特性)