pipeline
之前介绍过,Redis 客户端执行命令有四个过程:发送命令、命令排队、执行命令、返回结果。其中发送命令和返回结果被成为 Round Trip Time (RTT,往返时间)。
Pipeline 就是将一系列命令一次性发送到服务端,服务端处理之后一次性返回回来。
消息订阅
help
> help @pubsub
publish/subscribe
publish chan message
subscribe chan
事务
help
help @transactions
命令
- multi/exec:事务的代码块边界
- discard:取消
- watch:监听变量。在开启事务之前,要保证某一个值未变化,如果变化了,事务会执行失败。Watch 相当于一个乐观锁。
Redis 在事务中不支持回滚 参考。Redis 认为一些操作的失败不是 redis 自身执行失败,而是开发过程的失败。
扩展
Redis 可添加扩展模块,--loadmodule
布隆过滤器
布隆过滤器,一个将大量数据映射成 bitmap 进行查找有无的过滤装置。它可以解决 穿透。
如果没有它的话,频繁得查 MySQL 中没有的数据,不仅导致单次查询性能差,还会导致整体性能差。
详情请戳: 用Redis快速实现BloomFilter!
回收策略(内存溢出策略)
- noeviction:无操作,内存溢出了就写入失败(eviction,逐出、收回)
- xxx-lru:最少使用,又分为以下两种
- allkeys-lru:移除最少使用的 Key
- volatile-lru:移除有过期时间的 Key 中最近最少使用的。(volatile,挥发)不移除没设置过期时间的,这是一种当作持久化存储的用法
- volatile-random:在设置过期时间的 Key 中随机淘汰。
- volatile-ttl:在有过期时间的 Key 中按过期时间回收。
Redis 是如何淘汰过期的 Key 的
Redis 淘汰过期的 Key 有两种方式,一种是 被动方式,一种是 主动方式。参考
- 被动方式(惰性删除):当客户端访问它时,发现已经过期了,返回没找到并删除此 key
- 主动方式(定时任务删除):Redis 服务自己(默认)每 10s 运行一次,按比例计算进行删除。
- 随机检查 20 个 Key 删除已过期的。
- 如果第一步中有超过 25% 的 Key 过期,再执行一次,依次循环。
常见问题
击穿、雪崩、穿透、一致性(双写)
网友评论