卡飞资源网

专业编程技术资源共享平台

Redis中RedisTemplate 和 StringRedisTemplate

前言:

RedisTemplate 和 StringRedisTemplate 都是 Spring 提供的操作 Redis 的模板类,但它们之间在序列化方式和使用场景上有显著区别。

序列化方式不同

RedisTemplate<Object, Object>

  • 默认使用的是 JdkSerializationRedisSerializer,即 Java 的对象序列化方式
  • 存进去的键和值在 Redis 中是二进制格式。
  • 适合存储复杂的 Java 对象,比如 Map、List、DTO、实体类等。
redisTemplate.opsForValue().set("key", new User("张三", 18));

StringRedisTemplate

  • 使用的是 StringRedisSerializer,即键和值都序列化成字符串(UTF-8)。
  • 存入和读取的都是纯文本,适合简洁的数据结构,如:String、int、JSON 字符串等。
  • 常用于缓存基础类型、状态值、JSON 文本等。
stringRedisTemplate.opsForValue().set("key", "value");

Redis 中表现不同

存取相同值

使用 RedisTemplate:

redisTemplate.opsForValue().set("count", 1);
Object value = redisTemplate.opsForValue().get("count");
// value 类型是 Object,需要强转成 Integer

使用 StringRedisTemplate:

stringRedisTemplate.opsForValue().set("count", "1");
String value = stringRedisTemplate.opsForValue().get("count");
// value 就是 String,无需强转

如何选择?

建议

只处理 String 或整数状态值,优先使用 StringRedisTemplate,避免类型转换异常。

一定要用 RedisTemplate,建议这样配置(避免乱码):

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(factory);

    // 设置 key 和 value 都使用 String 序列化
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    template.setKeySerializer(stringRedisSerializer);
    template.setValueSerializer(stringRedisSerializer);
    template.setHashKeySerializer(stringRedisSerializer);
    template.setHashValueSerializer(stringRedisSerializer);

    template.afterPropertiesSet();
    return template;
}

总结

在 Spring 框架中,`RedisTemplate` 和 `StringRedisTemplate` 是用于操作 Redis 数据库的核心类。它们封装了对 Redis 的各种操作,提供了简洁的 API 来执行常见的 Redis 命令。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言