java redis生成序列号_java 自动生成redis缓存key

本文介绍了如何在Spring框架中自定义KeyGenerator,以生成包含应用名、类名、方法名和参数的键值,以提高缓存的精确性和可读性。关键代码展示了如何根据需求灵活配置是否添加应用名,并提供示例方法和应用场景。
摘要由CSDN通过智能技术生成

package com.gcyh.core.base.cache.spring;

import com.gcyh.core.base.log.Log;

import com.gcyh.core.base.log.LogFactory;

import com.gcyh.core.base.utils.ApplicationUtils;

import com.gcyh.core.base.utils.StringBuilderUtils;

import org.apache.commons.lang3.ArrayUtils;

import org.apache.commons.lang3.StringUtils;

import org.springframework.cache.interceptor.KeyGenerator;

import org.springframework.cache.interceptor.SimpleKeyGenerator;

import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**

* 键生成器

*

* @author zhengxinghua

*/

@Component

public class BaseKeyGenerator extends SimpleKeyGenerator implements KeyGenerator {

private static Log log = LogFactory.getLog(BaseKeyGenerator.class);

@Override

public Object generate(Object target, Method method, Object... params) {

return getKey(method, params);

}

/**

* @param name 名字

* @param params 参数

* @return 获取键值

*/

public static String getKey(String name, Object... params) {

return getKey(null, null, name, params);

}

/**

* @param isAddApplicationName 是否增加默认

* @param name 名字

* @param params 参数

* @return 获取键值

*/

public static String getKey(boolean isAddApplicationName, String name, Object... params) {

return getKey(null, isAddApplicationName, null, name, params);

}

/**

* @param clazz 调用类

* @param name 名字

* @param params 参数

* @return 获取键值

*/

public static String getKey(Class> clazz, String name, Object... params) {

return getKey(null, clazz, name, params);

}

/**

* @param applicationName 应用名

* @param clazz 调用类

* @param name 名字

* @param params 参数

* @return 获取键值

*/

public static String getKey(String applicationName, Class> clazz, String name, Object... params) {

return getKey(applicationName, true, clazz, name, params);

}

/**

* @param applicationName 应用名

* @param isAddApplicationName 是否增加默认

* @param clazz 调用类

* @param name 名字

* @param params 参数

* @return 获取键值

*/

public static String getKey(String applicationName, boolean isAddApplicationName, Class> clazz, String name, Object... params) {

if (StringUtils.isBlank(applicationName) && isAddApplicationName) {

applicationName = getApplicationName();

}

StringBuilder result = new StringBuilder();

if (StringUtils.isNotBlank(applicationName)) {

result.append(applicationName).append(":");

}

if (clazz != null) {

result.append(clazz.getSimpleName()).append(":");

}

if (StringUtils.isNotBlank(name)) {

result.append(name).append(":");

}

if (result.toString().length() > 0) {

StringBuilderUtils.deleteLastChar(result);

}

if (ArrayUtils.isNotEmpty(params)) {

result.append("[");

for (Object each : params) {

result.append(each.toString()).append(",");

}

StringBuilderUtils.deleteLastChar(result);

result.append("]");

}

if (result.length() == 0) {

log.error("键生成器生成的键值为null");

return null;

}

return result.toString();

}

/**

* @return 应用名

*/

public static String getApplicationName() {

return ApplicationUtils.getSystemCode();

}

private static String getKey(Method method, Object... params) {

Class> clazz = method.getDeclaringClass();

return getKey(clazz, method.getName(), params);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值