• redis修改的源代码zincrby,hincrby命令


    在项目中大量使用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}
    执行例如以下:


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

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

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4826444.html
Copyright © 2020-2023  润新知