1.redis常用数据结构
https://www.jianshu.com/p/674c9635b2b9
- 字符串·
- 哈希表
- 列表
- 集合
- 有序集合
1.1字符串
简单动态字符串(SDS)
flags为了选着
// flags值定义
#define SDS_TYPE_5 0
#define SDS_TYPE_8 1
#define SDS_TYPE_16 2
#define SDS_TYPE_32 3
#define SDS_TYPE_64 4
压缩列表
压缩列表(ziplist)是为了节约内存而设计的,是由一系列特殊编码的连续内存块组成的顺序性(sequential)数据结构,一个压缩列表可以包含多个节点,每个节点可以保存一个字节数组或者一个整数值
压缩列表是列表(List)和散列(Hash)的底层实现之一,一个列表只包含少量列表项,并且每个列表项是小整数值或比较短的字符串,会使用压缩列表作为底层实现(在3.2版本之后是使用quicklist实现)
类型 编码 BOJECT ENCODING 命令输出 对象
REDIS_STRING REDIS_ENCODING_INT “int” 使用整数值实现的字符串对象
REDIS_STRING REDIS_ENCODING_EMBSTR “embstr” 使用embstr编码的简单动态字符串实现的字符串对象
REDIS_STRING REDIS_ENCODING_RAW “raw” 使用简单动态字符串实现的字符串对象
REDIS_LIST REDIS_ENCODING_ZIPLIST “ziplist” 使用压缩列表实现的列表对象
REDIS_LIST REDIS_ENCODING_LINKEDLIST ‘"linkedlist’ 使用双端链表实现的列表对象
REDIS_HASH REDIS_ENCODING_ZIPLIST “ziplist” 使用压缩列表实现的哈希对象
REDIS_HASH REDIS_ENCODING_HT “hashtable” 使用字典实现的哈希对象
REDIS_SET REDIS_ENCODING_INTSET “intset” 使用整数集合实现的集合对象
REDIS_SET REDIS_ENCODING_HT “hashtable” 使用字典实现的集合对象
REDIS_ZSET REDIS_ENCODING_ZIPLIST “ziplist” 使用压缩列表实现的有序集合对象
REDIS_ZSET REDIS_ENCODING_SKIPLIST “skiplist” 使用跳跃表表实现的有序集合对象
会fork一个子线程
redis单线程是reactor(NIO)单线程
redis为什么快
1.基于内存的kv,比磁盘
2.redis单线程是reactor(NIO)单线程
3.数据结构
缓存一致性
- 延时双删
- MySQL,像一个slave,redolog,阿里中间件cancel
- 消息队列