Redis 设计与实现 (一)--数据结构
底层数据结构:动态字符串、字典、整数集合、双端链表、压缩列表
字符串对象:
int 浮点数值
raw 字符串值>32字节
embstr 字符串值<32字节
字符串编码转换:
int => raw int追加的值为字符串
embstr => raw embstr任何修改
列表对象:
ziplist 底层 - 压缩列表
linkedlist 底层 - 双向链表
哈希对象:
ziplist 底层 - 压缩列表
新加键值对,先将键打入压缩列表的表尾,然后同样方式保存值。
同一个键值对挨在一起,键值对有先来后到。
哈希对象所有键值对的字符串长度<64字节
哈希对象所有键值对数量<512个
hashtable 底层 - 字典
字典键和值都是字符串对象。
集合对象:
intset 底层 - 整数集合
集合对象保存的都是整数值
不超过512个元素
hashtable 底层 - 字典
有序集合对象:
ziplist 底层 - 压缩列表 按照元素分值排序
元素长度<64字节
元素个数<128
skiplist 底层 - zset结构(字典+跳跃表)
类型检查和命令多态
操作键:del explre rename type object
字符串键:set get append strlen
哈希键:hdel hset hget hlen
列表键:rpush lpop linsert llen
集合键:sadd spop sinter scard
有序集合:zadd zcard zrank zscore
类型检查: redisObject type
多态命令
内存回收:引用计数
对象共享:将数据库键的值指针指向现有的值对象。
共享值引用计数+1
对象的空转时长:
lru 对象最后一次被命令访问的时间
object idletime 空转时间
Redis 设计与实现 (一)--数据结构的更多相关文章
- 探索Redis设计与实现8:连接底层与表面的数据结构robj
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现6:Redis内部数据结构详解——skiplist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现7:Redis内部数据结构详解——intset
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现5:Redis内部数据结构详解——quicklist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现4:Redis内部数据结构详解——ziplist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现3:Redis内部数据结构详解——sds
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现2:Redis内部数据结构详解——dict
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 探索Redis设计与实现1:Redis 的基础数据结构概览
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- Redis | 第一部分:数据结构与对象 上篇《Redis设计与实现》
目录 前言 1. 简单动态字符串 1.1 SDS的定义 1.2 空间预分配与惰性空间释放 1.3 SDS的API 2. 链表 2.1 链表与节点的定义 2.2 链表的API 3. 字典 3.1 哈希表 ...
- Redis | 第一部分:数据结构与对象 下篇《Redis设计与实现》
目录 前言 1. Redis对象概述 1.1 对象的定义 2. 字符串对象 3. 列表对象 3.1 quicklist 快速链表 4. 哈希对象 5. 集合对象 6. 有序集合对象 7. Redis对 ...
随机推荐
- MongoDB及Mongoose的记录
MongoDB是一种NoSQL的文档型数据库,其存储的文档类型都是JSON对象. 在node.js中由于代码都是异步执行,且nosql也没有“事物”这一定义,所以日常使用中很难保证数据库操作的原子性. ...
- mongodb参数
启动命令 : mongod -port --dbpath data/ --logpath log/mongodb.log --fork ps -ef | grep momgod (查看是否启动成功) ...
- Debian9安装后的一些配置
第一步 修改源 su root vi /etc/apt/sources.list #建议先备份,不过系统好像有已经备份好的 加入国内源,保存 apt-get update #更新源 ...
- Angular中不同的组件间传值与通信的方法
主要分为父子组件和非父子组件部分. 父子组件间参数与通讯方法 使用事件通信(EventEmitter,@Output): 场景:可以在父子组件之间进行通信,一般使用在子组件传递消息给父组件: 步骤: ...
- 为什么禁止在 foreach 循环里进行元素的 remove/add 操作
首先看下边一个例子,展示了正确的做法和错误的错发: 这是为什么呢,具体原因下面进行详细说明: 1.foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数 ...
- EasyPOI校验实现返回错误信息及行号
IExcelModel 获取错误信息 public class ExcelVerifyEntity implements IExcelModel { private String errorMsg; ...
- django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: ...
出现此问题的解决方法: 在mysql中创建一个和settings.py里设置的mysql 'name'名字一样的数据库就可以了.
- UWP作业(一)XAML Controls Gallery
作为一个编程能力不是很好的uwp初学者,在控件库里看到种类繁多的选项时,需要查资料,最后决定出几种性能各方面可能不是那么出色的控件,内心也是非常纠结的.但当我把自己当成一个用户时,通过分析自己的需求, ...
- 别人的Linux私房菜(13)学习Shell脚本
CentOS6.x以前版本的系统服务启动接口在/etc/init.d/目录下,存放了脚本. Shell脚本因调用外部命令和bash 的一些默认工具,速度较慢,不适合处理大量运算. 执行方式有:直接命令 ...
- C++入门
<完美C++>第5版 (美)Walter Savitch,Kenrick Mock 萨维奇//默克 著 薛正华,沈庚,韦远科 译 出版社: 电子工业出版社 时间2019/4/11- ...