初识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的内部编码

相关推荐
高梦轩1 小时前
MySQL高可用
android·运维·数据库
紫金修道4 小时前
【DeepAgent】概述
开发语言·数据库·python
wuyikeer4 小时前
docker下搭建redis集群
redis·docker·容器
孟章豪4 小时前
《SQL拼接 vs 参数化,为什么公司禁止拼接SQL?(附真实案例)》
服务器·数据库·sql
荒川之神4 小时前
ORACLE LEVEL函数练习
数据库·oracle
·云扬·5 小时前
【MySQL】实战:用pt-table-sync修复主从数据一致性问题
数据库·mysql·ffmpeg
swIn KWAL5 小时前
【MySQL】环境变量配置
数据库·mysql·adb
shark22222225 小时前
【JOIN】关键字在MySql中的详细使用
数据库·mysql
RATi GORI5 小时前
MySQL中的CASE WHEN语句:用法、示例与解析
android·数据库·mysql
坊钰5 小时前
Java 死锁问题及其解决方案
java·开发语言·数据库