https://github.com/antirez/redis/blob/6a6471aad5e4f8d6cbab677b918b14cdee416296/src/t_zset.c

    /* Update the sorted set according to its encoding. */
if (zobj->encoding == OBJ_ENCODING_ZIPLIST) {
unsigned char *eptr; if ((eptr = zzlFind(zobj->ptr,ele,&curscore)) != NULL) {
/* NX? Return, same element already exists. */
if (nx) {
*flags |= ZADD_NOP;
return 1;
} /* Prepare the score for the increment if needed. */
if (incr) {
score += curscore;
if (isnan(score)) {
*flags |= ZADD_NAN;
return 0;
}
if (newscore) *newscore = score;
} /* Remove and re-insert when score changed. */
if (score != curscore) {
zobj->ptr = zzlDelete(zobj->ptr,eptr);
zobj->ptr = zzlInsert(zobj->ptr,ele,score);
*flags |= ZADD_UPDATED;
}
return 1;
} else if (!xx) {
/* Optimize: check if the element is too large or the list
* becomes too long *before* executing zzlInsert. */
zobj->ptr = zzlInsert(zobj->ptr,ele,score);
if (zzlLength(zobj->ptr) > server.zset_max_ziplist_entries)
zsetConvert(zobj,OBJ_ENCODING_SKIPLIST);
if (sdslen(ele) > server.zset_max_ziplist_value)
zsetConvert(zobj,OBJ_ENCODING_SKIPLIST);
if (newscore) *newscore = score;
*flags |= ZADD_ADDED;
return 1;
} else {
*flags |= ZADD_NOP;
return 1;
}

  

最新文章

  1. 如何使用Dubbo服务和集成Spring
  2. Linux 查看服务器开放的端口号
  3. Xcode Pod使用
  4. String类型中ToString hashCode equals compareTo等方法的经典实现
  5. Struts2几种传值
  6. PR 创建
  7. Android5.0之NavigationView的使用
  8. linux 服务器更主板后无法识别网卡处理过程
  9. Tomcat 服务器的端口号的修改
  10. c++ 文件读写(转)
  11. BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
  12. intellij idea 学习
  13. pureMVC简单示例及其原理讲解二(Model层)
  14. adb不是内部或外部命令
  15. 剑指offer-第一个只出现一次的字符
  16. map集合的常用方法
  17. verilog中signed的使用
  18. JS所包含的大纲内容,以及JS中数据类型、运算符的介绍
  19. eclipse使用和快捷键
  20. django 认证系统--3

热门文章

  1. Quatz入门
  2. 利用广播实现ip拨号——示例
  3. python3.5 中Django框架连接mysql
  4. js 获取ISO-8601格式时间字符串的时间戳
  5. 使用Postfix和Dovecot收发电子邮件
  6. 为啥RESTFULL如此重要?
  7. Kafka Java consumer动态修改topic订阅
  8. 深入浅出MongoDB应用实战开发
  9. STL——序列式容器
  10. Android设置横屏竖屏