这是我参与「第五届青训营」伴学笔记创作活动的第 12 天
Redis 介绍
数据库的演化
数据库从最开始的单机单表数据库,到现在的分库分表,再到集群,是互联网发展,数据量增大的结果。需要不断寻找更好的数据库方案来满足日益增长的数据量和吞吐量需求。
Redis 工作原理
数据有冷热之分,冷数据是不常访问的数据,可以存放到硬盘中,热数据是经常要访问的数据,存放到内存中可以降低访问延迟,增大读写的带宽。
Redis 实现了数据从内存读写,保存到硬盘防止重启后数据丢失,增量数据保存到AOF文件,全量数据保存到RDB文件,使用单线程处理所有操作命令。
Redis 应用
连续签到
使用expireAt,实现在一段时间后签到计数归零。
消息通知
用list作为消息队列,信息更新时,推送到ES,用户可以搜索到最新的信息
计数
通过hash结构存储用户的多项计数需求。
排行榜
结合dict,实现通过key操作跳表的功能。
限流
对Key调用incr,超过限制N则限制访问,实现了限制每秒请求数的限制。
分布式锁
使用redis的setnx,利用redis单线程执行命令的特性,和setnx只有未设置过才能执行成功。
Redis 注意事项
大key和热key
value超过10KB叫大key,大key的读取成本高,查询慢,业务侧请求redis超时报错。可以将大key拆分为小key,或者先压缩再写入缓存。
用户访问一个key的QPS很高时叫热key。可以在服务侧设置本地缓存,降低访问redis的QPS,或者将value进行拆分。
慢查询
批量操作过多key/value,操作单个value过大,对大key的查询等。
缓存穿透和雪崩
热点绕过缓存直接访问数据库叫缓存穿透,大量缓存同时过期叫缓存雪崩。
使用缓存空值和布隆过滤器减少缓存穿透,使用缓存空值和缓存集群避免缓存雪崩。