spring boot進階(一) springboot整合redis,可操作java對象。最完整、簡單易懂、詳細的spring boot教程。

手把手寫代碼:三小時急速入門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對象,讀者可以自行操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章