这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
今天来研究一下Redis
Redis的出现
Redis的出现是为了解决在数据量暴增的情况下,Mysql已经进行了分库分表仍然不能够满足数据量和读写压力的问题。
数据的分类
数据可以分成两类:一类是热数据,一类是冷数据。基于“局部性原理”。
大量的访问和调用集中于几个部分。这些集中的部分就是热数据。能够有效提高这些数据的访问效率的话,就能够有效解决海量数据条件下Mysql已经进行分库分表和集群仍然不能满足数据量和读写压力的问题。
Redis基本工作原理
- 数据从内存中读写
- 数据保存在硬盘中防止热重启导致的数据丢失
- 增量数据:保存在AOF文件
- 全量数据:保存在RDB文件
- 单线程处理所有命令
Redis应用场景
- 连续签到事件
- 消息通知事件
- 计数事件
- 排行榜
- 限流环境
- 分布式锁
1. 连续签到事件设置
采用【key:记录唯一uid,value:记录连续签到次数,:expireAt:记录过期时间】 可采用数据结构:sds
- sds
- 可存储:字符串,数字,二进制数据
- 通常搭配expire
- 用于存储计数,session
- 能够保存元信息
2. 消息通知事件设置
可采用数据结构:list
- list
- 可作为消息队列使用
- 由一个双向链表+一个listpack实现
- listpack“紧凑列表”
3. 计数事件
可采用数据结构:hash
- hash
- hash有一个dict部分
- dict存在rehash的问题
- 直接rehash在数据量大的环境下会产生阻塞问题
- 采用渐进式rehash
4. 排行榜
可采用数据结构:zskiplist 可结合dict实现跳表
5. 限流环境
可采用匹配对应的key值,对key调用incr,超过限制则停止访问