Redis-数据结构与对象-对象
1. 作用
Redis使用对象作为五种不同类型的底层实现,字符串,列表,哈希,集合,有序集合等
而对象是基于之前的分析的数据结构创建的。每个对象都至少用到一种数据结构,这意味着,Redis五大类型,底层实现是可以有多种实现的,这方便在不同场景下选择合适的底层结构,优化性能
在Redis中,键和值均为一个对象
2. 数据结构
typedef struct redisObject{
//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层实现数据结构的指针
void *ptr;
// 引用计数器
int refcount;
//最后访问时间
unsigned lru:32;
}
```
2.1. 类型
类型常量
对象名称
REDIS_STRING
字符串对象
REDIS_LIST
列表对象
REDIS_HASH
哈希对象
REDIS_SET
集合对象
REDIS_ZSET
有序集合对象
2.2. 编码和底层实现
编码常量
编码所对应的底层数据结构
REDIS_ENCODING_INT
long类型的整数
REDIS_ENCODING_EMBSTR
embstr编码的简单动态字符串
REDIS_ENCODING_RAW
简单动态字符串
REDIS_ENCODING_HT
字典
REDIS_ENCODING_LINKEDLIST
双端链表
REDIS_ENCODING_ZIPLIST
压缩列表
REDIS_ENCODING_INTSET
整数集合
REDIS_ENCODING_SKIPLIST
跳跃表和字典

可以从上图看出,Redis五大基本类型底层实现都不止一种
使用encoding属性设定对象所使用的编码方式,而不是特点类型关联一种编码,这样提升了Redis灵活性,特定场景可以选择合适的底层实现
来源:https://blog.csdn.net/qq_33330687/article/details/86527834
Redis-数据结构与对象-对象的更多相关文章
- 深入了解Redis【二】对象及数据结构综述
引言 Redis中每个键值对都是由对象组成: 键总是一个字符串对象(string) 值可以是字符串对象(string).列表对象(list).哈希对象(hash).集合对象(set).有序集合对象(z ...
- redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换
一. 概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...
- redis下操作hash对象
redis下操作hash对象 hash用于存储对象,对象的格式为键值对 命令 设置 设置单个属性 HSET key field value 设置多个属性 HMSET key field value [ ...
- redis是如何存储对象和集合的
在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术.前者主要是为了减轻数据库压力,大幅度提升性能.后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribb ...
- Redis数据结构底层知识总结
Redis数据结构底层总结 本篇文章是基于作者黄建宏写的书Redis设计与实现而做的笔记 数据结构与对象 Redis中数据结构的底层实现包括以下对象: 对象 解释 简单动态字符串 字符串的底层实现 链 ...
- Redis 数据结构与内存管理策略(上)
Redis 数据结构与内存管理策略(上) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
- Redis 数据结构与内存管理策略(下)
Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 Redis 数据类型特点与使用场景 String.Li ...
- Redis数据结构之intset
本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST ...
- Redis数据结构之robj
本文及后续文章,Redis版本均是v3.2.8 我们知道一个database内的这个映射关系是用一个dict来维护的.dict的key固定用一种数据结构来表达,这这数据结构就是动态字符串sds.而va ...
- Redis 数据结构之dict
上篇文章<Redis数据结构概述>中,了解了常用数据结构.我们知道Redis以高效的方式实现了多种数据结构,因此把Redis看做为数据结构服务器也未尝不可.研究Redis的数据结构和正确. ...
随机推荐
- CVE-2019-0708复现
本人在此申明: 此次复现仅供学习使用 不可用于非法用途 一切违法后果与本人无关 复现0708第一步 github下载exp Kali里面执行命令 wget https://raw.githubuser ...
- [CSP-S模拟测试]:A(单调栈维护凸包+二分答案)
题目传送门(内部题150) 输入格式 第一行两个整数$N,Q$. 接下来的$N$行,每行两个整数$a_i,b_i$. 接下来的$Q$行,每行一个整数$x$. 输出格式 对于每个询问,输出一行一个整数表 ...
- Android学习_注意事项
一. Fragment中加载ListView public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle ...
- Python2.x 里解决中文编码的万能钥匙
注意: Python2.x默认编码环境是ASCII,当和取回的数据编码格式不一致时,可能会造成乱码:我们可以指定保存内容的编码格式,一般情况下,我们可以在代码最上方添加 import sys relo ...
- debian、ubuntu安装mysql指定版本
因为在使用docker时,Debian中的mysql已变为mariadb,然后总是会出现一些错误,所以故想在debian上安装mysql5.7版本 1.访问https://dev.mysql.com/ ...
- WinPEter制作U盘启动盘
一.图说WinPE启动U盘的制作 1.首先将U盘插入电脑的USB接口(重要提示:制作过程U盘会被格式化,注意备份资料): 2.解压下载的WinPEU.rar文件: 3.在WinPEU.rar解压目录打 ...
- cmd ora-12560协议适配器错误
这个问题我解决了很久,其实问题的关键在于我在本机安装了一个Oracle11g数据库以及安装了一个Oracle Client,导致在使用sqlplus / as sysdba链接时出现报协议适配器的错误 ...
- 初写C#的小总结
虽然大学学过很多计算机语言,但是现在工作是前端,一个刚入行的前端菜鸟,之前对于后台完全零接触,但是最近有个项目,我也是第一次真正接触C#,中间遇到了一些小问题,就做个总结记录下,真的是超级简单的小知识 ...
- 解决ssh连接超时(ssh timeout)的方法
echo export TMOUT=1000000 >> /root/.bash_profile (可设置为-1为永不超时) cat /root/.bash_profile source ...
- mybatis工作流程
1)通过Reader对象读取src目录下的mybatis.xml配置文件(该文本的位置和名字可任意) 2)通过SqlSessionFactoryBuilder对象创建SqlSessionFactory ...