目录
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中
1.引入依赖
<!-- SpringDataRedis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 连接池依赖--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
2.配置文件
spring: data: redis: host: 192.168.68.131 port: 6379 password: 123321 jedis: pool: max-active: 8 # 最大连接 max-idle: 8 # 最大空闲 min-idle: 8 # 最小空闲 max-wait: 100ms # 连接等待时间
3.注入RedisTemplate
@Autowired private RedisTemplate redisTemplate;
4.编写测试
@Test void contextLoads() { // 插入一条string类型数据 redisTemplate.opsForValue().set("name","李四"); // 读取一条string类型数据 Object name = redisTemplate.opsForValue().get("name"); System.out.println("name = " + name); }
SpringDataRedis的序列化
1. 我们可以自定义RedisTemplate的序列化方式,代码如下
修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
// 创建Template
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 设置序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// key 和 hashKey采用string序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// value 和 hashValue采用JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
return redisTemplate;
}
如果是单独做的SpringDataRedis没有springMVC的话,需要导入一下包
<!-- Jackson依赖 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
上述方法,在存储是会把类的字节码也一起写入,会消耗一部分内存空间
可以使用StringRedisTemplate来解决,但是该方法需要手动将对象转成string
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void up() {
// 插入一条string类型数据
User jack = new User("Jack", 18);
String s = JSON.toJSONString(jack);
stringRedisTemplate.opsForValue().set("user", s);
// 读取一条string类型数据
Object name = stringRedisTemplate.opsForValue().get("user");
System.out.println("name = " + name);
}
RedisTemplate的两种序列化实践方案:
方案一:
1. 自定义RedisTemplate
2.修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
方案二:
1. 使用StringRedisTemplate
2.写入Redis时,手动把对象序列化为JSON
3.读取Redis时,手动把读取到的JSON反序列化为对象