• 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,就改动了一个參数,其它在不变。而原本以为非常差,只有目的达到。

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

  • 相关阅读:
    反射创建对象
    DevExpress 日期输入框
    SsdlToSql10.tt文件内容
    ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
    DevExpress XtraCharts 图表导出PDF/XLS/JPEG
    Java中堆内存和栈内存详解(转)
    批量合并word文档
    java内部类总结(转)
    Java 之工厂方法和抽象工厂模式(转)
    Java GC 、引用
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4826444.html
Copyright © 2020-2023  润新知