最近更新时间:2024-09-05 16:48:08
Redis企业版支持开启、关闭代理缓存服务,开启该功能后,代理节点会定期缓存server端推送过来的热度高的Key(返回结果),当客户端发送热点key的读请求时,代理节点通过查询本地缓存直接返回查询结果,从而节省了与server端交互的时间及server端的计算资源,可有效提高热点key请求的响应速度,降低server端的计算资源压力,在一定程度上解决热点Key引起的访问倾斜问题。
实例必须为Redis企业版-集群版。
proxy缓存热key的容量为512MB。
由于代理节点中缓存的热点Key的值在有效时间内不会实时更新,只能保证数据的最终一致性 。业务侧能够接受数据在一定时间内不同步的问题。
最终一致性:proxy节点缓存的热key(返回结果),在存活周期内不会进行更新,期间如果对热key进行修改类操作,仅对server节点上的数据进行更新,不会同步更新proxy节点的缓存数据。proxy缓存的热key(返回结果)到期后,server端会根据规则重新推送数据给proxy节点。即不保证从缓存中读取的数据与server端的数据是一致的,只能保证proxy端和server的数据最终是一致。
1. 代理存储原理,如下图:
Redis企业版会根据高效的热度算法识别出实例中存在的热点Key,开启代理缓存后,代理节点Proxy会订阅server端的热点key,根据设定的规则,proxy缓存热点Key的查询结果。当在缓存有效时间内收到相同的请求时,Proxy无需和后端的数据分片执行交互,会直接返回结果至客户端,在提升读取速度的同时,降低了热点Key对分片节点的计算压力,解决访问倾斜问题。
实例的参数配置功能下,通过修改proxy组件参数,开启、关闭该服务,相关参数如下:
参数 | 说明 |
---|---|
query_cache_enabled | 是否启用代理缓存功能,取值:
重要由于代理节点中缓存的热点Key的值在有效时间内不会实时更新,只能保证数据的最终一致性。业务侧能够接受数据在一定时间内不同步的问题。 |
query_cache_expire | 缓存数据的有效时长,单位为毫秒,取值:100~60000,默认值为1000。
|
Redis企业版提供了相关命令以便获取代理缓存的使用情况,命令如下:
querycache keys:获取代理节点中已缓存的热Key信息。
返回结果说明:每个热Key的信息由三行信息组成,含义如下:
数据库名。
Key名称。
key热度。
返回示例
127.0.0.1:6379> querycache keys
1) 1) (integer) 2
2) "key:000000000000"
3) (integer) 118
2) 1) (integer) 2
2) "key:000000000001"
3) (integer) 110
querycache info:获取代理缓存的运行情况。
返回结果说明:每个热Key的信息由三行信息组成,含义如下:
get_qps:get请求的QPS,单位为请求数/秒。
memory_size:占用的内存容量,单位为字节。
query_count:总请求量,单位为个。
hit_rate:缓存的命中率。
返回示例
127.0.0.1:6379> querycache info
1) "get_qps:0"
2) "memory_size:56"
3) "query_count:2"
4) "hit_rate:99.97"
querycache listall:获取代理节点中已缓存的热Key剩余有效时间。
返回结果说明:每个热Key的信息由三行信息组成,含义如下:
数据库名。
key名称。
剩余有效时间,单位为毫秒。
返回示例
127.0.0.1:6379> querycache listall
1) 1) (integer) 2
2) "GET key:000000000001"
3) (integer) 33262
2) 1) (integer) 2
2) "GET key:000000000000"
3) (integer) 33262
纯净模式