一、Redis 是什么
Redis:一种基于内存的数据库系统
特点:
- 内存存储
- 数据结构
- 持久化
- 分布式
- 开源
为什么需要Redis
数据分冷热
热数据:经常被访问到的数据
将热数据存储到内存中
Redis 基本工作原理
数据保存在硬盘上防止重启数据消失
数据从内存中读写
增量数据保存到AOF文件
全量数据RDB文件
单线程处理所有操作命令
二、Redis 实际应用
- 连续签到
用到Redis的过期
- Key:掘金的uid
- value:252
- expirAt:后天的0点
在原本基础上+1天 没有签到过期
String数据结构
数据结构 - sds
2.消息通知
用list作为消息队列
- 使用场景:消息通知 当文章更新时,将更新后的文章进行推送到ES
List数据结构Quicklist
3.计数
Hash 数据结构dict
- rehash:将原来ht[0]中的数据全部迁移到ht[1]
- 渐进式rehash:平摊所有的访问用不请求过程中
4.排行榜
积分变化时,排名要实时更新
- 结合dict后,可实现通过key操作跳表的功能
zset 数据结构zskiplist
查找数字7的路径
结合dict后可实现通过key操作跳表的功能
5.限流
- 要求1秒内放行的请求为N,操作N则禁止访问
server网址
6.分布式锁
开发场景:要求一次只能有一个协程执行
执行完成后,其它等待中的协程才能执行
可以使用redis的setnx实现,利用了两个特性
- redis是单线程执行命令
- setnx只有未设置过才能执行成功
大Key、热Key
大Key的危害
- 读取成本高
- 容易导致慢查询
- 主从复制异常,服务器阻塞
业务侧使用大Key的表现
- 请求Redis超时报错
消除大Key办法:
-
拆分
-
压缩
-
集合类结构hash,list,set,set
(1) 拆分
(2)冷热区分
3.缓存穿透、缓存雪崩
热点数据查询绕过缓存,直接查询数据库
大量缓存同时过期