Redis对象

作者: 于情于你 | 来源:发表于2020-07-21 23:47 被阅读0次

正文

  前面我们说了简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等等
  Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构。

image.png

问题:Redis中对象共享是什么样子的,如何节约内存?

假设键A创建了一个包含整数值100的字符串对象作为值对象。如果这时键B也要创建一个同样保存了整数值100的字符串对象作为值对象。Redis服务器会这么做:
(1)将数据库键的指针指向一个现有的值的对象
(2)将被共享的值对象的引用计数增一


image.png

为什么Redis不共享包含字符串的对象?

    当服务器考虑将一个共享对象设置为键的值对象时,程序需要先检查给定的共享对象和键想创建的目标对象是否完全相同,只有在共享对象和目标对象完全相同的情况下,程序才会将共享对象用作键的值对象,而一个共享对象保存的值越复杂,验证共享对象和目标对象是否相同所需的复杂度就会越高,消耗的CPU时间也会越多.

对象的空转时长是啥?

    当前时间减去键的值对象的lru(最后一次访问时间)时间计算出来的
    如果服务器打开了maxmemory选项,并且服务器用于回收内存的算法为volatile-lru 或者allkeys-lru,那么当服务器占用的内存数超过了maxmemory选项所设置的上限值时,空转时长较高的那部分键会优先被服务器释放,从而回收内存。

相关文章

  • Redis对象类型和底层数据结构

    Redis对象类型(类型常量:对象名称) REDIS_STRING: 字符串对象 REDIS_LIST: ...

  • redis

    类型常量 对象的名称REDIS_STRING 字符串对象REDIS_LIST 列表对象REDIS_H...

  • redis中的对象

    redis的对象包含5种对象: 字符串对象 列表对象 哈希对象 集合对象 有序集合对象 redis对象的好处 针对...

  • redis对象之列表对象

    承接上文redis对象之字符串对象 参考文献:黄健宏《Redis设计与实现》 前言 列表对象是redis对象系统中...

  • redis笔记:对象

    本人博客同步发表,排版更佳 对象的类型 redis中的对象包括: 字符串对象 REDIS_STRING 列表对象 ...

  • Redis' strings

    Redis字符串基本操作命令 底层实现 Redis中,字符串对象是一个基础对象,所有键值均是字符串对象。Redis...

  • redis zset内部实现

    Redis对象Redis对象由redisObject结构体表示。 Redis中的每个键值对的键和值都是一个redi...

  • redis理解

    redis 很像 java的对象a = new List其实 redis key 就是a 引用redis valu...

  • Redis对象类型及应用

    Redis数据对象类型  Redis共有五种数据对象,包括:字符串、列表、hash表、集合、有序集合。每种对象都至...

  • Redis对象

    参考文献:黄健宏《Redis设计与实现》 概述 在前面的一系列文章中介绍了关于redis中主要数据结构,包括简单动...

网友评论

    本文标题:Redis对象

    本文链接:https://www.haomeiwen.com/subject/gtocyhtx.html