Java中用RedisTemplate读写需配置序列化器:推荐StringRedisTemplate处理字符串,或自定义RedisTemplate配合StringRedisSerializer与GenericJackson2JsonRedisSerializer存取对象,注意连接池、序列化一致性和key大小写敏感。

在Java中用 RedisTemplate 做基础键值读写,核心是配置好模板、选择合适的序列化器,并调用对应操作方法。默认的 JDK 序列化不友好,建议改用 StringRedisTemplate(专为字符串设计)或自定义 RedisTemplate 的序列化策略。
使用 StringRedisTemplate(推荐入门)
StringRedisTemplate 是 RedisTemplate 的子类,内部已预设 StringRedisSerializer,适合操作字符串类型的 key 和 value,无需额外配置序列化器。
- 写入:调用
opsForValue().set("key", "value") - 读取:调用
opsForValue().get("key"),返回String - 设置过期时间:用
set("key", "value", Duration.ofSeconds(60)) - 存在性判断:用
hasKey("key")返回Boolean
自定义 RedisTemplate(支持对象存取)
若需存 Java 对象(如 User),需手动配置序列化器。常见做法是 key 用 StringRedisSerializer,value 用 GenericJackson2JsonRedisSerializer(支持 JSON 格式,可读性强且兼容性好)。
- 配置示例(Spring Boot 中): redisTemplate.setKeySerializer(new StringRedisSerializer());
- 存对象:
redisTemplate.opsForValue().set("user:1001", user) - 取对象:
User user = redisTemplate.opsForValue().get("user:1001") - 注意:目标类需有无参构造、字段可被 Jackson 序列化(如 public 字段或带 getter/setter)
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet();
常用操作速查
除基本 set/get,opsForValue() 还提供原子操作:
立即学习“Java免费学习笔记(深入)”;
-
increment("counter", 1L):整数自增(key 不存在时从 0 开始) -
append("msg", "world"):字符串追加 -
getAndSet("key", "newVal"):获取旧值并设新值(原子) -
multiGet(Arrays.asList("k1", "k2")):批量读取,返回List<String>
注意事项与避坑点
实际使用中容易忽略几个关键细节:
- 连接池未配置可能导致并发下连接耗尽 —— 推荐显式配置
LettuceClientConfigurationBuilder或JedisPoolConfig - 序列化器不匹配会报
SerializationException—— 读写必须用同一套序列化器 - Redis 默认不区分大小写?错!key 是完全区分大小写的,
"User:1"和"user:1"是两个 key - 空值处理:
get()对不存在的 key 返回null,注意 NPE;可用opsForValue().getOrDefault("k", "default")(需 Spring Data Redis 2.4+)


















