1 为什么使用Redis?
高并发:直接操作缓存能够承受的请求远大于直接操作数据库
高性能:访问数据库是从硬盘上读取,利用Redis缓存,使得访问数据时在内存上读取
2 Redis为什么块?
完全基于内存,非常快速
数据结构简单,对数据的操作简单
采用单线程,避免上下文切换和竞争条件
使用I/O多路复用模型,非阻塞式I/O
底层模型不同,客户端通信协议为Redis自己构建的机制,减少了调用系统函数的时间
3 Redis数据模型
String
List
Set
Zset
Hash
4 Redis应用场景
计数器:基于String incrby
缓存
会话缓存
全页缓存FPC
查找表
消息队列:List lpush rpop
分布式锁:setnx、RedLock
5 Redis持久化
RDB:dump.rdb;配置策略,根据策略进行持久化;数据进行二进制压缩;单线程save、多线程bgsave
优点:数据恢复快(二进制压缩文件)
缺点:安全性不高,Redis宕机后丢失数据多
AOF:.aof;配置策略,支持一秒钟持久化,且能追加到之前文件中
优点:安全性高,Redis宕机后丢失数据少
缺点:文件大,恢复速度慢
混合持久化:结合RDB恢复速度快 + AOF安全(基于AOF);AOF进行持久化后,会对文件进行压缩
6 Redis过期删除策略
定时过期:针对设置过期时间的key,Redis会创建定时器并追踪
惰性过期:当访问Key时,才判断是否过期,过期则清除;可以节省CPU资源但对内存不友好(大量过期Key但没有被访问时)
定期过期:每隔一段时间扫描key,判断key是否过期,过期则删除
Redis使用惰性过期和定期过期两种策略
7 Redis内存淘汰策略(内存不足以容纳新数据时)
全局key空间选择性移除:
noeviction:新写入操作会报错
allkeys-lru:删除最少使用的key
allkeys-random:随机移除key
设置过期时间的键空间选择性移除:
volatile-lru:设置了过期时间的key中,移除最近最少使用的key
volatile-random:设置了过期时间的key中,随即移除key
volatile-ttl:设置了过期时间的key中,更早过期时间的key先移除