当Tair/Redis数据过期后,Tair/Redis将根据默认策略逐步删除已过期的数据,这导致过期数据仍然占据着内存空间。您可以在系统运维管理(简称OOS)中配置定期运维任务,在业务低峰期,扫描(SCAN)所有Key并立即删除已过期的Key,释放内存占用。
背景信息
Tair/Redis为保障读写性能,其删除逻辑为异步删除。当数据过期后,Tair/Redis不会立即删除已过期的数据,而是通过主动删除(后台定期扫描、删除部分过期Key)与被动删除(当用户访问到过期Key,则删除)的方式对过期Key进行逐步删除,因此过期数据仍然占据着内存空间。在极端情况下,当大量数据同时过期时,数据会立即过期,但需要较长时间进行删除、回收内存空间。
您可以参考本方案,免费使用OOS服务,定时调用Tair/Redis的FlushExpireKeys API来扫描(SCAN)所有Key并立即删除已过期的Key。
SCAN命令扫描所有数据会使实例的CPU负载上升,建议您在业务低峰期执行该任务。
前提条件
您需要为OOS服务创建一个RAM角色,用于OOS服务访问Tair/Redis服务,具体操作请参见为OOS服务设置RAM权限。
您可以为该角色授予系统权限策略AliyunKvstoreFullAccess。授权后,RAM角色可以管理Tair/Redis所有资源。
您也可以自定义最小权限策略(允许OOS调用Tair/Redis的DescribeInstances与FlushExpireKeys API),限定该角色只能执行当前任务。
操作步骤
访问OOS控制台。
在左侧导航栏,单击
。单击创建。
配置定时运维任务。
说明本文仅介绍关键步骤,其他参数请参见定时运维。
定时设置
本示例选择周期性重复执行,指定每天04:00与16:00执行。
同时指定规则结束时间为2024-03-31 00:00:00,表示该定时运维任务将在该时间点结束,不再执行。
选择模板
在公共模板中搜索ACS-Redis-FlushExpireKeys,并勾选该模板。
设置模板参数
选择Tair/Redis实例所在的地域,选择目标实例。
在OOS扮演的RAM角色中选择在前提条件中创建的RAM角色。
执行设置(可选)
该页签配置项可保持默认。
单击创建,并在弹框中单击确认。
当任务的执行状态显示生效中,表示该任务将根据定时设置自动执行。
后续步骤
您可以在定时运维任务列表中,单击目标执行ID,进入任务详情页。在该页面中,您可以查看或修改任务配置信息、立即触发执行、查看执行历史信息等。
同时,由于过期数据被删除、内存得以回收,您也可以在Tair/Redis的性能监控中看到该实例的内存使用率降低了。
相关文档
您也可以在OOS中配置告警与事件运维,例如当内存使用率(平均值)达到90%时,调用FlushExpireKeys API删除已过期的Key。配置方式与本方案类似,配置入口为 ,更多信息请参见创建告警运维任务。
关于Tair/Redis删除过期数据的介绍,请参见Tair/Redis如何清除过期Key。