提问基于RedisTemplate 的Redis工具封装,如何更便捷使用,求赐教

最近刚好有时间,打算抽空统一下公司研发中常见Redis操作工具类;折腾一番后发现陷入死胡同了。请问各位大佬都是怎么处理redis 工具类的。下面提供了两种,目前别人常用的;

第一种:基于 StringRedisTemplate:(下面的代码有做了一些简化)

//redis 工具类
@Component
public class RedisService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    //设置缓存
    public void set(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }
    //获取缓存
    public String get(String key) {
        return redisTemplate.opsForValue().get(key);
    }
}

问题描述:上面这种方式直接限定了 key  和 value 都是 string 类型。这种方式在操作对象的时候,在业务层就需要将对象进行各种的序列化和反序列操作。

第二种:基于 RedisTemplate (下面的代码有做了一些简化)

//redis 操作工具类
@Component
public class RedisService {

    @Autowired
    private RedisTemplate redisTemplate;

    //设置缓存
    public <T> void set(String key, T value) {
        redisTemplate.opsForValue().set(key, value);
    }

    //直接返回 Object ps:返回的类型在业务层需要进行类型转换比较麻烦
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    //在网上咨询了一些答案,给出这种方式,但是经过验证我发现,这种方式有问题,他需要有一个前提就是,redis 中的缓存value需要带有类型信息,否则
    //最终返回的 Object 其实是一个Map。 导致类型强转失败;
    //这种方式感觉不太合理。很容易出现各种数据兼容问题
    public T get(String key,Class<T> clazz) {
        Object cache = redisTemplate.opsForValue().get(key);
        return (T)cache;

    }
}

问题描述:第二种利用 RedisTemplate 来封装操作,这用方式就是在获取redis 缓存数据的时候,转换为具体类型的时候遇到了问题;

请登录后发表评论