资讯详情

Redis缓存设计与性能优化

1.多级缓存架构

2.缓存设计

3.键值设计

3.1 命令使用

3.2 客户端使用


1.多级缓存架构

目标:让数据尽可能直接返回到前端,而不会击中后端数据库。

主要分为nginx缓存,本地缓存,web层ehcache缓存,redis缓存

2.缓存设计

:缓存层找不到数据,直接到达数据库层。当大量未找到的数据绕过数据库层时,数据库就会崩溃。

解决方案如下:伪代码设计:当缓存找不到时,将缓存到一个value为null并设置过期时间。

第二种解决方案:布隆过滤器,当get如果不存在值时,则不存在值。

:在秒杀场景中,大量数据设置了过期时间。数据过期失效后,大量请求到数据库,导致数据库压力过大。

解决方案:将过期时间设置为随机时间,以减少大量数据故障时的数据库请求。伪代码如下。

:当redis由于异常情况崩溃,大量前端请求直接请求到数据库,导致数据库挂断。异常包括超过redis服务请求范围。

解决方案:

1.保证redis集群高可用

2.使用限流组件,例如sentinel或者hytrix,或者用队列提示前面等了多少人。

3.提前练习,缓存层泵机后,提前做好后端问题预案。

:当一个冷数据在特殊情况下突然变成热数据时,缓存层不能直接向数据库要求太多,导致数据库挂断。

解决方案:使用redis制作一个分布式,从数据库中找到数据,并设置过期时间删除分布式锁,以便重建缓存。下次查询前休眠一段时间,获得缓存key值。

:由于时间轴不同,线程更新缓存结果不一致

解决方案:

1.很少有并发数据需要考虑这个问题

2.缓存和过期时间仍然可以解决大量并发数据的业务需求

3. 转型为串行化,但成本太高。

4. 推荐方案加分布式锁,加读写锁

5.阿里开源也可以使用canal通过监听binlog及时修改日志缓存

对于读多写少的场景,基本上可以增加缓存过期时间。建议放弃缓存,直接操作数据库。

3.键值设计

千兆网卡一般除以8张128张左右MB/S

3.1 命令使用

3.2 客户端使用

三个最重要的参数:maxTotoal,maxIdle,minIdle

淘汰算法是根据应用场景选择的。

采用热点数据LFU算法。大多数其他场景使用。LRU算法。

标签: 泵机电机启动阻燃电容器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台