Redis存在的问题
1. 缓存穿透
缓存穿透是查询一个数据库一定不存在的数据
例如主键,主键id是自增的,都大于0,如果传入了负数,就一定查不到这个数据,这个时候缓存发挥不了作用。
如果有人恶意攻击,所有请求都会直接打在数据库上。
解决办法:将数据库查询不到的数据也保存下来,保存为null
,缓存时间设置较短,这样可以解决一部分问题。
2. 缓存雪崩
缓存雪崩指的一个时间段内缓存集中失效,在这个时间段内查询就都会去查询数据库。
解决办法:缓存设置不同的失效的时间,热门数据缓存时间设置长一点。
3. 缓存击穿
对于一个非常热点的key,扛着非常大的并发量,如果这个key突然失效,所有的请求会请求到数据库上。
可以将热点key设置不过期
Redis集群
1. 主从复制
在redis.conf
文件中加入slaveof ip port
即可。
是读写分离模型,只有主节点才可以写,所有的都可读
2. 哨兵sentinel
主从复制一旦master宕机就无法实现写操作了
所以要用哨兵
修改sentinel.conf
文件,添加如下
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6379 1 主结点ip port 为主服务器判断为失效投票,至少需要一个sentinel通用
sentinel down-after-milliseconds mymaster 10000 认为服务器断开所需的毫秒数
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
启动:redis-sentinel sentinel.conf