主动淘汰:这是推荐的方式,我们通过对Key设置TTL的方式来让Key定期淘汰,以保障冷数据不会长久的占有内存。TTL的策略可以保证冷数据一定被淘汰,但是没有办法保障热数据始终在内存,这个我们在后面会展开;
被动淘汰:这个是保底方案,并不推荐,Redis提供了一系列的Maxmemory策略来对数据进行驱逐,触发的前提是内存要到达maxmemory(内存使用率100%),在maxmemory的场景下缓存的质量是不可控的,因为每次缓存一个Key都可能需要去淘汰一个Key。
四、腾讯云Redis混合产品介绍 1. 产品简介腾讯云Redis混合存储版基于腾讯游戏线上运营多年的Tendis引擎打造。数据自动降冷,落盘压缩,最大可降低成本85%,100% 兼容Redis协议,可助力企业大幅提升生产效率,降低运营成本。
2. 产品特性 (1)研发效率+++ a. 混合存储解决方案
同样的三层架构,业务仅需要访问统一的Redis接口,让企业重新聚焦业务逻辑;
一套系统支撑,避免维护多套系统。
b. 解决缓存三大难题
一致性:通过内聚的设计,保障缓存和存储一致性
缓存击穿:All Keys In Memory设计,避免缓存击穿;
缓存持久:动态TTL设计,热数据即持久缓存。
c. 100%兼容Redis协议
100%兼容Redis协议,业务可顺畅接入。
d. 超高读写性能
高写入:为Redis定制的Rocksdb存储引擎,支持100万并发写入;
高读取:只能热数据缓存方案,提供1000万并发读取。
(2)运营成本-85% a. 数据自动降冷
全量数据落盘,热数据缓存内存,相对全内存方案成本-85%;
数据自动降冷,成本可控。
b. 精准缓存
动态TTL淘汰方案,精准缓存热数据,有效避免缓存雪崩;
可控的冷数据缓存策略,快速解决缓存污染问题。
c. 数据压缩
Rocksdb独有的数据结构,保障性能和压缩效果平衡;
提供高达3~N倍(统计值)的数据压缩率 。
(3)突破内存限制 a. PB级KV存储解决方案
全量数据存储在磁盘,突破内存的容量限制;
计算&存储分离的存储架构,突破单机磁盘限制。
b. 高扩展性
水平扩展:支持水平扩展分片;
垂直扩展:秒级的垂直扩展存储;
读写分离:缓存层热点数据读写分离。
五、产品架构Redis混合存储版架构核心组件由Proxy、缓存Redis、存储Tendis组成,其中每个组件的功能介绍如下:
Proxy组件:负责对客户端请求进行路由分发,将不同的Key的命令分发到正确的分片,同时Proxy还负责了部分监控数据的采集,以及高危命令在线禁用等功能。
缓存Redis:缓存Redis组件源自于Redis 4.0 Cluster,为了支持冷数据自动降冷,我们对Redis进行了Value淘汰、写入数据同步Tendis、冷数据访问、主备热数据同步、按时间淘汰Value等核心功能的改造,改造后的混合存储版100%兼容Redis Cluster命令。
存储Tendis:Tendis是腾讯自研的KV存储引擎,一个兼容Redis协议的Rocksdb存储引擎,该引擎已经在腾讯集团内部运营多年,性能和稳定性得到了充分的验证。在混合存储系统中主要负责全量数据的存储和读取,以及数据备份,增量日志备份等功能。
六、混合存储带你翻越缓存三座大山 1. 一致性解决方案 (1)并行更新(隔离性)
串行更新:单Key串行更新,保证时序;
并行更新:Slot维度并行更新,提升性能。
(2)部分成功(原子性)
系统联动:缓存&存储实时同步更新状态,通过revision同步状态;
部分成功:缓存更新成功,存储更新失败,触发HA,保障写入成功(日志幂等)。
(3)读一致性
revision:每个Key都带有一个revision,通过revision识别数据新旧;
淘汰控制:Redis不淘汰存储未更新的数据(Redis不淘汰revision <4的 数据),保证Redis不缓存旧版本数据。
2. 缓存击穿解决方案 (1)空数据查询缓存所有Key 和 热数据Value,在缓存层拦截空数据查询,避免无效查询透传;
(2)缓存污染可控的冷数据缓存策略,提供可配置的了冷数据缓存配置,例如业务可以配置在5分钟内访问次数超过3次才缓存在内存,可以有效防御缓存污染。
value-cache-policy-period(缓存策略时间窗);
value-cache-policy-threhold(value-cache-policy-period 时间窗内触发缓存的访问频率)。
3. 缓存雪崩解决方案前面介绍到,缓存雪崩主要在两种情况会触发: