1. zadd
将一个或多个member和score加入到有序集合对应的key中
zadd key [nx|xx] [ch] [incr] score1 member1 score2 member2 ...
调用zaddCommand-->zaddGenericCommand
1.1 zaddGenericCommand
-
从第3个参数开始解析,参数循环,按位与到flag中
-
如果有nx,则只做添加
-
如果有xx,则只做修改
-
如果有ch,则将返回值为添加的数+已更新的计数
-
如果有incr,则使用指定元素增加指定分数
-
剩下的参数elements如果不能被2整除,则报错,把elements除以2
-
如果同时有nx和xx,则报错
-
如果同时有incr和elements>1,则报错
-
解析所有的score为double类型,赋值到scores中
-
在db中查找key对应的值对象
-
如果值对象为空,如果有xx则返回
-
如果最大ziplist节点数(128)为0或者第一个member长度大于64
-
则创建普通的zset(dict+skiplist)
-
否则创建ziplist型的zset
-
在db中添加键值对
-
如果值对象不为空,如果值对象不是zset类型,则返回
-
循环元素依次添加,获取score和、flag和ele(member)
-
调用zsetAdd函数进行添加或修改
-
如果返回标识是add,则add计数加1
-
如果返回标识是update,则update计数加1
-
如果返回标识是操作,则操作计数加1
-
更新服务器修改数据计数为add+update
1.2 zsetadd
-
如果score是空,则返回错误
-
如果值对象编码是ziplist,如果元素存在,如果是nx,则标志为不操作返回
-
如果是incr,则自增分值,如果分值为空则返回
-
如果分值增加,则先删除再新增,update计数+1
-
如果元素不存在,如果不是xx,则新增元素
-
如果ziplist节点数大于最大节点数(128),则转换值对象编码为skiplist
-
如果元素长度大于最大元素长度(64),则转换值对象编码为skiplist
-
更新add计数+1
-
如果值对象编码为skiplist,在值对象的dict中&#