redis源碼修改之zincrby,hincrby命令

來源:互聯網
上載者:User

標籤:redis nosql zincrby

在項目中大量使用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以上版本命令參數有不同,但是前幾個參數都是一致的,第一個表示命令關鍵字,第二個表示函數名,第三個表示輸入參數個數,正數表示參數數只能等於,負數表示參數個數至少等於。由於zincrby命令指定的參數是4,看了一下後續的實現代碼,發現裡面當參數大於4的時候也進行了處理,於是將4改為-4,然後make,進行測試。 {"zincrby",zincrbyCommand,-4,REDIS_CMD_DENYOOM,NULL,1,1,1}
運行如下:

其實源碼修改很簡單,就修改了一個參數,其他的都沒動,和原來想的差很多,不過目的達到了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.