## cache相关

---

缓存在带来性能提升和支持高并发的同时，也带来另一个问题，如果缓存宕机导致所有的缓存失效，所有的流量都压到后端的服务上，例如数据库层。这时，后端服务因为压力过大无法提供服务或快速响应，缓存因为等待后端请求的响应而“热”不起来，最终导致“雪崩”问题。

**在高并发系统中，解决缓存失效有以下三个思路：**

1. Consistent Hashing一致性hash算法，缓存分片，增加虚拟节点来保证服务器能均匀地分布在圆环上，最大限度地减小服务器增减节点时产生的缓存重新分布问题。
2. 备份。由中间件把缓存复制多份，一旦缓存宕机时能切换到另一份缓存上
3. 实现缓存持久化或半持久化。所谓的持久化就是定期把缓存里面的数据刷到磁盘，保存起来，在缓存失效时能保证大部分数据仍然有效，例如使用Redis或MemcacheDB把一些数据存到磁盘。可能有人会说：“是否在刷磁盘那一刻会影响缓存的高效性？”这可以考虑通过高端硬件（例如Fushion IO或SSD作为存储设备），来减少刷Cache过程中减少对服务的影响

**运维层面：**

1. 缓存空间大小的使用率
2. 缓存的命中率
3. 响应时间、以及qps
4. 服务器的网络带宽、CPU、内存、硬盘I/O


