1. 初步了解RedisTemplate
RedisTemplate是Spring Data Redis中提供的Redis操作工具,可以用来进行Redis的读写操作。在使用RedisTemplate操作Redis时,需要注意序列化和反序列化问题,不同的序列化方式也会影响到Redis中数据存储的格式。
2. RedisTemplate序列化和反序列化配置
2.1 Redis序列化配置
RedisTemplate支持多种序列化方式,包括JDK自带的序列化方式、JSON序列化方式、Jedis序列化方式等。其中,Jedis序列化方式又分为StringRedisSerializer和JdkSerializationRedisSerializer两种。
下面以使用JSON序列化方式为例,来介绍RedisTemplate的序列化配置方法。
在Spring配置文件中添加RedisTemplate的bean定义,并设置序列化方式为JSON序列化方式:
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="defaultSerializer">
<bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion" value="NON_NULL" />
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
上述配置中,使用了Jackson2JsonRedisSerializer作为序列化方式,同时自定义了ObjectMapper,设置了空值不序列化和日期格式化等信息。
2.2 Redis反序列化配置
除了序列化方式,RedisTemplate还需要设置反序列化方式。一般情况下,Redis的反序列化方式和序列化方式是相同的。
在Spring配置文件中添加RedisTemplate的bean定义,并设置序列化方式和反序列化方式:
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean>
上述配置中,使用了JdkSerializationRedisSerializer作为反序列化方式,同时设置了key和value的序列化方式,以及hash类型的key和value的序列化方式。
3. Redis数据操作示例
3.1 RedisTemplate保存数据
使用RedisTemplate保存数据的方法是opsForValue().set(key, value),其中key和value都是字符串类型。
redisTemplate.opsForValue().set("name", "John");
3.2 RedisTemplate获取数据
使用RedisTemplate获取数据的方法是opsForValue().get(key),其中key是字符串类型。
String name = redisTemplate.opsForValue().get("name");
3.3 RedisTemplate删除数据
使用RedisTemplate删除数据的方法是delete(key),其中key是字符串类型。
redisTemplate.delete("name");
3.4 RedisTemplate存储对象
RedisTemplate不仅可以用来存储基本数据类型,还可以存储对象。存储对象时,需要将对象序列化为字符串,并设置序列化方式和反序列化方式。
下面以存储User对象为例,来介绍RedisTemplate存储对象的方法。
定义User类:
public class User implements Serializable {
private Long id;
private String name;
private Integer age;
// getters and setters
}
在Spring配置文件中添加RedisTemplate的bean定义,并设置序列化方式和反序列化方式:
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashValueSerializer">
<bean class="org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
使用RedisTemplate保存User对象:
User user = new User();
user.setId(1L);
user.setName("John");
user.setAge(18);
redisTemplate.opsForValue().set("user", user);
使用RedisTemplate获取User对象:
User user = (User) redisTemplate.opsForValue().get("user");
4. 总结
RedisTemplate是Spring Data Redis中提供的Redis操作工具,可以用来进行Redis的读写操作。在使用RedisTemplate操作Redis时,需要注意序列化和反序列化问题,不同的序列化方式也会影响到Redis中数据存储的格式。此外,RedisTemplate也支持存储对象,需要将对象序列化为字符串,并设置序列化方式和反序列化方式。