手把手寫代碼:三小時急速入門springboot—企業級微博項目實戰--->csdn學院
關於redis的基本操作和對java對象的操作,請見筆者博客。
本文我們介紹springboot整合redis。
首先是pom依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
1.假設我們操作的是User類,其代碼如下:
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.序列化和反序列化工具類:
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配置類:
@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;
}
}
連接和配置redis的類。
4.application.properties配置文件:
# 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:
@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對象,讀者可以自行操作。