springboot是下一代框架,大大简化了对spring的使用,在springboot中使用redis同样非常简单。
首先新建一个boot项目,然后再boot项目中加入redis的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
在src/main/resources目录下的application.properties文件中添加redis的配置。
spring.redis.database= # 数据库名,0-16,一般指定为第一个,即0
spring.redis.host=# redis服务器ip地址
spring.redis.password= # 密码
spring.redis.port=# 端口
spring.redis.pool.max-idle= # 最大空闲数目
spring.redis.pool.min-idle=#最小空闲数据
spring.redis.pool.max-active=#最大活跃池数据
spring.redis.pool.max-wait=#最大等待数
spring.redis.sentinel.master= # redis哨兵集群的主节点
spring.redis.sentinel.nodes= # redis哨兵集群的从节点,形式为host:port,中间用逗号隔开。
这里我就直接连接了本地的redis服务,redis配置也只是简单配置。如下:
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=0
通常来说,redis存储时候的键和值都是stirng,springboot也提供了StringRedisTemplate来支持这样的存取。使用起来也非常简单,我们只需要直接用@Autowired来引入StringRedisTemplate即可使用,因为springboot在初始化时会自动读取配置文件中的数据,一旦发现和redis相关的配置,就会自动初始化StringRedisTemplate。
接下来我们在test文件中写一个测试方法,来看看效果。
@Autowired
StringRedisTemplate StringRedisTemplate;
@Test
public void stringRedisTest() {
StringRedisTemplate.opsForValue().set("aaa", "bbb");
String getV = StringRedisTemplate.opsForValue().get("aaa");
System.out.println(getV);
}
控制台输出bbb。
一般来说以String作为键值对已经能够满足大多数的需求,但有时我们需要直接对对象进行存取,其实spring boot也提供了这样的类,RedisTemplate
//StringRedisTemplate其实就是RedisTemplate<String,String>。但是要想直接使用这个类,我们还需要做一些其他的工作。因为我们存储的value值是对象,所以我们需要实现对对象的序列化和反序列化。创建一个类MyObjectSerializer并实现RedisSerializer接口。
public class MyObjectSerializer implements RedisSerializer<Object>{
private Converter<Object, byte[]> serializer=new SerializingConverter();//序列化器
private Converter<byte[], Object> deserializer=new DeserializingConverter();//反序列化器
@Override
public byte[] serialize(Object t) throws SerializationException {//将对象序列化为字节数组
// TODO Auto-generated method stub
if(t==null){
return new byte[0];
}
try {
return serializer.convert(t);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public Object deserialize(byte[] bytes) throws SerializationException {//将字节数组反序列化为对象
if(bytes==null||bytes.length==0){
return null;
}
try {
return deserializer.convert(bytes);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
然后创建一个类RedisConfig。
@Configuration
public class RedisConfig {
@Bean
JedisConnectionFactory getConnectionFactory(){
return new JedisConnectionFactory();
}
@Bean
RedisTemplate<String, Object> getRedisTemplate(){
RedisTemplate<String, Object> redisTemplate=new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(getConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());//设置键的序列化
redisTemplate.setValueSerializer(new MyObjectSerializer());//设置值的序列化
return redisTemplate;
}
}
经过上面的设置后,我们已经可以编写一个测试类来看看效果了。
@Autowired
RedisTemplate<String, Object> redisTemplate;
@Test
public void objectRedisTest() {
Student student=new Student();
student.setStuNumber("001");
student.setName("张三");
student.setAge(20);
redisTemplate.opsForValue().set(student.getStuNumber(), student);
Student studentFromRedis = (Student)redisTemplate.opsForValue().get(student.getStuNumber());
System.out.println(studentFromRedis);
}
在控制台输出:Student [stuNumber=001, name=张三, age=20]。