持久化方案
RDB(redis db)
默认开启
配置持久化:save 300 10 、dbfilename dump.rdb (打开 redis.conf 文件 找到 SNAPSHOTTING 对应内容save 300 10 2 指定本地数据库文件名,一般采用默认的 dump.rdb
fork子进程
问题: Copy On Write 子进程就会占有和主进程一样的内存资源,比如说主进程8G内存,那么在备份的时候必须保证有16G的内存
手动 持久化
save(当前进程)
bgsave(fork)
AOF(append only file)
在使用aof和rdb方式时,如果redis重启,则数据从aof文件加载
开启aof方式:appendonly yes;appendfilename appendonly.aof;appendfsync everysec
AOF开启的话,重启redis服务器从aof中恢复
缓存问题
缓存穿透
查询数据库一定没有的数据,redis肯定没有,每一次请求都会发到数据库
将null缓存、布隆过滤器
缓存雪崩
缓存在同一时间大面积失效,叫做缓存雪崩
缓存时间相同的,失效的时间也是相同的-->缓存多个key的时候,把时间错开
缓存预热
redis启动的时候预先缓存一部分数据(预期到很快会访问)
过期策略与内存淘汰机制
过期策略
惰性删除 get的时候,发现已经过期了,删除
定时删除(每一个key都加一个定时器)
定期删除(总共就有一个定时器)
内存淘汰机制
no-enviction(驱逐):禁止驱逐数据,新写入操作会报错
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意选择数据淘汰
volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰