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对象就是空对象

经验分享 程序员 微信小程序 职场和发展