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

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

  • 相关阅读:
    Tomcat完美配置多个HOST主机,域名,SSL
    SpringCloud(10)使用Spring Cloud OAuth2和JWT保护微服务
    SpringCloud(9)使用Spring Cloud OAuth2保护微服务系统
    SpringCloud(8)微服务监控Spring Boot Admin
    React介绍
    SpringMVC-拦截器
    VSCode + WSL 2 + Ruby环境搭建详解
    Python中排序的灵活使用
    Linux中的进程与线程
    PHP-Phalcon框架中的数据库操作
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4826444.html
Copyright © 2011-2022 走看看