提升工作幸福指数工具类 实用redisKey管理工具类

问题:实际工作中经常遇到要使用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,在排查问题上优势明显,所存即所得。

原创文章,欢迎指正讨论,如需转载请标明出处。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值