Redis基本概念
最基本
Redis(Remote Dictionary Server远程数据服务),内存高速缓存数据库。
- 有客户端和服务端,一般说的是服务端
- 基于内存
- 非关系型数据库
- 支持主从同步
- 持久化
- 高并发读写
- 单进程单线程模型
应用场景
- 数据缓存,当访问数据库接口比较慢时,将数据通过Redis进行缓存,这样下次获取数据就不需要再次进行SQL操作,而是直接从缓存中读取。(高频读,低频写)
- 队列:push和pop
- 数据存储:依赖硬盘的持久化机制
Redis数据类型
对key的操作
|
|
数据类型
String
可以存储任何数据,包括存储字符串、整数或者浮点数,jpg图片(二进制)或者序列化的对象(都称为元素)
List
列表,可用于队列,先进先出,有push和pop操作
Set
无顺序集合,集合中的元素没有顺序,并且是唯一的,可取并集、交集、差集
Sort Set (ZSet)
score-value的有序集合,其中score为浮点,value为元素,可以调整元素的顺序
Hash
有key-value的散列组,其中key是字符串,value是元素
Redis常见问题
1. 击穿
在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。
原因
- 第一次访问
- 恶意访问不存在的key
- Key过期
规避方案
- 服务器启动时, 提前写入
- 规范key的命名, 通过中间件拦截
- 对某些高频访问的Key,设置合理的TTL或永不过期
2. 雪崩
Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。
规避方案
- 使用Redis集群
- 限流