区分多个项目Redis缓存
框架对Redis缓存功能进行了增强,可区分部署多个项目(连接同一个Redis),主版本RSP框架已包含此功能,老版本框架若要使用,请进行如下操作,集成功能:
# 一. 后端
# 1. 修改CacheConstants.java
代码位于[项目]-common模块,com.risun.common.constant包下,加入代码
// project 替换为项目的名称,例如:npc:
public static final String SYS_KEY = "project:";
# 2. 新增RedisKeySerializer.java
在[项目]-framework模块,com.risun.framework.config包下,创建RedisKeySerializer.java
package com.risun.framework.config;
import java.nio.charset.Charset;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import com.risun.common.constant.CacheConstants;
@Component
public class RedisKeySerializer implements RedisSerializer<String> {
private final Charset charset;
public RedisKeySerializer() {
this(Charset.forName("UTF8"));
}
public RedisKeySerializer(Charset charset) {
Assert.notNull(charset, "字符集不允许为NULL");
this.charset = charset;
}
@Override
public byte[] serialize(String string) throws SerializationException {
return new StringBuilder(CacheConstants.SYS_KEY).append(string).toString().getBytes(charset);
}
@Override
public String deserialize(byte[] bytes) throws SerializationException {
return (bytes == null ? null : new String(bytes, charset));
}
}
# 3. 修改RedisConfig.java
代码位于[项目]-framework模块,com.risun.framework.config包下,进行如下修改
- public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
+ public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory, RedisKeySerializer redisKeySerializer)
- template.setKeySerializer(new StringRedisSerializer());
+ template.setKeySerializer(redisKeySerializer);
- template.setHashKeySerializer(new StringRedisSerializer());
+ template.setHashKeySerializer(redisKeySerializer);
# 4. 修改CacheController.java
代码位于[项目]-admin模块,com.risun.web.controller.monitor包下,进行如下修改
- CACHES.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
- CACHES.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
- CACHES.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
- CACHES.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
- CACHES.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
- CACHES.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
- CACHES.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.SYS_CONFIG_KEY, "配置信息"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.SYS_DICT_KEY, "数据字典"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.RATE_LIMIT_KEY, "限流处理"));
+ CACHES.add(new SysCache(CacheConstants.SYS_KEY + CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
# 5. 修改SysCache.java
代码位于[项目]-system模块,com.risun.system.domain包下,进行如下修改
public SysCache(String cacheName, String cacheKey, String cacheValue) {
- this.cacheName = StringUtils.replace(cacheName, ":", "");
+ this.cacheName = cacheName.split(":")[1];
...
}
# 二. 前端
修改[项目]-ui/src/views/monitor/cache/list.vue,修改内容如下:
// 修改 nameFormatter(row) 方法
// 将 return row.cacheName.replace(":", "");
// 修改为
return row.cacheName.split(":")[1];