1.Redis对象数据类型
String: 字符串
list: 列表
set: 去重集合
zset: 有序列表
hash: 字典
2.编码类型
encoding常量 | 底层的数据结构 |
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 | 跳表和字典 |
String类型对象所对应的编码:
REDIS_ENCODING_INT | long类型的整数 |
REDIS_ENCODING_EMBSTR | embstr编码的简单字符串 |
REDIS_ENCODING_RAW | 简单动态字符串 |
list类型对象对应的编码:
REDIS_ENCODING_LINKEDLIST | 双项链表 |
REDIS_ENCODING_ZIPLIST | 压缩列表 |
set类型对象对应的编码:
REDIS_ENCODING_HT | 字典 |
REDIS_ENCODING_INTSET | 整数集合 |
zset类型对象对应的编码:
REDIS_ENCODING_ZIPLIST | 压缩列表 |
REDIS_ENCODING_SKIPLIST | 跳表和字典 |
hash类型对象对应的编码:
REDIS_ENCODING_HT | 字典 |
REDIS_ENCODING_ZIPLIST | 压缩列表 |
3.String类型对象
常用命令
编码类型:
1.int: long类型整数
2.embstr: 适用于当存入的值小于等于40个字节的字符串,该编码仅可读模式,对使用append 命令对值进行修改时,无论当前字符串的长度为多少,其内部编码都将转换为raw
3.raw: 存入的字符串超过44个字节时将转换为raw编码
embstr:效率快,通过一次内存分配函数,来分配一块连续的空间包含redisObject,sdshdr
raw: 通过两次内存分配函数,分别来创建redisObject,sdshdr
4.list类型对象
常用命令:
列表操作:
编码类型:
1.ziplist(压缩列表): 当元素长度不超过512或者单个元素的大小不超过64字节,list类型的键值对就会使用ziplist作为内部编码,在对应的配置文件中也可以调整对应的阈值
2.linkedlist(双项链表): 当元素长度超过512或单个元素长度超过64时,键值对就会采用linkedlist作为其内部编码
5.set类型对象
常用命令:
编码类型
1.intset: 当存入集合的成员都是整数并且成员数不超过512条时,其内部编码使用intset
2.hashtable: 当存入集合的数据不满足intset的条件时将自动转换为hashtable,每个键都是String类型,对应的value都为NULL
6.zset类型对象
常用命令:
编码类型:
ziplist: 默认当存入集合的成员数不超过128个且成员的最大字节数不超过64时,使用的ziplist的内部编码
skiplist(跳表): 当不满足设定的阈值时,zset的内部编码将自动转换为skiplist
6.hash类型对象
常用命令:
编码类型:
1.ziplist: 当hash类型中每个value的长度不超过64字节,并且filed-value长度不超过512
2.hashtable: 当ziplist编码的hash类型键值对超过任一阈值时,其内部编码就会转换为hashtable
7.RDB
redis一种持久化机制,支持手动和服务器定时自动执行,执行之后产生一个二进制文件保存的数据,然后再服务器启动的时候把二进制文件加载到服务器
手动: save/bgsave
自动保存时机:
redis.conf中默认配置
save 900 1 ==> 900秒以内执行了一次修改,进行RDB保存 save 300 10 --> 300秒10次修改 save 60 10000 ==> 60秒10000次修改
8.AOF(Append Only File)
记录redis命令来记录数据库(redis服务器)的变更
redis.conf中默认关闭状态
写入流程: 用户在写入的时候,会将数据先写入缓冲区中
AOF备份缓冲区数据
appendfsync everysec: 每秒将aof_buf中的数据保存到AOF文件中
AOF重写
为了避免执行多条无效的命令,就可以实现数据的还原
执行流程: