自定义RedisTemplate
大约 1 分钟数据库技术Redis
对象没有序列化。
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
private String name;
private Integer age;
}

对象序列化。
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User implements Serializable {
private String name;
private Integer age;
}

在企业中,所有的POJO类都会序列化。

自定义序列化配置类
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
/**
* 为了开发方便,一般使用<String, Object>
*/
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
/**
* 配置具体的序列化方式
*/
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(om.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// String的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value采用jackson的序列化方式
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value采用jackson的序列化方式
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
测试
@Test
void test() throws JsonProcessingException {
User user = new User("哔哩哔哩", 11);
redisTemplate.opsForValue().set("user", user);
System.out.println(redisTemplate.opsForValue().get("user"));
}
结果
User(name=哔哩哔哩, age=11)
2020-12-30 11:49:30.335 INFO 2856 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
Process finished with exit code 0
查看Redis命令行
127.0.0.1:6379> keys *
1) "user"
127.0.0.1:6379> get user
"[\"com.kuang.pojo.User\",{\"name\":\"\xe5\x93\x94\xe5\x93\xa9\xe5\x93\x94\xe5\x93\xa9\",\"age\":11}]"
127.0.0.1:6379>
在企业开发中,80%的情况下,都不会使用这种原生的方式去编写代码。RedisUtils。

所有的Redis操作,其实对于Java开发人员来说,是十分简单的。更重要的是去理解Redis的思想和每一种数据结构用处和作用场景。