提升工作倖福指數工具類 實用redisKey管理工具類
阿新 • • 發佈:2020-12-24
問題:實際工作中經常遇到要使用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,在排查問題上優勢明顯,所存即所得。
原創文章,歡迎指正討論,如需轉載請標明出處。