这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天,本文主要以概括总结,全局记录为主,而不是作为细致的知识点讲解,细节之处多有疏忽还望多多包容。
一、本堂课重点内容:
- Redis 应用案例
- Redis 使用注意事项
二、详细知识点介绍:
为了提高访问速度,数据存在在内存里面,如果开关机,为何 Redis 数据不会丢失?
因为 Redis 在一定程度上做了持久化
首先客户端通过 RESP 协议 来访问 Redis-Server 服务,将数据写入 Redis,但 写之前会产生一条日志,这个日志会写入磁盘文件上面,叫做append only 或者叫 AOF 文件(Append Of the File,将最新的东西追加到文件末尾),但这是不完全的(一条条新日志,量级太少,并且数据只是新存的),所以存入 AOF 文件的数据叫做增量文件,而与之对应的是 全量数据 RDB 文件(保存了“ 所有” Redis 的批信息)。
先访问 RDB 文件,然后再看后面还没有 AOF ,如果有,把 AOF 新数据加载进去,从而保证 Redis 在启动以后与上次状态是一致的
应用案例
1. 连续签到
业务逻辑:利用 Redis 的过期策略。
使用数据结构:sds String
- 可以存储字符串、数字、二进制数据、
- 通常和 expire 配合使用
- 场景:存储计数、Session
2. 消息通知
业务逻辑:利用 List 消息队列来进行先进先出,存入 ES 搜索
使用数据结构: list,讲解了 Quicklist(双向链表 + listpack)、Listpack
3. 计数
业务逻辑:一个用户可以有多项计数需求,可通过 hash 结构存储
使用数据结构:rehash,渐进式 rehash
4. 排行榜
业务逻辑:积分变化时,排名要事实变更,可通过结合 dict 后,利用 key操作 的调表功能
使用数据结构:zset
5. 限流
业务逻辑:要求 1 秒内放行的请求为 N,超过 N 则禁止访问
使用数据结构:对 key 调用 incr
6. 分布式锁
业务逻辑:并发场景,要求一次只能有一个协程执行。
使用数据结构: Redis 的 setnx
- 因为 Redis 是单线程执行命令的
- setnx 只有未设置过才能执行成功
三、课后个人总结:
- 不光是 Redis 的特性,还是 数据结构的使用,都是需要深刻理解才能熟练运用