redis incr和incrBy的使用

 最近用incr和incrBy在接口裏做了下埋點統計每天請求總數,這兩個命令還是挺好用的,先說下這倆命令吧

注:redis後臺服務是串行的單線程執行,不存在併發,即多線程調用Incr/incrby方法,在redis服務器上仍然是串行的單線程執行,不存在併發,所以這倆命令都是原子自增、線程安全的。

1、Incr 命令 (菜鳥教程)

Redis Incr 命令將 key 中儲存的數字值增一。

如果 key 不存在,那麼 key 的值會先被初始化爲 0 ,然後再執行 INCR 操作。

如果值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。

 

2、Redis Incrby 命令

Redis Incrby 命令將 key 中儲存的數字加上指定的增量值。

如果 key 不存在,那麼 key 的值會先被初始化爲 0 ,然後再執行 INCRBY 命令。

如果值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤。

本操作的值限制在 64 位(bit)有符號數字表示之內。

3、實現按天統計的思路

     以你自定義的字符串+當前年月日 作爲key ;例: 

public static final String BATCH_COMMIT_DAY_COUNT="test:wugui:";
public static String getCurrentDate() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return simpleDateFormat.format(new Date());
    }

 

redisClient.incr(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate());//redis的key

    當然我並沒有爲這個key用expire設置超時時間,因爲我需要保留每天的統計;

    incrBy 可以在現有值的基礎上累加你的增量值,比如你要在一個批量審覈接口裏統計每天批量審覈的所有人數,例:

 redisClient.incrBy(BATCH_COMMIT_DAY_COUNT + DateUtil.getCurrentDate(), 63l);

 注意redis的  incrBy 第二個參數是long類型,不是參數名的integer.....

public Long incrBy(final String key, final long integer) {
    checkIsInMultiOrPipeline();
    client.incrBy(key, integer);
    return client.getIntegerReply();
  }

4、總結

   除了簡單計數,還可以實現控制用戶單位時間內請求等,可根據業務需求靈活運用;

  有興趣可以參考下這位朋友的博客,簡單實用 https://blog.csdn.net/Roy_70/article/details/78260826

   

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章