Redis为什么那么快
- Redis 是一个基于内存的数据存储,内存访问至少比随机磁盘访问快 100 倍。
- Redis 使用 IO 多路复用和单线程执行循环来提高执行效率。
- Redis 利用多种高效的数据结构。
如何使用Redis
- 在不同服务中使用Redis来共享用户会话数据
- 使用 Redis 缓存对象或页面,尤其是热点数据
- 分布式锁
- 统计文章的点赞数或阅读量
- 对某些用户进行限流
- 全局 ID 生成
- 使用 Redis Hash 来实现购物车
- 计算用户保留率,使用 Bitmap 数据结构来表示每天的用户登录情况并计算用户留存情况
- 队列消息,使用 List 结构
- 排行榜,使用 Zset 来进行排序
Redis的缓存策略
1. 旁路缓存
读策略步骤:
- 如果读取的数据命中了缓存,则直接返回数据;
- 如果读取的数据没有命中缓存,则从数据库读取数据,然后将数据写入到缓存,并且返回给用户。
写策略步骤:
实践场景:
旁路缓存多应用于读多写少的的场景,例如实时数据更新,登录状态和用户身份验证等等。
2. 读写穿透
读策略步骤:
- 先查询缓存中数据是否存在,如果存在则直接返回,如果不存在,则由缓存组件负责从数据库查询数据,并将结果写入到缓存组件,最后缓存组件将数据返回给应用。
写策略步骤:
当有数据更新的时候,先查询要写入的数据在缓存中是否已经存在:
- 如果缓存中数据已经存在,则更新缓存中的数据,并且由缓存组件同步更新到数据库中,然后缓存组件告知应用程序更新完成。
- 如果缓存中数据不存在,直接更新数据库,然后返回;
实践场景:
在日常开发中比较少见,因为该策略是直接将 Cache 视为一个服务节点,由 Cache 服务负责数据的读取和 db 写入,减轻应用程序的职责。
3. 写回策略
写回策略和读写穿透策略比较相似,但是不同于写回策略是异步将缓存的数据更新到数据库中,在实际场景中比较适用于 文章的阅读量,点赞量这类对数据安全度不高,但是需要读写效率比较高的场景。