Skip to content

Redis Wrapper 类使用指南

核心类架构

RedisTemplateStringKeyWrapper (基类 - Key前缀处理)

RedisTemplateFastOperationsWrapper (快速操作)

    ├── RedisTemplateEmptyWrapper     (空前缀)
    ├── RedisTemplatePrivateWrapper   (应用级前缀 - 推荐)
    └── RedisTemplatePublicWrapper    (公共数据前缀)

RedisTemplatePrivateWrapper(推荐)

用途:应用级私有缓存,Key 自动带应用名前缀(如 myapp:

使用示例

java
@Service
public class UserService {
    
    @Autowired
    private RedisTemplatePrivateWrapper redisTemplatePrivateWrapper;
    
    public void setUserCache(String userId, User user) {
        // Key 最终为: "myapp:user:123" (假设应用名为 myapp)
        redisTemplatePrivateWrapper.boundValueOps("user:" + userId).set(user, 3600, TimeUnit.SECONDS);
    }
    
    public User getUserCache(String userId) {
        return (User) redisTemplatePrivateWrapper.boundValueOps("user:" + userId).get();
    }
    
    public void deleteUserCache(String userId) {
        redisTemplatePrivateWrapper.delete("user:" + userId);
    }
}

RedisTemplatePublicWrapper

用途:公共数据缓存,Key 自动带 pub-dat: 前缀

使用示例

java
@Service
public class DictService {
    
    @Autowired
    private RedisTemplatePublicWrapper redisTemplatePublicWrapper;
    
    public void setDictCache(String dictCode, List<DictItem> items) {
        // Key 最终为: "pub-dat:dict:STATUS"
        redisTemplatePublicWrapper.boundValueOps("dict:" + dictCode).set(items, 7200, TimeUnit.SECONDS);
    }
    
    public List<DictItem> getDictCache(String dictCode) {
        return (List<DictItem>) redisTemplatePublicWrapper.boundValueOps("dict:" + dictCode).get();
    }
}

RedisTemplateEmptyWrapper

用途:不需要前缀的场景,或作为空操作占位

使用示例

java
@Service
public class SystemService {
    
    @Autowired
    private RedisTemplateEmptyWrapper redisTemplateEmptyWrapper;
    
    public void setGlobalConfig(String key, String value) {
        // Key 保持原样: "global:config"
        redisTemplateEmptyWrapper.boundValueOps("global:config").set(value);
    }
}

RedisTemplateFastOperationsWrapper

用途:提供快速操作方法,一般不直接实例化,而是通过子类使用其方法

常用快速方法

java
// Value 操作
Object value = wrapper.valueGet("key");
wrapper.valuePut("key", value, 3600L);  // 带过期时间(秒)

// Hash 操作
Map<String, Object> entries = wrapper.hashEntriesGet("hashKey");
wrapper.hashPutAll("hashKey", map, 3600L);
wrapper.hashEntryAppend("hashKey", "field", value, 3600L);

// List 操作
List<Object> list = wrapper.listValuesGet("listKey");
wrapper.listPutAll("listKey", values, 3600L);

// Set 操作
Set<Object> set = wrapper.setValuesGet("setKey");
wrapper.setPutAll("setKey", values, 3600L);

// JSON 操作
wrapper.beanJsonPut("key", bean, 3600L);
MyBean bean = wrapper.beanFromJsonGet("key", MyBean.class);

RedisTemplateStringKeyWrapper

用途:提供 Key 前缀处理核心能力

Key 前缀相关方法

java
// 获取当前前缀
String prefix = wrapper.getKeyPerfix();  // 如 "myapp:"

// 手动包装 Key(当使用 opsForXxx 返回的操作对象时需要手动调用)
String wrappedKey = wrapper.keyPerfixWrapper("user:123");  // 返回 "myapp:user:123"

// 批量包装 Key
List<String> wrappedKeys = wrapper.listKeysPerfixWrapper(Arrays.asList("key1", "key2"));

注意:使用 opsForValue()opsForHash() 等返回的操作对象时,不会自动添加前缀,需要手动调用 keyPerfixWrapper()

java
// 不推荐:这样 Key 不会带前缀
ValueOperations<String, Object> ops = wrapper.opsForValue();
ops.set("key", value);  // Key 就是 "key"

// 推荐:使用 boundXxxOps 或手动包装
wrapper.boundValueOps("key").set(value);  // Key 带前缀
// 或
ops.set(wrapper.keyPerfixWrapper("key"), value);

场景选择速查表

场景推荐类Key 前缀
通用业务缓存RedisTemplatePrivateWrapper应用名:
公共数据/字典RedisTemplatePublicWrapperpub-dat:
无前缀场景RedisTemplateEmptyWrapper

Power By 数字海南