文章目录
- 前言
- 一、Redis客户端结构体简介
- 二、字符串键函数
- 1.set系列函数
- 2.incr decr函数
- 三、列表键函数
- 1.添加元素函数
- 2.设置指定位置索引函数
- 3.获取列表范围元素的函数
- 四、哈希键函数
- 1.获取指定字段的值
- 2.获取哈希表容量
- 五、集合键函数
- 1.向集合添加元素
- 2.判断元素是否在集合内部
- 六、有序集合键函数
- 1.从有序集合删除元素
- 2.获取指定元素分值
- 总结
前言
前面已经了解到Redis包括五种类型的对象:字符串对象、列表对象、哈希对象、集合对象和有序集合对象。对象的底层由SDS、双向链表、压缩列表、跳表、词典和整数集合等数据结构实现。Redis是一个key-value类型的数据库。其中的key均为字符串对象,value可以是五种对象的任意一种,根据value类型不同将键值对称为某某键,如value是字符串对象时为字符串键。本节就简单介绍一下五种Redis键对应的一些操作API。
一、Redis客户端结构体简介
Redis为每一个客户端定义了redisClient 对象,包括客户端套接字,客户端输入的命令参数数目,和参数数组等。这样服务端就可以根据具体参数执行对应操作,并且将结果通过套接字返回给客户端。
代码语言:javascript复制typedef struct redisClient {
// 套接字描述符
int fd;
// 参数数量
int argc;
// 参数对象数组
robj **argv;
.....
} redisClient;
二、字符串键函数
字符串键是Redis中最常见的一些键,字符串键常见的命令有set get incr decr等,具体可见第一篇文章: https://blog.csdn.net/qq_37292982/article/details/112704295. 字符串键的相关代码在t_string.c中,现在选取部分API进行介绍。
1.set系列函数
set系列函数如下所示:
代码语言:javascript复制SET key value //设置key value,已经存在时覆盖
SETEX key seconds value //设置key value,已经存在时覆盖,
//并且设置过期时间
SETNX key value //只在key不存在时设置value
MSET key1 value1 key2 value2 //批量设置
Redis为所有set函数定义了统一入口setCommand,在这个函数内部分析函数参数,最后调用具体的set函数setGenericCommand。
代码语言:javascript复制/* SET key value [NX] [XX] [EX <seconds>] [PX <milliseconds>] */
void setCommand(redisClient *c) {
int j;
robj *expire = NULL;
int unit = UNIT_SECONDS;
int flags = REDIS_SET_NO_FLAGS;
// 设置选项参数
for (j = 3; j < c->argc; j ) {
char *a = c->argv[j]->ptr;
robj *next = (j == c->argc-1) ? NULL : c->argv[j 1];
if ((a[0] == 'n' || a[0] == 'N') &&
(a[1] == 'x' || a[1] == 'X') && a[2] == '