数据结构 - 字符串(最常用的结构)
定义
简单动态字符串(SDS-simple dynamic string)
命令
SET 命令
SET key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL][NX|XX][GET]
说明:
EX -- 设置具体过期时间(单位:秒)
PX -- 设置具体过期时间(单位:毫秒)
EXAT -- 到xx时间有效(单位:秒)
PXAT -- 到xx时间有效(单位:毫秒)
NX -- 只有key不存在时才能设置
XX -- 只有key存在时才能设置
KEEPTTL -- 保留设置当前键的生存时间
GET -- 返回指定键原来的值,若键不存在则返回nil
GET 命令
GET key
说明:
获取键的值,如果键不存在则返回nil
如果键的值不是字符串则返回error
MSET 命令
MSET key value [key value]
说明:
设置多个键为指定的值,MSET会覆盖已存在键的值。如果不想覆盖已存在的值查看MSETNX命令
MSET是原子操作,所以所有的key会一次设置成功。
MGET 命令
MGET key [key ...]
说明:返回多个键的值,对于不包含字符串的每一个键都返回nil,基于此这个命令不会失败
SETEX 命令
SETEX key seconds value
说明:相当于 SET 命令 和 EXPIRE 命令集合
SETNX 命令
SETNX key value
说明:
键不存在时设置键值
SET if Not eXists
GETDEl 命令
GETDEL key
说明:获取指定键的值,并删除键
GETEX 命令
GETEX key [EX seconds|PX millisecondes|EXAT timestamp|PXAT milliseconds-timestamp|PERSIST]
说明:
获取指定键的值以及设置它的过期时间
EX seconds -- 设置过期时间,单位:秒
PX milliseconds -- 设置过期时间,单位:毫秒
EXAT timestamp -- 设置指定的Unix时间过期,单位:秒
PXAT milliseconds-timstamp -- 设置指定Unix时间过期,单位:毫秒
PERSIST -- 移除键关联的TTL
APPEND 命令
APPEND key suffix
说明:将给定的内容追加到字符串键已有值的末尾
02
数据结构 - 散列
说明
redis的散列键会将一个键和一个散列在数据库里关联起来,用户可以在散列中为任意多个字段(field)设置值
命令
HSET 命令
HSET key field value [field value ...]
说明:为散列中的指定字段设置值
HSETNX 命令
HSETNX key field value
说明:只有字段不存在时为它设置值
HGET 命令
HGET key field
说明:获取字段的值
HINCRBY 命令
HINCRBY key field increment
说明:对字段存储的整数值执行加法或减法操作
HINCRBYFLOAT 命令
HINCRBYFLOAT key field increment
说明:对字段存储的数字值执行浮点数加法或减法操作
HSTRLEN 命令
HSTRLEN key field
说明:获取字段值的字节长度
HEXISTS 命令
HEXISTS key field
说明:检查字段是否存在
HDEL 命令
HDEL key field
说明:删除字段
HLEN 命令
HLEN key
说明:获取散列包含的字段数量
HMSET 命令
HMSET key field value [field value ...]
说明:一次为多个字段设置值
HMGET 命令
HMGET key field [field ...]
说明:一次获取多个字段的值
HKEYS,HVALS,HGETALL
HKEYS keyHVALS keyHGETALL key
说明:
HKEYS 获取所有字段
HVALS 获取所有值
HGETALL 获取所有字段和值
03
数据结构 - 链表
链表节点定义:
typedef struct listNode {// 前置节点struct listNode * prev;// 后置节点struct listNode * next;// 节点的值void * value;}
双端链表
多个listNode可以通过prev和next指针组成双端链表

链表
虽然使用多个listNode结构可以组成链表,但使用adlist.h/list来持有链表的话,操作会更方便
typedef struct list {
表头节点
listNode * head;
表尾节点
listNode * tail;
链表所包含的节点数量
unsigned long len;
节点值复制函数
void *(*dup)(void *ptr);
节点值释放函数
void (*free)(void *ptr);
节点值对比函数
int (*match)(void *ptr, void *key);
}
list 与 listNode关系

命令
LPUSH 命令
LPUSH key item [item item ...]
说明:将元素推入列表左端
RPUSH 命令
RPUSH key item [item item .....]
说明:将元素推入列表右端
LPUSHX, RPUSHX 命令
LPUSHX key item [item item ...]RPUSHX key item [item item ...]
说明:只对已存在的列表执行推入操作
LPOP 命令
LPOP key [count]
说明:弹出count个列表最左端的元素
RPOP 命令
RPOP key [count]
说明:弹出count个列表最右端的元素
RPOPLPUSH 命令
RPOPLPUSH source target
说明:将右端弹出的元素推入左端
LLEN 命令
LLEN list
说明:获取列表的长度
LINDEX 命令
LINDEX key index
说明:获取指定索引上的元素
LRANGE 命令
LRANGE key start stop
说明:获取指定索引范围上的元素,包括start和stop索引对应的元素
LSET 命令
LSET key index element
说明:为指定索引设置新元素
LINSERT 命令
LINSERT key BEFORE|AFTER target_element element
说明:将元素插入指定元素的前面或后面
LTRIM 命令
LTRIM key start end
说明:修剪列表,移除列表中位于给定索引范围之外的所有元素
LREM 命令
LREM key count element
说明:从列表中移除指定元素
count :
count = 0, 移除列表中包含的所有指定元素
count > 0, lrem将从列表左端开始检查,并移除最先发现的count个指定元素
count < 0, lrem将从列表右端开始检查,并移除最先发现的abs(count)个指定元素
未完待续~~~
感谢大家阅读本篇文章,希望以上内容能对大家有所帮助。如果你有任何疑问或者建议,欢迎在评论区留言交流。同时,别忘了点击下方的 “在看” 和 “分享”,让更多的程序员朋友受益。后续我们还会分享更多精彩的编程知识和经验,敬请关注




