Redis可能存在的基本问题
1.缓存穿透
描述:大部分是因为用户的恶意攻击,反复用同样的条件多次请求缓存中与数据库中都没有的不合法的数据。例如查询的id是负数。
解决方案:
方法1:在请求发起后,在逻辑层判断查询条件是否合法
方法2:在redis缓存中存储value为null的值,但该缓存时间不宜过长。
2.缓存击穿(高并发下)
描述:需要查询的数据在redis缓存中正好过期或者没有该键值对,而数据库中有。此时突然有高并发的发生,大量对数据库的请求,导致数据库的压力剧增,可能导致宕机。
解决方案:
方法1:对于经常查询而很少修改,删除的数据设置成热点数据(永远不过期)
方法2:对部分代码加锁
3.缓存雪崩
描述:redis缓存中有大量键值对同时到过期时间,而查询数据的需求此时又很大,数据库压力剧增。与缓存击穿有相似的性质,但不同的是,缓存击穿是单单某个数据过期,雪崩是大量数据过期。
解决方案:
方法1:对于经常查询而很少修改,删除的数据设置成热点数据(永远不过期)
方法2:对缓存数据的过期时间设置为随机,
上述都是未包含多级缓存机制和详细的分布式部署的简单方法