
# DCS删除过期key
#### 问题现象
分布式缓存服务每天定时清理一次过期key是根据什么规则清理的？清理规则可以自己调整么？
#### 过期key删除机制
- 惰性删除：Redis的删除策略由主循环中的判断逻辑进行控制，所有Key读写命令执行之前都会调用函数对其进行检查，如果过期，则删除该键，然后返回Key不存在的结果；未过期则不做操作，继续执行原有的命令。
- 定期删除：由Redis的定时任务函数实现，该函数以一定的频率运行，每次运行时，都从键空间中取出一定数量的随机Key进行检查，并删除其中的过期键。
  ![](https://support.huaweicloud.com/dcs_faq/public_sys-resources/note_3.0-zh-cn.png)
  不是每次定时任务都会检查所有的Key，而是随机检查一定数量的Key，该机制旨在防止阻塞Redis主进程太久而造成业务阻塞，所以会造成已过期的Key释放内存速度较慢。
  
 
#### 解决方案
- 配置一个定时的热key扫描，具体操作可参考[热key扫描](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190808001.html)或写一个用scan命令扫描全局key的定时任务把key全部遍历一遍，触发已过期的key从内存中删除。
- 通过自行配置定时任务，在任务执行期间，会对所有缓存实例的主节点进行扫描操作，扫描操作会遍历整个实例的键空间，触发Redis引擎中对Key过期的判断，从而释放已过期的Key，具体操作可参考[过期Key扫描](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-210330002.html)。
 
#### 如何查询删除了哪些过期Key？
暂不支持查询删除的过期Key记录。
