死去的记忆Redis过期数据的困境(redis 过期的数据)

  随着时间的推移,不可避免的会存在一些已知(或未知)的资源被从系统中清理掉,这些资源必须会存在着过期的状态,即“死去的记忆”。

  在Redis中,该可以让资源存在一种规定时间后自动失效的过程中也存在。有了它,可以避免过期资源占据过长的资源空间,从而节省内存开支,也可以防止系统其他正常操作遇到延迟等等问题。

  Redis中可以利用EXPIRE和PEXPIRE来设置资源的过期时间,当资源存在时间大于设定的过期时间后,资源会被删除,并从存储中彻底清除掉。

  但是,这里也存在一个问题,如果Redis中的资源设定的过期时间较长,但在过期之前,Redis服务停止了,则这些资源不管原先是否设定过期,则都将永远被保存在Redis中,形成“死去的记忆”,而在Redis重启之后,自然也就无法删除这部分已经过期的资源。

  关于这块,Redis提供了名为RDB和AOF的持久化模式,其中RDB就是定时备份DB文件,可以避免资源过期时Redis服务器挂掉而导致的“死内存”问题,而AOF中提供了appendfsync来控制Redis服务器的fsync去避免死内存。

//RDB示例
node.rdb..active-defrag-hint
node.rdb..last-save
node.rdb..saving
//AOF示例
appendfsync always
appendfsync everysec
appendfsync no

  总结来说,对于规定时间失效的资源,我们可以利用Redis的EXPIRE等数据失效机制,来正常处理此类问题,从而节省Redis存储空间。而如果出了意外,可以利用RDB和AOF来有效的避免清除“死去的记忆”而造成的资源的浪费以及其他问题。


数据运维技术 » 死去的记忆Redis过期数据的困境(redis 过期的数据)