Redis的超时命令和垃圾回收策略

  • 内容
  • 评论
  • 相关

正如 Java 虚拟机,它提供了自动 GC(垃圾回收)的功能,来保证 Java 程序使用过且不再使用的 Java 对象及时的从内存中释放掉,从而保证内存空间可用。

当程序编写不当或考虑欠缺的时候(比如读入大文件),内存就可能存储不下运行所需要的数据,那么 Java 虚拟机就会抛出内存溢出的异常而导致服务失败。同样,Redis 也是基于内存而运行的数据集合,也存在着对内存垃圾的回收和管理的问题。

Redis 基于内存,而内存对于一个系统是最为宝贵的资源,而且它远远没有磁盘那么大,所以对于 Redis 的键值对的内存回收也是一个十分重要的问题,如果操作不当会产生 Redis 宕机的问题,使得系统性能低下。

一般而言,和 Java 虚拟机一样,当内存不足时 Redis 会触发自动垃圾回收的机制,而程序员可以通过 System.gc() 去建议 Java 虚拟机回收内存垃圾,它将“可能”(注意,System.gc() 并不一定会触发 JVM 去执行回收,它仅仅是建议 JVM 做回收)触发一次 Java 虚拟机的回收机制,但是如果这样做可能导致 Java 虚拟机在回收大量的内存空间的同时,引发性能低下的情况。

对于 Redis 而言,del 命令可以删除一些键值对,所以 Redis 比 Java 虚拟机更灵活,允许删除一部分的键值对。与此同时,当内存运行空间满了之后,它还会按照回收机制去自动回收一些键值对,这和 Java 虚拟机又有相似之处,但是当垃圾进行回收的时候,又有可能执行回收而引发系统停顿,因此选择适当的回收机制和时间将有利于系统性能的提高,这是我们需要去学习的。

在谈论 Redis 内存回收之前,首先要讨论的是键值对的超时命令,因为大部分情况下,我们都想回收那些超时的键值对,而不是那些非超时的键值对。

对于 Redis 而言,可以给对应的键值设置超时,相关命令如表 1 所示。

表 1 Redis的超时命令
命   令 说   明 备   注
persist key 持久化 key,取消超时时间 移除 key 的超时时间
ttl key 査看 key 的超时时间  以秒计算,-1 代表没有超时时间,如果不存在 key 或者 key 已经超时则为 -2
expire key seconds  设置超时时间戳 以秒为单位
expireat key timestamp 设置超时时间点 用 uninx 时间戳确定
pptl key milliseconds 查看key的超时时间戳 用亳秒计算
pexpire key 设置键值超时的时间 以亳秒为单位
Pexpireat key stamptimes 设置超时时间点 以亳秒为单位的 uninx 时间戳

下面展示这些命令在 Redis 客户端的使用,如图 1 所示。

Redis超时命令
图 1  Redis超时命令

本文标题:Redis的超时命令和垃圾回收策略

本文地址:https://www.hosteonscn.com/6024.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注