连接到Redis
Redis连接工厂会生成到Redis数据库服务器的连接。Spring Data Redis为四种Redis客户端实现提供了连接工厂:
JedisConnectionFactory
JredisConnectionFactory
LettuceConnectionFactory
SrpConnectionFactory
如果使用其他连接工厂可以简单的替换如:
所有的Redis连接工厂都具有setHostName()、setPort()和setPassword()方法。这样,它们在配置方面实际上是相同的。
Spring Data Redis提供了两个模板:
1.RedisTemplate
2.StringRedisTemplate
RedisTemplate可以极大地简化Redis数据访问,能够让我们持久化各种类型的key和value,并不局限于字节数组。在认识到key和value通常是String类型之后,StringRedisTemplate扩展了RedisTemplate,只关注String类型。假设我们已经有了RedisConnectionFactory,那么可以按照如下的方式构建RedisTemplate:
RedisTemplate的很多功能是以子API的形式提供的:
每个子API都提供了使用数据条目的操作,基于value中所包含的是单个值还是一个值的集合它们会有所差别。
由于方法太多我简单的使用set和get方法做演示:(具体请查看官方文档)
@RestController
public class RedisTemplateController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("redis/get")
public String get(){
stringRedisTemplate.opsForValue().set("zzf","欧哈哟");
return stringRedisTemplate.opsForValue().get("zzf");
}
@RequestMapping("redis/get2")
public String get2(){
redisTemplate.opsForValue().set("zzf2","欧哈哟哈哈哈");
return (String)redisTemplate.opsForValue().get("zzf2");
}
}
OK~
使用list的话如:
使用set如:
有兴趣的可以去看api文档学习这些方法……不过我个人更喜欢Jedis直观,简单方便……
使用key和value的序列化器
当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。Spring Data Redis提供了当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器(serializer)进行序列化。
Spring Data Redis提供了多个这样的序列化器,包括:
1.GenericToStringSerializer:使用Spring转换服务进行序列化;
2.JacksonJsonRedisSerializer:使用Jackson 1,将对象序列化为JSON;
3.Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON;
4.JdkSerializationRedisSerializer:使用Java序列化;
5.OxmSerializer:使用Spring O/X映射的编排器和解排器(marshaler和unmarshaler)实现序列化,用于XML序列化;
6.StringRedisSerializer:序列化String类型的key和value。
假设当使用RedisTemplate的时候,我们希望将Product类型的value序列化为JSON,而key是String类型。RedisTemplate的setKeySerializer()和setValueSerializer()方法就需要如下所示:
下面附上我的SpringBoot集成RedisTemplate的配置步骤:
1.导入jar包,我这里使用的是maven
<!--spring-data-redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置application.properties
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=123456789
# 连接池最大连接数(使用负值表示没有限制)
#spring.redis.pool.max-active=1000
spring.redis.jedis.pool.max-active=1000
# 连接池最大阻塞等待时间(使用负值表示没有限制)
#spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=2
# 连接超时时间(毫秒)
spring.redis.timeout=5000
3.使用
package com.zzf.finals.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisTemplateController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("redis/get")
public String get(){
stringRedisTemplate.opsForValue().set("zzf","欧哈哟");
return stringRedisTemplate.opsForValue().get("zzf");
}
@RequestMapping("redis/get2")
public String get2(){
redisTemplate.opsForValue().set("zzf2","欧哈哟哈哈哈");
return (String)redisTemplate.opsForValue().get("zzf2");
}
}
参考《spring实战》