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对 ...
随机推荐
- Redis5种常用的数据结构
一.数据结构 五种常用的数据结构:string.hash.list.set.zse,以及三种不常用的:hyperloglog.geospatial.streams. 二.常用数据结构的使用 1.Str ...
- arr.sort()
var ary = [12,2,0,15,32,125,52,63,45,24]; /* * sort实现原理 每一次拿出数组中的当前项和后一项,每一次这样的操作都会让传递的匿名函数执行一次,不仅执行 ...
- Python建立时间事件引擎原理剖析
作为python小白,学习量化交易的曲线是非常陡峭的,唯一好的办法就是一点点啃代码.以下代码案例来自vnpy的引擎代码. # encoding: UTF-8 #定义时间事件 EVENT_TIMER = ...
- MongoDB学习记录(三) - MongoDB的"增查改删"操作之"查"
查找使用的方法: db.collection.find() 查找所有文档 db.collection.find({})或者db.collection.find({}) 指定键值对 db.collect ...
- 离线eclipse添加web工程
下载了eclipse,先写的后台程序,后来写前台程序的时候发现没有 新建->web dynamic project,如下方式添加: 帮助->安装新软件,在work with中选择版本对应的 ...
- 对于新版本的webstorm对vue的支持
webstorm 对于官方vue的支持,直到2017.1,这个版本,之后的版本不能直接安装vue插件,这时候就需要自己手动新建vue模板了
- CODEFORCES ROUND #740 ANALYSES BY TEAM:RED & BLACK
A.Alyona and copybooks Problems: 给你一个数n和代价分别为a, b, c.数量不限的1, 2, 3,求将n凑成4的倍数的最小代价 Analysis: cj:取个模随便凑 ...
- 欧拉函数-gcd-快速幂(牛客寒假算法基础集训营1-D-小a与黄金街道)
题目描述: 链接:https://ac.nowcoder.com/acm/contest/317/D来源:牛客网小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们拿 ...
- 使用tcpdump探测TCP/IP三次握手
读计算机应该就同说过TCP/IP三次握手,但是都没有去验证过,今天心血来潮,去验证了一下,于是乎写下了这篇博客,可能写的可能有问题,还请多多指教 包括我学习,还有从很多资料来看资料,第三次握手,应该会 ...
- wincc 用脚本记录日志
方法1: 在vbs脚本库里面添加 Sub LogTxt(message) Const ForReading = 1, ForWriting = 2, ForAppending = 8 Di ...