redis的优势和缺点要注意的
redis优势也很容易看
1、高并发
同时大量并发请求进来,数据库是扛不住了,可能宕机或者连接池使用完,导致cpu性能性能下降。我们把一些热点数据存到redis中,并发请求进来直接取到值了,降低数据库压力,保证cpu性能。
2、高性能
用户第一次请求时候是到数据库磁盘查询数据的,磁盘查询很慢,如果查询后将数据放入redis中,下次查询直接redis拿到数据,redis是存在内存中,内存使用很快,这样就能大幅度提升响应速度,这就是性能的提升
有好有坏,使用要注意的地方
1、redis的key和value不要存太大,特别value,另外一片博客会讲这个坑。
2、key过期时间要分散,否则容易造成缓存击穿,缓存雪崩。
3、过期策略要设定好,我记得redis4.0后可以支持优先保留访问量高的热点数据。、
讲讲redis的几种问题
1、缓存击穿:redis的key过期后不是自动删除的,会等下次查询时候发现没有了,再去后台DB查询了写入redis,那如果刚好到redis过期时间了,大量并发请求过来查询,你都会到后台DB查询,数据库可能扛不住
解决:设置定时任务清除更新缓存快过期的,分布式锁机制
分布式锁机制:根据redis单线程特性,过来的任务其实是在队列的,所以如果发现缓存过期了,你调用setNX获取锁*(要设过期时间),是否成功,成功了就获得锁去查询数据库,再更新到缓存中,然后释放锁;没有成功就回到队列继续请求redis。这种思路就是让一个线程去读取数据库刷新缓存,其它的等刷新后直接获取数据。
2、缓存雪崩
击穿是对同一个key的大量高并发请求,雪崩是热点大内存数据他们的过期时间一致,同时失效,请求过来都去数据库查询
解决:设置不同过期时间,或者不变的热点数据永不过期(不推荐)
3、缓存穿透
穿透就是啥也没有得到,我们redis缓存的数据是空,但是查询后台DB也是空,就后台也没有数据,你接口是请求交通卡消息,但是查的数据是天气预报,那肯定没有。
解决:参数合法性检查 /设置redis对象就是空对象