在项目中大量使用zincrby命令。究其原因是统计一些统计指标的日志值,和需要返回到顺序topn。

通常情况下,。调用一次的指示器zincrby(zincrby default:type 1 typeA) 它将能够正常工作。

情况是因为日志生成的太快,redis cpu利用率常常100%。并且还丢数据。

能否够一次性添加多次指标的累计值。比方zincrby default:type 1 typeA 1 typeB 1 typeC 。

。。

,这样将多次通信压缩到一次通信中,肯定能提高处理能力。

无奈 zincrby仅仅支持4个參数,redis官方文档上写的清楚:

ZINCRBY key increment member

所以,想到了改动redis(2.4.17)源代码来实现我自己的功能。

打开redis.c源代码文件能够到 redis的支持的命令表。 部分内容例如以下,
struct redisCommand readonlyCommandTable[] = {
   {"get",getCommand,2,0,NULL,1,1,1},

    {"set",setCommand,3,REDIS_CMD_DENYOOM,NULL,0,0,0},

    {"setnx",setnxCommand,3,REDIS_CMD_DENYOOM,NULL,0,0,0},

    {"setex",setexCommand,4,REDIS_CMD_DENYOOM,NULL,0,0,0},

    {"append",appendCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},

    {"strlen",strlenCommand,2,0,NULL,1,1,1},
    。。。
    {"zincrby",zincrbyCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1}
}

这个版本号和2.6以上版本号命令參数有不同,可是前几个參数都是一致的,第一个表示命令keyword。第二个表示函数名。第三个表示输入參数个数,正数表示參数数仅仅能等于,负数表示參数个数至少等于。
因为zincrby命令指定的參数是4,看了一下兴许的实现代码,发现里面当參数大于4的时候也进行了处理。于是将4改为-4,然后make,进行測试。
 {"zincrby",zincrbyCommand,-4,REDIS_CMD_DENYOOM,NULL,1,1,1}
执行例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhpeXVhbl8yMDA3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

事实上源代码改动非常easy,就改动了一个參数,其它在不变。而原本以为非常差,只有目的达到。

版权声明:本文博主原创文章,博客,未经同意不得转载。

redis修改的源代码zincrby,hincrby命令的更多相关文章

  1. Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)

    Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...

  2. Redis 学习之路 (009) - Redis-cli命令最新总结

    资料来源: http://redisdoc.com/ http://redis.io/commands 连接操作相关的命令 默认直接连接  远程连接-h 192.168.1.20 -p 6379 pi ...

  3. Python操作redis系列以 哈希(Hash)命令详解(四)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...

  4. Redis散列(Hash)的相关命令

    散列 就像一个减配的Redis 内部及其类似Java的Map 内容就是key:value结构 hash类型在面向对象编程的运用中及其适合,因为它可以直接保存编程语言中的实体类关系 增 hset hse ...

  5. Redis笔记,安装和常用命令

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/96.html?1455870708 一.redis简单介绍 redis是N ...

  6. redis之常用Set和ZSet命令

    redis五种数据类型:String,Hash,List,Set,ZSet.五种数据类型各有优点,各司其职.最后两种数据类型Set和ZSet基本上是一种,ZSet就是给Set加了个排序而已(相当于加了 ...

  7. redis修改密码和更改端口

    Liunx下redis修改密码和更改端口 redis一个实例就是一个节点,每个节点分配一个端口号,每个节点对应一个redis.conf配置文件. redis默认配置的端口号是6379,假设现在要多配置 ...

  8. Redis中LIST列表的相关命令

    Redis中LIST列表的相关命令 添加 lpush 将一个或多个value插入到key的表头,如果存在多个value,那么各个value按从左到右的顺序依次插入表头 插入表头:意味着新插入的值在最前 ...

  9. Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性

    Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...

随机推荐

  1. Post数据到 https异常:基础连接已经关闭: 连接被意外关闭 解决办法

    POST数据到HTTPS站点的时候需要设置ServicePointManager类的ServerCertificateValidationCallback属性,并且在POST到https://pass ...

  2. 64位操作系统下用Microsoft.Jet.OLEDB.4.0出现未注册错误

    在WIN7 64位下用Microsoft.Jet.OLEDB.4.0方法访问数据库Access,出现未注册错误 如果是要建立64位的应用程序 1.Microsoft Access Database E ...

  3. JAVA 统计字符串中中文,英文,数字,空格的个数

    面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...

  4. VIM 初步

    按i前插入字符.a在光标后追加字符 ctrl+d将光标下称半个窗体.按Ctrl+u将光标上移半个窗体 在输入模式下:ctrl+h删除字符,ctrl+u删除行.ctrl+w删除字 命令模式下.x删除字符 ...

  5. 关于sql中去换行符的问题

    今天要用bootstrap开发一个网页,要使用到JSON,但是JSON的格式不正确,然后在http://www.bejson.com/[Be JSON]中测试了一下JSON. 发现JSON中多了一个换 ...

  6. AndroidMainifest标签说明2——<activity>

    格公式: <activity android:allowTaskReparenting=["true" | "false"] android:always ...

  7. apk反编译工具-apktool

    apk很easy被反编译,关于这篇文章apktool反编译工具. (一)优势反编译 1.能学习别人优秀代码 看看优秀apk他们的string.color命名规则,看看布局排版等都能学习到东西. 2.进 ...

  8. 阿里巴巴2014研发project师实习生面试经历

    java研发project师的初面是在上周三进行的,终于结果到了晚上才出,而没有通过的则是一结束网上就更新了状态.之后阿里通知这周三,也就是今天进行二面. 凑巧的是今早被舍友吵醒,中午那个困啊,但没时 ...

  9. error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file

    安装rac10g,出现例如以下错误: [root@rac2 oracle]# /u01/product/crs/root.sh WARNING: directory '/u01/product' is ...

  10. HDOJ 3966 Aragorn&#39;s Story

    树链拆分+树阵 (进入坑....) Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/327 ...