redis基本数据类型
Redis的持久化机制
RDB(Redis DataBase) :存的是数据的2进制文件,恢复快。备份间隔最少也要5分钟,也就是最少丢失5分钟数据。
AOF(Append Of File) :存的是指令文件,恢复慢(需要一条一条执行指令),最多丢失一秒的数据。文件体积较大、性能较差
AOF+RDB : RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。
下图是生成的对应的文件。
缓存雪崩
缓存中的大量key同时失效,导致大量的流量请求到达db中,导致db负载压力过大
解决方式:让key不在同一时间失效,分散开来
缓存穿透
大量的请求同时访问一个根本不存在的key,导致大量流量走到db。
解决方式:设置为null或者使用布隆过滤器判断是否存在该key
缓存击穿
大量的请求同时访问一个过期的key,导致大量流量走到db。
解决方法:加分布式锁
当redis作为db的热点数据时先写DB?还是先写redis?
情景一:先写redis或先写db,不适用场景为当我们项目中有大量的写流量的时候
情景二:先删redis或先删db,不适用的场景为当redis中的数据没有过期时间的时候
情景三:延迟双删,不使用的场景为像秒杀系统这种频繁去修改数据和要求数据强一致的场景
情景四:异步同步,根据mysql的binglog发送消息,在消费消息的时候更新redis,不适用的场景为redis没有过过期时间
分布式锁
为甚要用分布式锁?
普通的锁只能锁单台机器,无法解决在多台机器对于共享资源的并发问题。
如何建立一个分布式锁?
setnx,并设置过期时间,看门狗自动续约。
redis架构
集群模式
新增节点:一致性hash
数据分布不均匀:虚拟节点
主从模式
全量复制: