redis缓存

    科技2022-07-12  122

    redis缓存 redis的性能非常高,基本上同机器配置下完全吊打传统sql,甚至nosql的mongodb等。即使这样redis也只是一个分布式缓存,或者说是分布式缓存数据库,那么redis肯定不能像传统数据一样,动不动放个几T的数据,一般都是用来放热数据或者体量小的数据,其他的数据还是使用队列通过后台服务放到sql db里面;另外根据redis的特性,建议服务器cpu核心数要留个1/4,每个实例的内存最得多出1/2;假如24核的120G的服务器,建议部署18个reids实例,每个实例5G的内存,实际使用不要超过3G的数据量~reids是缓存就继承了缓存的优缺点,性能高是优点,缺点:缓存穿透、缓存雪崩。

    缓存穿透:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂了。 解决办法就是将从db过来的返回值进行缓存,根据实际情况重新加热,若db返回是空则缓存几分钟就可以了。

    缓存雪崩:在我们设置缓存时采用了相同的过期时间或者缓存服务器因某些原因无法使用时,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。 解决办法过期时间上增加一个范围的随机值,使用Redis Sentinel 和 Redis Cluster 实现高可用,另增设一个寿命更短的本机缓存来解决redis分布缓存抢修时的问题。

    在发生无论是缓存穿透还是缓存雪崩,都建议使用队列来排队、拒绝大量请求涌入和分布式互斥锁来避免后端数据服务被冲击,防止已有的数据出现问题。

    Processed: 0.013, SQL: 8