(1)Redis支持的数据类型
- 字符串(string)
- 列表(list)
- 哈希(hash)
- 集合(Set)
- 有序集合(ZSet)
(2)什么是持久化?Redis支持哪几种持久化?
- 持久化就是把内存的数据写到内存当中,防止服务宕机,数据内存丢失。
- Redis支持RDB和AOF两种持久化功能
- RDB:RDB 是把内存中的数据集以快照形式写入磁盘,实际操作是通过 fork 子进程执行,采用二进制压缩存储;
- AOF:AOF 是以文本日志的形式记录 Redis 处理的每一个写入或删除操作。
- 内容是redis通讯协议(RESP)格式的命令文本存储
(3)AOF和RDB的区别
- AOF文件比RDB更新频率高,优先使用aof还原数据
- aof比rdb更安全也更大
- rdb性能比aof好
- 如果两个都配置了,优先加载aof
(4)什么是RESP?有什么特点?
- RESP是redis客户端和服务端之间使用的一种通讯协议
- RESP的特点是:实现简单、快速解析、可读性好。
(5)Redis缓存雪崩、缓存穿透、缓存击穿
- 缓存雪崩
- 产生原因:缓存挂掉,这时所有请求都会穿透到数据库
- 解决方案:①使用快速失败的熔断策略,较少DB瞬间压力; ②使用主从模式和集群模式来尽量保证缓存服务的高可用
- 缓存击穿:
- 产生原因:就是某个热点数据失效时,大量针对这个数据的请求会穿透到数据源
- 解决方案:
- 可以使用互斥锁更新,保证同一个进程中针对同一数据不会并发请求到DB,较少DB压力
- 使用随机退避的方式,失效时随机sleep一个很短时间,在此查询,如果失败再执行更新
- 针对多个热点key同时失效的问题,可以再缓存时使用固定时间加上一个小的随机数,避免大量热点key同一时刻失效
- 缓存穿透:
- 产生原因:产生这个问题的原因可能是外部的恶意攻击,如攻击者使用不存在的用户id频繁请求接口,导致缓存不命中,然后穿透DB查询依然不命中,这时会有大量请求穿透缓存访问DB
- 解决方案:
- 对不存在的用户,在缓存中保存一个空对象进行标记,防止相同ID再次访问DB,
- 使用BloomFilter过滤器,其特点是存在性检测,如果BloomFilter中不存在,那么数据一定不存在。