【Redis基础】五种数据类型
来源:互联网 发布:淘宝网信用卡网银支付 编辑:程序博客网 时间:2024/06/04 18:24
Redis的键值有5种数据类型,分别为字符串,散列表,列表,集合,有序集合,接下来我详细介绍
引入
1.redisObject
Redis中的每个对象都由一个redisObject结构表示
Redis对象redis.h/redisObject源码如下:
/* The actual Redis Object *//* * Redis 对象 */#define REDIS_LRU_BITS 24#define REDIS_LRU_CLOCK_MAX ((1<<REDIS_LRU_BITS)-1) /* Max value of obj->lru */#define REDIS_LRU_CLOCK_RESOLUTION 1000 /* LRU clock resolution in ms */typedef struct redisObject { // 类型 unsigned type:4; // 编码 unsigned encoding:4; // 对象最后一次被访问的时间 unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ // 引用计数 int refcount; // 指向实际值的指针 void *ptr;} robj;
接下来分析redisObject 的结构体内容
2.type
对象的type属性记录了对象的类型,一共有5种类型,如下图
3.encoding
对象的ptr指针指向对象的底层实现数据结构,而这些数据结构由encoding属性决定
encoding属性记录了对象所使用的编码。
不同类型和编码的对象如下图所示:
4.refcount
内存回收
Redis程序可以通过跟踪对象的引用计数值,在适当的时候进行内存回收。对象共享
两个相同的键指向同一个字符串对象,引用计数+1,这样更节约内存。
5.lru
对象的空转时长可以用Object idletime命令获取
字符串(String)
1.编码类型
int:保存整数值
raw:保存字符串值(长度>39字节)
embstr:保存短字符串的优化编码方式(字符串长度<=39字节),是只读的,修改时会先转换为raw。
注:使用embstr编码创建字符串对象只需内存分配一次,而raw需要两次;embstr编码释放字符串对象,只需要调用一次内存释放函数,而raw需要两次;并且embstr编码的字符串保存在一块连续的内存里面。
2.常用命令
列表(list)
1.编码类型
ziplist:当列表对象保存的字符串元素长度小于64字节,数量小于512个时,使用压缩表
linkedlist:不满足压缩表的条件,就使用链表。
2.常用命令
散列(Hash)
1.编码类型
ziplist:当哈希对象保存的字符串元素长度小于64字节,数量小于512个时,使用压缩表
HashTable:不满足ziplist的条件,就使用HashTable编码
2.常用命令
集合(Set)
1.编码类型
intset:当集合对象保存的所有元素都是整数值,且元素数量不超过512个时,使用intset
HashTable:不满足intset的条件,就使用HashTable
2.常用命令
有序集合(zset)
1.编码类型
ziplist:当有序集合对象的所有元素长度都小于64,且元素数量小于128时,使用ziplist
skiplist:不满足ziplist的条件时,使用skiplist编码
2.常用命令
本人才疏学浅,若有错,请指出,谢谢!
如果你有更好的建议,可以留言我们一起讨论,共同进步!
衷心的感谢您能耐心的读完本篇博文!
参考书籍:《Redis设计与实现(第二版)》—黄健宏
参考链接:Redis命令参考
- 【Redis基础】五种数据类型
- Redis五种数据类型
- 【Redis】五种数据类型
- redis 五种数据类型
- redis 五种数据类型
- Redis五种数据类型
- redis五种数据类型的使用
- Redis 五种数据类型的使用
- Redis中五种数据类型总结
- redis五种数据类型的使用
- redis五种数据类型的使用
- redis五种数据类型的使用
- redis五种数据类型的使用
- redis五种数据类型的使用
- Redis——五种数据类型
- Redis的五种数据类型
- Redis五种数据类型介绍
- Redis五种数据类型介绍
- MAVEN项目中添加jar包httpclient-4.3.5.jar,commons-logging-1.1.1.jar,httpcore-4.3.2.jar
- 表单提交方法
- 使用Spring MVC中的Interceptor和slf4j中的MDC实现日志归类标记
- [LeetCode]575. Distribute Candies
- jsf
- 【Redis基础】五种数据类型
- 猴子吃桃问题-JavaScript实现
- 关于MySQL--查询今天以及昨天、上个月等等
- 判断图片是否加载完毕
- 自定义listview holder 和adapter
- 公务员面试综合分析真题解析
- 奇数判断
- Break和continue用法
- Linux设备驱动ADC部分: