初识redis的编码方式

使用type命令返回的是当前key对应的value的数据结构类型,例如:string(字符串), list(列表),hash(哈希),set(集合),zset(有序集合)。这些只是redis对外的数据结构,

而redis针对每种数据结构都有自己的底层内部编码实现,而且是多种实现,这样redis会在合适的场景选择合适的内部编码。

:::info

数据结构:value的数据类型

编码方式:底层实现value这种数据结构的方式

:::
Redis数据结构和内部编码

  1. string类型
    1. 当value是一个整数时,此时redis会直接使用int来保存
    2. 当value字符串长度较短时,string的底层是embstr
    3. 当string字符串较长时,string底层采用raw(在java中就是byte数组)
  2. hash类型
    1. hashtable就是哈希表,注意不是java标准库中的hashtable
    2. ziplist压缩列表,当哈希表中元素较少时优化成ziplist,节省空间。
      1. 为什么需要压缩:redis上有很多很多的key,某些key对应的value类型是hash,如果key非常多,对应的hash也特别多,但是每个hash又不大的情况下,就去压缩,让整体占用的内存更小。
  3. list类型
    1. linkedlist就是链表
    2. ziplist压缩列表
    3. 在redis3以后采用quicklist,同时兼顾linkedlist和ziplist的优点,quicklist是一个链表,链表上每个节点又是一个ziplist,把空间和效率都兼顾到。
  4. set类型
    1. hashtable哈希表
    2. intset集合里存的都是整数
  5. zset类型
    1. skiplist 跳表也是链表,不同的地方是,每个节点上有多个指针域,巧妙的搭配这些指针域的指向,能做到查询元素的时间复杂度是O(logN)
    2. ziplist压缩列表

咱们可以通过object encoding key命令查询value的内部编码

相关推荐
code2roc几秒前
SpringBoot整合Milvus向量数据库
数据库·spring boot·milvus·向量化
AugustRed2 分钟前
Flyway 数据库版本迁移 零基础完整学习文档
数据库·学习
Yvonne爱编码9 分钟前
数据库---Day9 视图(附完整数据库脚本+练习题)
数据库·mysql·oracle
sukioe11 分钟前
Redis 入门:为什么出现、核心原理与安装配置
数据库·redis·缓存
宇砾15 分钟前
浅谈Redis(1)
数据库·redis·缓存
heimeiyingwang30 分钟前
【架构实战】Canal数据同步:MySQL数据变更实时捕获
数据库·mysql·架构
cdbqss132 分钟前
VB2026 动态生成工具栏类 BqGetToolStrip
数据库·oracle·开源·.net·学习方法·教育电商·basic
AI人工智能+电脑小能手34 分钟前
【大白话说Java面试题 第85题】【Mysql篇】第15题:MySQL 的事务中,幻读是怎么解决的?
java·开发语言·数据库·mysql·面试
yoothey40 分钟前
MySQL 索引小白面试详解
数据库·mysql
一 乐1 小时前
在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·毕设·在线考试管理系统