1.RedisTemplate和StringRedisTemplate的区别
-
StringRedisTemplate继承RedisTemplate
-
两者的数据是不共通的(默认的序列化机制导致key不一样)
-
StringRedisTemplate默认采用的是String的序列化策略
-
RedisTemplate默认采用的是JDK的序列化策略,会将数据先序列化成字节数组然后在存入Redis数据库
针对区别的第3点和第4点
查看后执行的后台打印
redis可视化工具中查看数据
-
总结
- 当redis数据库里面本来操作的是字符串数据的时候,那使用StringRedisTemplate即可
- 数据是复杂的对象类型,那么使用RedisTemplate是更好的选择
1.1序列化机制
想要改变RedisTemplate生成的key和value,就要使用序列化机制
新建一个配置类RedisTemplateConfiguration
package net.xdclass.xdclassredis.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisTemplateConfiguration {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
// Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class);
// 设置key和value的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置hashKey和hashValue的序列化规则
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
// 设置支持事物
//redisTemplate.setEnableTransactionSupport(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
新建一个实例对象UserDo
package net.xdclass.xdclassredis.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDo{
private int id;
private String name;
private String pwd;
}
测试一下
执行这个单元测试,查看redis的可视化工具
如需要代码,可在资源中自取!!!