Redis如何回收过期数据?

 手浪用户2602884673 发布于 2022-10-27 04:26

服务器经常会用到redis作为缓存,有很多数据都是临时set以下,可能用过之后很久都不会再用到了(比如暂存session)那么就有几个问题了

  1. redis会自己回收清理不用的数据吗?
  2. 如果能,如何配置?
  3. 如果不能,如何防止数据累加后大量占用存储空间的问题?
2 个回答
  • 可以用 expire 命令来设置过期时间。还有另外几个命令也可以用来设置过期时间的,具体请查阅文档。

    2022-11-12 01:43 回答
  • redis默认把所有数据都永久存储在内存中,当你需要持久化数据(保存到磁盘)或者自动删除过期键,需要使用额外的命令或者配置来完成; 如果你需要使用redis来完成你的业务需求(譬如cache),那么你就必须遵循redis的设计规则;

    至于你后面提到这个问题:即便我很有洁癖的每一条都加上了expire,你能保证多人开发中其他人也加上了expire?如果有人没有呢,那这个数据就一直一直一直保存着

    我是这样想的:通常业务逻辑都会封装成API接口,譬如登陆场景存session接口可能就是:void addLoginSession(string data, int timeout),然后别人在调用的时候其实压根不管这里面用的是redis还是memcache,所有的细节都必须只由API设计者消化;

    顺便说一下,redis如何清理数据库中过期的键?它分为两种:

    1. 惰性删除:当你去操作一个键(譬如 get name),redis首先会检查这个键是否关联了一个超时时间,如果有,则检查是否超时,若超时则返回空,否则返回相应的值;
    2. 定时删除:redis中有个时间事件,它会清理数据库中已经过期的键(redis会限定该操作占用的时间,避免阻塞客户端的请求)
    2022-11-12 01:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有