您的位置:首页 > 数据库 > Redis

spring boot进阶(一) springboot整合redis,可操作java对象。最完整、简单易懂、详细的spring boot教程。

2018-07-24 11:42 1176 查看
版权声明:版权所有 © 侵权必究 https://blog.csdn.net/m0_38075425/article/details/81181726

关于redis的基本操作和对java对象的操作,请见笔者博客。

本文我们介绍springboot整合redis。

首先是pom依赖:

[code]<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

1.假设我们操作的是User类,其代码如下:

[code]public class User implements Serializable {

private String username;
private String password;
private String nickname;
private String age;
private String gender;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}

注意一定要实现serializable接口。

2.序列化和反序列化工具类:

[code]public class ObjectRedisSerializer implements RedisSerializer<Object> {

/**
* 定义序列化和反序列化转化类
*/
private Converter<Object, byte[]> serializer = new SerializingConverter();
private Converter<byte[], Object> deserializer = new DeserializingConverter();

/**
* 定义转换空字节数组
*/
private static final byte[] EMPTY_ARRAY = new byte[0];

@Override
public byte[] serialize(Object obj) throws SerializationException {
byte[] byteArray = null;
if (null == obj) {
System.err.println("----------------------------->:Redis待序列化的对象为空.");
byteArray = EMPTY_ARRAY;
} else {
try {
byteArray = serializer.convert(obj);
} catch (Exception e) {
System.err.println("----------------------------->Redis序列化对象失败,异常:"+e.getMessage());
byteArray = EMPTY_ARRAY;
}
}
return byteArray;
}

@Override
public Object deserialize(byte[] datas) throws SerializationException {
Object obj = null;
if((null == datas)|| (datas.length == 0)){
System.out.println("---------------------------------->Redis待反序列化的对象为空.");
}else{
try {
obj = deserializer.convert(datas);
} catch (Exception e) {
System.out.println("------------------------------------->Redis反序列化对象失败,异常:"+e.getMessage());
}
}
return obj;
}
}

此处我们使用spring的SerializingConverter和DeserializingConverter类来实现java对象的序列化和反序列化,这两个类实现了Converter接口。使用这个类相比getBytes()方法的好处是可以将大的对象也可以序列化,性能相比getBytes()做了优化。

3.redis的springboot配置类:

[code]@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<Serializable, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Serializable, Object> template = new RedisTemplate<Serializable, Object>();
template.setConnectionFactory(connectionFactory);
template.afterPropertiesSet();
// redis存取对象的关键配置
template.setKeySerializer(new StringRedisSerializer());
// ObjectRedisSerializer类为java对象的序列化和反序列化工具类
template.setValueSerializer(new ObjectRedisSerializer());
return template;
}
}
[code]连接和配置redis的类。

4.application.properties配置文件:

[code]# REDIS
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址 (默认为127.0.0.1)
spring.redis.host=127.0.0.1
# Redis服务器连接端口 (默认为6379)
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接超时时间(毫秒)
spring.redis.timeout=2000ms

5.在TestController类中编写接口方法,测试redis:

[code]@RestController
public class TestController {

@Autowired
private RedisTemplate<Serializable, Object> redisTemplate;

@RequestMapping("/set")
public String setPOJO(){

User user = new User();
user.setAge("18");
user.setGender("男");
user.setNickname("cherish");
user.setPassword("123456");
user.setUsername("admin");
redisTemplate.opsForValue().set("user1", user);
return "存储对象";
}

@RequestMapping("/get")
public Object getPOJO(){

return redisTemplate.opsForValue().get("user1");
}

}

6.测试,首先访问"/set"接口设置user对象:

再访问"/get"接口获取刚刚存储的user对象:

springboot整合redis成功。

当然,在这里也可以操作string等java对象,读者可以自行操作。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: