redis常见的数据类型及其底层结构和应用场景
redis知识归纳
redis有如下几种数据类型
类型常量 | 对象 |
---|---|
REDIS_STRING | 字符串对象 |
REDIS_LIST | 列表对象 |
REDIS_HASH | 哈希对象 |
REDIS_SET | 集合对象 |
REDIS_ZSET | 有序集合对象 |
对于redis保存的键值来说,键总是一个字符串对象,值可以是其他类型
每种类型其实不仅限于一种数据结构,例如哈希集合有压缩列表的实现,也有哈希表的实现,这个取决于编码类型encoding
不同的编码类型对应不同的数据结构
编码类型 | 底层数据结构 |
---|---|
REDIS_ENCODING_INT | long类型的整数 |
REDIS_ENCODING_EMBSTR | embstr编码的简单动态字符串(SDS) |
REDIS_ENCODING_RAW | 简单动态字符串(SDS) |
REDIS_ENCODING_HT | 字典 |
REDIS_ENCODING_LINKEDLIST | 双端链表 |
REDIS_ENCODING_ZIPLIST | 压缩列表 |
REDIS_ENCODING_INTSET | 整数集合 |
REDIS_ENCODING_SKIPLIST | 跳表和字典 |
而每种对象会对应不止一种编码方式
如下表:
类型常量 | 编码方式 | 底层数据结构 |
---|---|---|
REDIS_STRING | REDIS_ENCODING_INT | 使用整数实现的字符串 |
REDIS_STRING | REDIS_ENCODING_EMBSTR | 使用embstr编码的SDS实现的字符串 |
REDIS_STRING | REDIS_ENCODING_RAW | 使用SDS实现的字符串 |
REDIS_LIST | REDIS_ENCODING_ZIPLIST | 使用压缩列表实现的列表 |
REDIS_LIST | REDIS_ENCODING_LINKEDLIST | 使用双端链表实现的列表 |
REDIS_HASH | REDIS_ENCODING_ZIPLIST | 使用压缩列表实现的哈希 |
REDIS_HASH | REDIS_ENCODING_HT | 使用字典实现的哈希 |
REDIS_SET | REDIS_ENCODING_INTSET | 使用整数集合实现的集合 |
REDIS_SET | REDIS_ENCODING_HT | 使用字典实现的集合 |
REDIS_ZSET | REDIS_ENCODING_ZIPLIST | 使用压缩列表实现的有序集合 |
REDIS_ZSET | REDIS_ENCODING_SKIPLIST | 使用跳表和字典实现的有序集合 |
总结
如果一个字符串用来表示整数的时候,保存的形式是long,会将字符串转化为整型保存 其他情况字符串一般是使用SDS(简单动态字符串)表示
列表可以是压缩列表或者是双端链表
哈希可以是压缩列表或者是字典
集合可以是整数集合或者是字典
有序集合可以是压缩列表或者是跳表
对于底层数据结构的详细介绍在这里
相关文章
- 3xx HTTP状态码的终极指南
- React报错之React.Children.only expected to receive single React element child
- React报错之Element type is invalid
- React报错之Too many re-renders
- React报错之Function components cannot have string refs
- 如何发布一个 TypeScript 编写的 npm 包
- 如何使用zx编写shell脚本
- 13个构建RESTful API的最佳实践
- 什么是REST API
- React报错之Rendered more hooks than during the previous render
- 如何使用CSS伪类选择器
- React报错之Property 'value' does not exist on type EventTarget
- React报错之Parameter 'event' implicitly has an 'any' type
- React报错之Parameter 'props' implicitly has an 'any' type
- React报错之Property 'value' does not exist on type 'HTMLElement'
- React报错之You provided a `checked` prop to a form field
- React报错之Invalid hook call
- React报错之React hook 'useState' cannot be called in a class component
- React报错之React Hook 'useEffect' is called in function
- React报错之React hook 'useState' is called conditionally