Redis数据结构String、Hash、List、Set、SortedSet及相关操作
String
简单动态字符串(SDS),这种结构更像C++的String或者Java的ArrayList
struct sdshdr {
// buf 中已占用空间的长度
int len;
// buf 中剩余可用空间的长度
int free;
// 数据空间
char buf[];
};
String是Redis中最简单的一种数据结构,即Key-Value型的数据,根据Redis官方文档,Value最大值为512M。
String数据结构的基本操作 | ||
---|---|---|
命令 | 描述 | 用法 |
SET | 将字符串值Value关联到Key Key已关联则覆盖,无视类型 原本Key带有生存时间TTL,那么TTL被清除 |
SET key value [EX 秒数] [PX 毫秒] [NX|XX] |
GET | 返回key关联的字符串值 Key不存在返回nil Key存储的不是字符串,返回错误,因为GET只用于处理字符串 |
GET key |
MSET | (1)同时设置一个或多个Key-Value键值对 (2)某个给定Key已经存在,那么MSET新值会覆盖旧值 (3)如果上面的覆盖不是希望的,那么使用MSETNX命令,所有Key都不存在才会进行覆盖 (4)MSET是一个原子性操作,所有Key都会在同一时间被设置,不会存在有些更新有些没更新的情况 |
MSET key value [key value …] |
MGET | (1)返回一个或多个给定Key对应的Value (2)某个Key不存在那么这个Key返回nil |
MGET key [key …] |
SETEX | (1)将Value关联到Key (2)设置Key生存时间为seconds,单位为秒 (3)如果Key对应的Value已经存在,则覆盖旧值 (4)SET也可以设置失效时间,但是不同在于SETNX是一个原子操作,即关联值与设置生存时间同一时间完成 |
SETEX key seconds value |
SETNX | (1)将Key的值设置为Value,当且仅当Key不存在 (2)若给定的Key已经存在,SEXNX不做任何动作 |
SETNX key value |
List
List对象的底层实现是quicklist(快速列表,是ziplist 压缩列表 和linkedlist 双端链表 的组合)。Redis中的列表支持两端插入和弹出,并可以获得指定位置(或范围)的元素,可以充当数组、队列、栈等。
Hash
Hash对象的底层实现可以是ziplist(压缩列表)或者hashtable(字典或者也叫哈希表)。
Hash对象只有同时满足下面两个条件时,才会使用ziplist(压缩列表):
1.哈希中元素数量小于512个;
2.哈希中所有键值对的键和值字符串长度都小于64字节。
hashtable哈希表可以实现O(1)复杂度的读写操作,因此效率很高。源码如下:
Set
Set集合对象的底层实现可以是intset(整数集合)或者hashtable(字典或者也叫哈希表)。
intset(整数集合)当一个集合只含有整数,并且元素不多时会使用intset(整数集合)作为Set集合对象的底层实现。