redis哈希对象的底层编码有两种:ziplist、hashtable

ziplist编码

当一个哈希键只包含少量kv对、且key和value都是小整数值、短字符串时,redis会使用压缩列表来做

ziplist编码之前介绍过,最初是用在列表对象中的一种编码,在简单的哈希对象中也会用到。有遗忘时参考这里:https://www.cnblogs.com/loveCheery/p/9152144.html

在哈希对象中,采用ziplist编码时:

  • 先向压缩列表中放key、再放value
  • 先添加的对象放在表头,后添加的对象在尾部追加

比如:

127.0.0.1:> hset profile name "Tom"
(integer)
127.0.0.1:> hset profile age
(integer)
127.0.0.1:> hset profile career "Programmer"
(integer)
127.0.0.1:> object encoding profile
"ziplist"

其压缩列表的内部结果如:

hashtable编码

hashtable编码采用字典作为底层实现。底层与1.8之前的jdk中map很相似,为链表数组,但是有自己的rehash条件、扩容收缩规则。

比如我们在上面的profile中插入一项较长字符串的vaule,其编码会转变为hashtable

127.0.0.1:> hset profile evaluation "So far as I know, Tom is a very kind boy, the boy u can trust. You can let him to do some tasks with high priority."
(integer)
127.0.0.1:> object encoding profile
"hashtable"

内部结构类似于:

hashtable底层字典的插入、查询、对字典有遗忘看这里:https://www.cnblogs.com/loveCheery/p/9133674.html

编码转换

当对象同时满足这两个条件时,使用ziplist编码:

  1. 所有key和value的字符串长度都小于64字节(可使用hash-max-ziplist-value配置)
  2. key-value对数量小于512个(可使用hash-max-ziplist-entries配置)

不满足这两个条件时,转为hashtable编码。

还没验证是否会从hashtable转回ziplist

redis_哈希对象的更多相关文章

  1. 实习小记-python中不可哈希对象设置为可哈希对象

    在这篇之前,我又专门翻译过官方python3.3的可哈希对象文档,大家可以先参考一下: 实习小记-python中可哈希对象是个啥?what is hashable object in python? ...

  2. redis 系列12 哈希对象

    一. 哈希对象概述 Redis hash对象是一个string类型的field和value的映射表,hash特别适合用于存储对象.作为哈希对象的编码,有二种一是ziplist编码, 二是hashtab ...

  3. 15天玩转redis —— 第四篇 哈希对象类型

    redis中的hash也是我们使用中的高频数据结构,它的构造基本上和编程语言中的HashTable,Dictionary大同小异,如果大家往后有什么逻辑需要用 Dictionary存放的话,可以根据场 ...

  4. redis -hash(哈希.对象)

    hash 用于储存对象,对象的结构为属性.值 值的类型string 增加.修改: 设置单个属性: hset 键 field 值 例如: 设置键 user 的属性name 为 python hset u ...

  5. redis 系列9 对象类型(字符串,哈希,列表,集合,有序集合)与数据结构关系

    一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串.链表(双端链表).字典.跳跃表. 整数集合.压缩列表(后面再了解).Redis没有直接使用这些数据结构来实现键值 ...

  6. ruby 对象转换哈希(Hash)

    通过 ActiveRecord 从数据库的某张数据表(table)中获取的对象如何转换成为 Hash orders_table 是一张订单信息表,对应的 model 为 Orders @order = ...

  7. Redis对象——哈希(Hash)

    哈希在很多编程语言中都有着很广泛的应用,而在Redis中也是如此,在redis中,哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},...{f ...

  8. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  9. 实习小记-python中可哈希对象是个啥?what is hashable object in python?

    废话不多说直接祭上python3.3x的文档:(原文链接) object.__hash__(self) Called by built-in function hash() and for opera ...

随机推荐

  1. P61 实践作业

    网络攻防实验环境搭建 根据链接下载的实验工具包,将其解压 打开VM虚拟机,点击图中红色框,扫描虚拟机 选择文件所在位置 点击下一步,完成.即可 在VM虚拟机设置中把网络适配器修改为桥接模式.如下图 在 ...

  2. echarts饼图去除鼠标移入高亮

    1:如果echarts的js文件为压缩版本,在编辑器打开去掉t.on("mouseover",c).on("mouseout",d)这一行,如果js文件为非压缩 ...

  3. UGUI脚本添加Btn回调的方法

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...

  4. Java框架spring Boot学习笔记(二):Hello Spring Boot、以及项目属性配置

    新建一个新建一个SpringBootTest工程 新建一个HelloController.java文件 package com.example.demo; import org.springframe ...

  5. Django最简单的从请求过程

    1,url匹配,匹配路由,由理由分发器(urls.py)查找用户请求的url对应关系 1,找到业务函数就调用(views.py中的方法)   2,找不到就报404错误,     3,将数据返回给浏览器 ...

  6. VS2017企业版密钥

    Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QFVisual Studio 2017(VS2017 ...

  7. spring cloud Ribbon

    参考:https://www.jianshu.com/p/1bd66db5dc46 Ribbon 是什么 spring cloud ribbon 是一个基于HTTP 和 TCP 的客户端负载均衡工具, ...

  8. 128bit 整数运算的实现

    对于128bit的长整型运算,GCC提供了扩展类型:__int128.然而该类型不在C/C++语言的标准之中,并且对于不同种类的编译器,它的实现情况不同.因此,在编写相关的可移植程序时,我们有必要实现 ...

  9. step_by_step_记录deepin下curl安装过程

    记录 deepin 下 curl 安装过程 wget https://curl.haxx.se/download/curl-7.55.1.tar.gz .tar.gz cd curl-/ ./conf ...

  10. C# 一些学习作业

    下载地址:http://pan.baidu.com/s/1dEGCJdf 包括: 实现QQ旋转窗体功能 非“按角度旋转”,实现的是立体旋转. 实现QQ旋转窗体功能,窗口为不规则图像,打开时旋转180度 ...