Springboot统一给redisKey加前缀
时间: 2024-09-09 14:11:29 浏览: 55
在Spring Boot中统一给Redis的key加前缀,可以通过实现`KeyPrefix`接口来完成。`KeyPrefix`接口通常包含一个`expireSeconds`方法和一个`getPrefix`方法。`expireSeconds`方法返回该key的过期时间,`getPrefix`方法返回该key的前缀字符串。
以下是一个简单的示例来说明如何实现这个接口并统一给所有的Redis key加上前缀:
1. 定义一个`KeyPrefix`接口:
```java
public interface KeyPrefix {
// 过期时间,单位为秒
int expireSeconds();
// 返回key的前缀
String getPrefix();
}
```
2. 实现这个接口:
```java
public class MyKeyPrefix implements KeyPrefix {
// 默认的过期时间为60秒
private int expireSeconds;
// key的前缀
private String prefix;
public MyKeyPrefix(int expireSeconds, String prefix) {
this.expireSeconds = expireSeconds;
this.prefix = prefix;
}
@Override
public int expireSeconds() {
return expireSeconds;
}
@Override
public String getPrefix() {
// 保证前缀的唯一性,可以在前缀中加入一些自定义的值,例如当前类名或者线程名称等
return prefix + ":";
}
}
```
3. 在使用RedisTemplate或StringRedisTemplate进行操作时,可以通过继承`MyKeyPrefix`类来创建key的前缀:
```java
public class MyRedisKeyPrefix extends MyKeyPrefix {
public MyRedisKeyPrefix(String prefix) {
// 过期时间可以根据需要自定义
super(600, prefix);
}
}
```
4. 在实际使用时,比如在Service层中,可以通过`MyRedisKeyPrefix`实例化得到具体的key前缀,并结合具体的业务逻辑生成key:
```java
@Service
public class RedisService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void set(String key, String value, MyRedisKeyPrefix keyPrefix) {
String realKey = keyPrefix.getPrefix() + key;
redisTemplate.opsForValue().set(realKey, value, keyPrefix.expireSeconds(), TimeUnit.SECONDS);
}
// 其他的操作...
}
```
这样,每次在进行Redis操作时,都会自动地给key加上了自定义的前缀。
阅读全文