8.10 对象的空转时长
除了前面介绍过的type、encoding、ptr和refcount四个属性之外,redisObject结构包含的最后一个属性为lru属性,该属性记录了对象最后一次被命令程序访问的时间:
typedef struct redisObject {
    // ...
    unsigned lru:22;
    // ...
} robj;
OBJECT IDLETIME命令可以打印出给定键的空转时长,这一空转时长就是通过将当前时间减去键的值对象的lru时间计算得出的:
redis> SET msg "hello world"
OK
#等待一小段时间
redis> OBJECT IDLETIME msg
(integer) 20
#等待一阵子
redis> OBJECT IDLETIME msg
(integer) 180
#访问msg键的值
redis> GET msg
"hello world"
#键处于活跃状态,空转时长为0
redis> OBJECT IDLETIME msg
(integer) 0
注意
OBJECT IDLETIME命令的实现是特殊的,这个命令在访问键的值对象时,不会修改值对象的lru属性。
除了可以被OBJECT IDLETIME命令打印出来之外,键的空转时长还有另外一项作用:如果服务器打开了maxmemory选项,并且服务器用于回收内存的算法为volatile-lru或者allkeys-lru,那么当服务器占用的内存数超过了maxmemory选项所设置的上限值时,空转时长较高的那部分键会优先被服务器释放,从而回收内存。
配置文件的maxmemory选项和maxmemory-policy选项的说明介绍了关于这方面的更多信息。

8.11 重点回顾
❑Redis数据库中的每个键值对的键和值都是一个对象。
❑Redis共有字符串、列表、哈希、集合、有序集合五种类型的对象,每种类型的对象至少都有两种或以上的编码方式,不同的编码可以在不同的使用场景上优化对象的使用效率。
❑服务器在执行某些命令之前,会先检查给定键的类型能否执行指定的命令,而检查一个键的类型就是检查键的值对象的类型。
❑Redis的对象系统带有引用计数实现的内存回收机制,当一个对象不再被使用时,该对象所占用的内存就会被自动释放。
❑Redis会共享值为0到9999的字符串对象。
❑对象会记录自己的最后一次被访问的时间,这个时间可以用于计算对象的空转时间。

Redis- 对象的空转时长(总结)相关推荐

  1. redis 对象的空转时长

    对象的空转时长 除了前面介绍过的type.encoding.ptr和refcount四个属性之外,redisObject结构包含的最后一个属性为lru属性,该属性记录了对象最后一次被命令程序访问的时间 ...

  2. Redis学习笔记 - 内存回收、对象共享、对象的空转时长

    参考:<<Redis设计与实现>> 注:这本书是基于Redis3.0版本写的,和后面的版本有点差异 一.内存回收 C语言不具备自动内存回收功能,所以Redis在自己的对象系统中 ...

  3. redis笔记-对象的空转时长

    1. redisObject的lru属性记录了该对象最后一次被命令访问的时间 2. object idletime可以打印给定键的空转时长, 通过当前时间减去键的值对象的lru时间 3. object ...

  4. Redis对象的refcount与lru属性(内存回收、对象共享、空转时长)

    本笔记参考<Redis设计与实现> P84~P88 内存回收 Redis在对象系统中使用reference counting技术实现了内存回收机制.程序可以通过跟踪对象的引用计数信息,在适 ...

  5. Redis计数器统计小程序用户停留时长

    业务需求 统计小程序的用户停留时长 不需要实时统计,所以按照天为维度 使用Redis的hash形式存并使用计数器累加时长,凌晨定时持久化前一天的数据到DB 注:一些其它统计也可以使用此种方式来 使用R ...

  6. 当 Redis 发生高延迟时,到底发生了什么

    来自:程序员厉小冰 Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以 ...

  7. 当 高并发系统下 Redis 发生高延迟时,其内部到底发生了什么

    Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以便于快速排查问题,解 ...

  8. Redis 对象的数据结构原理 - SDS、Inset、Dict、ZipList、QuickList、SkipList、RedisObject

    Redis 数据结构 1. SDS Redis 是用 C 语言写的,但是对于 Redis 的字符串,却不是 C 语言中的字符串(即以空字符'\0'结尾的字符数组),它是自己构建了一种名为 简单动态字符 ...

  9. 你的对象在哪里?长什么样?我带你去看一看

    学过JVM的人都知道在JVM中在执行Java程序的过程中会把JVM管理的内存进行划分,叫做运行时数据区. JVM中管理的内存主要分为以下五个部分: 方法区(Method Area): Java堆(He ...

最新文章

  1. 深入理解JWT的使用场景和优劣
  2. 2011 年最重要的 10 个开源软件
  3. 图像偏色检测算法,速度快,效果好,共享给大家。
  4. 如何把不同尺寸ico格式图标_还在为图标设计犯难?这篇告诉你图标设计so easy!...
  5. 如何优化网站结构才促使网站排名“节节高”?
  6. C/Cpp / 虚函数是否可用 static 修饰
  7. mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
  8. mac php7.0 yaf 安装,MAC MAMP PRO PHP YAF 安装
  9. Markdown语法、相关警告配置设置——持续更新
  10. session和cookie的区别 session失效
  11. 集合类之番外篇:深入解析HashMap、HashTable
  12. php去掉 部分字符,输出,php如何去除某个字符
  13. lamp 测试mysql_搭建LAMP测试环境
  14. html5 查询展示页面,基于Html5的可视化展示页面自动发布方法及系统与流程
  15. (java+selenium)Web自动化12306模拟人工滑块验证
  16. 电商后台管理系统难点(2)
  17. 浏览器下载文件时文件名中文乱码问题
  18. 历年计算机基础试题和答案,自学考试00018计算机应用基础历年试题与答案
  19. 面试官:什么是 Reactor 和 Proactor?
  20. 简单的交换排序法(选择排序)。

热门文章

  1. 马斯克和扎克伯格线上约架,地点“票价”都已定;超10万个ChatGPT账号泄露;苹果推出Vision Pro开发工具|极客头条...
  2. ROS小海龟小乌龟不能移动了
  3. Java 实现简单打字游戏
  4. 文字游戏之Buffalo buffalo Buffalo buffalo buffalo...
  5. unity中的HoloLens应用窗口化运行
  6. C# HTML解析工具HtmlAgilityPack使用简介
  7. Vue中页面判断逻辑比较复杂的情况,如何正确使用判断
  8. pyqt5 Qt Designer + PyqtGraph画图显示动态曲线
  9. Fmincon函数学习整理
  10. idea Maven报Unable to import maven project: See logs for details解决方法