在服务端读取和访问数据时,往往会对数据进行分片,过程中在主机服务器上访问相应的密钥,如果超出服务器的限制,就会引起热点密钥问题。
2热点密钥的危害
=====================================
流量过于集中,突破物理网卡的极限
请求太多,缓存切片服务中断
穿透数据库
当有一个热点Key请求的主机超过该主机的网卡上限时,通信过于集中,服务中的其他服务无法正常运行
=()”
如果热点过于集中,热点密钥缓存过多,超过当前缓存容量,缓存切片服务将崩溃
=()”
缓存服务崩溃,如果此时发出更多请求,则缓存将缓存在后台数据库中,缓存将穿透,进而导致缓存雪崩。
3解决方案
=====================================
常规解决方案主要集中在客户端和服务器端改造上。
3.1服务端缓存方案
客户端将请求发送到服务器。 服务器是多线程服务,本地具有基于Cache LRU策略的缓存空间。 如果服务器自身拥塞,服务器将直接返回请求,而不进一步向数据库发送请求,仅在服务器自身平滑时将客户端请求发送到数据库,然后将数据重新写入缓存。 这样就完成了缓存的访问和重建。
禁用缺陷缓存,多线程构建缓存问题
缓存丢失,缓存构建问题
潦草的读法
3.2使用memcache、Redis
在客户端上单独部署缓存。 使用中,客户端首先访问服务层,然后访问同一主机上的缓存层。 此解决方案具有就近访问、快速、无带宽限制的优点。 但是也有问题:
内存资源浪费
潦草的读法
3.3本地缓存
缺陷需要事先了解热点
缓存容量有限
不均匀的时间增加
热点密钥泄漏
3.4随机后缀
将Redis用于缓存可以将热点Key缓存查询的压力分布在多个Redis节点上。
加随机后缀。
场景是非常热点的数据,数据更新不太频繁,但查询非常频繁,如何确保几乎100%的缓存命中率?