Redis系列(四):数据结构String类型中基本操作命令和源码解析
发布时间:2020-12-16 04:37:49 所属栏目:安全 来源:网络整理
导读:1.介绍 string类型本质上是char[]数组的封装? 中文网: http://www.redis.cn/commands.html#string ? 2.常用命令 set /get set命令的时间复杂度是O(1) 将键 key 设定为指定的“字符串”值。 如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并
1.介绍string类型本质上是char[]数组的封装? 中文网:http://www.redis.cn/commands.html#string? 2.常用命令set /getset命令的时间复杂度是O(1) 将键 如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。 当 SET key value [EX seconds] [PX milliseconds] [NX|XX]
? 127.0.0.1:6379> set myKey "Hello" OK get myKey " set userId 1 userId object encoding userId int encoding myKey embstrset myKey World NX (nil) myKey World XX OK 6379> ? NX :应用场景分布式锁:通过myKey的赋值来判断是否获取到了一个分布式锁? 如果OK说明获取到了锁 如果nil说明没有获取到了锁 如果存放到string中的value是int,那么在内部还是int ,可以从encoding redisObject中有一个type属性和encoding属性 ? 源码解析 redisCommand存放着所有的命令 {set",setCommand,-3,write use-memory @string0,NULL,1,1)">0}, ? ? ?setCommand源码 setCommand传入一个client结构体? 最后调用setGenericCommand函数来处理set /* SET key value [NX] [XX] [KEEPTTL] [EX <seconds>] [PX <milliseconds>] */ void setCommand(client *c) { int j; robj *expire = NULL; int unit = UNIT_SECONDS; int flags = OBJ_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[N') && (a[1] == xX') && a[2] == |