目录
redis了解
使用原因
应用场景
数据类型
redis事务
数据持久化
RDB(快照):
AOF(即时更新):
选择方式:
redis快速的原因
redis单线程
单机瓶颈
经典3问
参考博客
redis了解
缓存中间件
使用原因
缓解高并发、提升高可用。因为redis是基于内存的,读写操作要比MySQL的IO操作快得多的多。
应用场景
- 不变的用户信息:请求从缓存拿,再从数据库
- 计数器:redis的incr命令实现原子性的递增,例如限制一个接口的请求频率等
- 热点词,验证码等业务
数据类型
基于键值的方式
String,Hash,List,Set,SortSet
SortSet可以实现排行榜
redis事务
一组命令的集合,相当于一个队列。
所有命令都会被序列化,顺序执行,不会被中断(一致性,排他性,顺序性)。
不存原子性:而Mysql的事务有原子性(全成功或者全失败)。
不存隔离性:不存在脏读,幻读不可重读的现象
数据持久化
RDB(快照):
周期性备份,数据快照形式,fork,cow。fork即创建子进程做数据同步,cow即copy on write ,父子进程数据共享数据段,父进程依旧提供读写服务。
优点: 快照恢复比AOF要快。
缺点:备份大的项目可能停顿1s,对秒杀业务不友好。丢失一个周期时间的数据。
AOF(即时更新):
即时性备份:对每条数据的操作指令作为日志,然后追加到日志文件中,因为是追加的方式,所以不需要去寻址,比较快速。
优点:数据比较完整,写入迅速,可读性强。
缺点:恢复缓慢,每次写入redis的qps都备份较缓慢。
选择方式:
二者兼用。先用RDB快速恢复数据,再使用AOF补全。
redis快速的原因
基于内存:KV数据库,读取O(1)
单线程的:无需关注线程上下文与竞争条件,没有线程切换而产生的cpu消耗
数据结构简单:各自分段间没有关联
多路复用I/O模型,非阻塞IO,多路复用指的是多个请求复用一个线程,当多个连接都有请求时,复用器会轮询所有请求,挨个处理。
qps:每秒查询次数
redis单线程
够快了
单机瓶颈
采用redis-cluster集群来横向拓展,主从同步,读写分离,且可以有多个主节点,每个主节点又可以挂多个从节点。
经典3问
缓存穿透、缓存击穿与雪崩
参考博客
面试干货7——刁钻面试官:关于redis,你都了解什么?_群里有人试过redis吗-CSDN博客