首页 > 定时扫描数据表,删除过时数据

定时扫描数据表,删除过时数据

我的数据表是这样设计的,有一个字段是 expired_time 是用来保存过期的时间的,我想做一个定时器定时扫描表,过期的行我就删掉。可是感觉用定时器可能不太精准,如果定时器间隔比较小,虽然误差小了,但是又感觉会查询得太频繁了。

我现在想问,会不会有别的方法做到,更少的误差和更高的性能呢(用缓存是不是也是一个不错的选择)?


一些可能的方法

  1. 可以缓存类似于最后要expired的时间以及对应的id之类的东西,每次只是检查缓存看看是否需要到数据库去删除记录并且更新此缓存。相当于缓存了最优先要删除的记录,只检查缓存。当然这个比较依赖于你的记录基本上是按照expire的顺序排列的才比较有保障或者比较高效。
  2. 从slave数据进行查询,满足条件再到主数据库删除。
  3. 把数据直接存储在有expire功能的专门数据库里,到期自动删除,如redis等。

  1. 前台查询该表数据时,对expired_time 进行判断, 过期了就不用该数据。再结合定时器 去删除记录应该就可以满足你的需求了
  2. 如果这些数据可以重要性不高, 那么可以放缓存里,设置缓存过期时间 为 expired_time即可。

两个可以结合起来, 写数据时 数据库也写一份,定时器去删库, 读只读缓存。查数据时,缓存没有的,就查库,记录没过期就写到缓存里。过期了就不用写缓存了

【热门文章】
【热门文章】