1. 程式人生 > 其它 >提升工作倖福指數工具類 實用redisKey管理工具類

提升工作倖福指數工具類 實用redisKey管理工具類

技術標籤:工具類javaredisjavaspring

問題:實際工作中經常遇到要使用redis配合的業務場景,那麼就避免不了定義redis的key,在實際業務中為了區分key經常需要對key進行業務拼接,如 user:info:id:123 。

遇到上述情況常規方案 虛擬碼如下:

// 定義常量redisKey
public static final String USER_INFO_ID= "user:info:id:";
// 將常量與變數拼接
String redisKey =USER_INFO_ID+"123";
// 使用拼接好的redisKey
String userInfo = stringRedisTemplate.opsForValue().get(redisKey);

這樣的使用場景如果頻發出現在程式碼中使後期維護、查詢問題都非常麻煩,關鍵是看起來又很醜。

解決方案:

1.使用工具類整合專案中的redisKey,做到統一管理,避免定義的key散落在程式碼各個角落。

2.使用JDK自帶的MessageFormat對要拼接的key進行整合處理,這樣可以清除程式碼中麻煩的拼接過程。

工具類如下:

package com.util.test;

import java.text.MessageFormat;

/**
 * @author :wbf
 * @desc:redisKey工具類
 */
public enum RedisKey {
    /**
     * 純字串的StringKey
     */
    TEST_STRING("test:string"),
    /**
     * 帶引數的key拼接
     */
    TEST_STRING_ID("test:string:id:{0}"),
    /**
     * 多個引數的key拼接
     */
    TEST_STRING_ID_NAME("test:string:id:{0}:{1}");

    private final String value;

    RedisKey(String value) {
        this.value = value;
    }

    /**
     * 獲取key
     * @param params
     * @return
     */
    public String getValue(Object... params) {
        return MessageFormat.format(value, params);
    }

    /**
     * 測試用例
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(RedisKey.TEST_STRING.getValue());
        System.out.println(RedisKey.TEST_STRING_ID.getValue("111"));
        System.out.println(RedisKey.TEST_STRING_ID_NAME.getValue("222","張三"));
    }
}

最後分享一個踩坑經驗:

1.專案中使用redis的場景如果不是資料量很大的需求(string型別控制在10KB以內,hash、list、set、zset元素個數不要超過5000)。

推薦使用StringRedisTemplate 不推薦RedisTemplate

RedisTemplate儲存時會對資料進行序列化成位元組陣列後再存入redis資料庫,這樣的好處是可以在一定程度上減少存入資料的體積,但是如果線上環境出現問題,就會發現在伺服器上使用redis命令列工具查出來的資料不能用於直接排查錯誤(一堆位元組碼)。

而資料體積不大的儲存需求直接使用StringRedisTemplate,在排查問題上優勢明顯,所存即所得。

原創文章,歡迎指正討論,如需轉載請標明出處。