java - 定时扫描数据表,删除过时数据
黄舟
黄舟 2017-04-17 11:26:14
[Java讨论组]

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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
黄舟

一些可能的方法

  1. 可以缓存类似于最后要expired的时间以及对应的id之类的东西,每次只是检查缓存看看是否需要到数据库去删除记录并且更新此缓存。相当于缓存了最优先要删除的记录,只检查缓存。当然这个比较依赖于你的记录基本上是按照expire的顺序排列的才比较有保障或者比较高效。
  2. 从slave数据进行查询,满足条件再到主数据库删除。
  3. 把数据直接存储在有expire功能的专门数据库里,到期自动删除,如redis等。
PHP中文网
  1. 前台查询该表数据时,对expired_time 进行判断, 过期了就不用该数据。再结合定时器 去删除记录应该就可以满足你的需求了
  2. 如果这些数据可以重要性不高, 那么可以放缓存里,设置缓存过期时间 为 expired_time即可。

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号