Java 项目里如何管理 redis key 的名字比较好?

是写一些 constant 类,用 public final static String 变量存 key 命名的固定部分?

譬如 read_book_by_user:user_id:3423211 那么

public class RedisKeyConstants{

      public final static String READ_BOOK_BY_USER = "read_book_by_user:user_id:";

}

用的时候

redisTemplate.opsForValue.get(READ_BOOK_BY_USER+user.getId());

这样是比较好的普遍做法吗?

阅读 16.2k
6 个回答
public enum RedisKeys {

    A("a"),
    B("b")
    //
    ;

    private String prefix;
    RedisKeys(String prefix) {
        this.prefix = prefix;
    }

    public String join(Object... args) {
        StringBuilder sb = new StringBuilder(prefix);
        for (Object arg : args) {
            sb.append(":").append(arg);
        }
        return sb.toString();
    }


    public static void main(String[] args) {
        System.out.println(RedisKeys.A.join("hello", 555));
        System.out.println(RedisKeys.B.join("hello", 555));
    }
}

目前我是这样做的.

写个KeyBuilder 返回个Rediskey类,
如果用Jedis的话一般会写个JedisUtils的类(网上很多都么做的也有源码),
把对应操作的String key换成Rediskey key
项目前缀和模块前缀都可以在KeyBuilder维护好。
KeyBuilder方法签名:

public Rediskey /*JedisUtils.*/keyBuilder(String module,String func,String... args){
        StringBuffer key = new StringBuffer(KEY_PREFIX);//KEY_PREFIX 为项目前缀
        key.append(KEY_SPLIT_CHAR).append(module).append(KEY_SPLIT_CHAR).append(func);
        for (String arg : args) {// KEY_SPLIT_CHAR 为分割字符
            key.append(KEY_SPLIT_CHAR).append(arg);
        }
        return new Rediskey(key.toString());
}

然后在Redis desktop manager之类的工具中设置分割字符为你项目中使用的.
Redis desktop manager的Key会按树型展示,非常方便, 不需要什么管理文档.

JedisUtils类参考

Rediskey key = JedisUtils.keyBuilder("sys","user","getByNo",User.getNo());// ASCMS:sys:user:getByNo:${no}
JedisUtils.set(key,JSON.toJSONString(User));

效果如下: ASCMS 是项目名, bd, sys是模块名, role, user是类名, 再下面的参数可以自定义

图片描述

我是写在配置文件里面

我现在的项目也写在properties里面了

遵照公司/项目 统一命名规范,易维护可读性强即可;

com.alibaba.dubbo.common.Constants
阿里的项目中是使用常量的方式

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题