首頁 > 資料庫 > Redis > SpringBoot與Redis怎麼整合

SpringBoot與Redis怎麼整合

王林
發布: 2023-05-30 12:03:40
轉載
791 人瀏覽過

SpringBoot與非關係型資料庫Redis的整合

(1)加入Spring Data Redis依賴啟動器

SpringBoot與Redis怎麼整合

引入這個依賴器建立項目,在專案pom.xml檔會出現以下依賴:

SpringBoot與Redis怎麼整合

(2)寫實體類別

Person:

package com.hardy.springbootdataredis.domain;import org.springframework.data.annotation.Id;import org.springframework.data.redis.core.RedisHash;import org.springframework.data.redis.core.index.Indexed;/**
 * @Author: HardyYao
 * @Date: 2021/6/15 */@RedisHash("persons")   // 指定操作实体类对象在Redis数据库中的存储空间public class Person {

    @Id // 标识实体类主键private String id;

    @Indexed // 标识对应属性在Redis数据库中生成二级索引private String firstname;

    @Indexedprivate String lastname;private Address address;public String getId() {return id;
    }public void setId(String id) {this.id = id;
    }public String getFirstname() {return firstname;
    }public void setFirstname(String firstname) {this.firstname = firstname;
    }public String getLastname() {return lastname;
    }public void setLastname(String lastname) {this.lastname = lastname;
    }public Address getAddress() {return address;
    }public void setAddress(Address address) {this.address = address;
    }

    @Overridepublic String toString() {return "Person{" +
                "id='" + id + ''' +
                ", firstname='" + firstname + ''' +
                ", lastname='" + lastname + ''' +
                ", address=" + address +
                '}';
    }
}
登入後複製

Address:

package com.hardy.springbootdataredis.domain;import org.springframework.data.redis.core.index.Indexed;/**
 * @Author: HardyYao
 * @Date: 2021/6/15 */public class Address {

    @Indexedprivate String city;

    @Indexedprivate String country;public String getCity() {return city;
    }public void setCity(String city) {this.city = city;
    }public String getCountry() {return country;
    }public void setCountry(String country) {this.country = country;
    }

    @Overridepublic String toString() {return "Address{" +
                "city='" + city + ''' +
                ", country='" + country + ''' +
                '}';
    }
}
登入後複製

在上述兩個實體類別中,涉及了關於Redis資料庫的資料操作的幾個註解:

  • @RedisHash(“persons”):用於指定操作實體類別物件在Redis資料庫中的儲存空間,此處表示針對Person實體類別的資料操作都儲存在Redis資料庫中名為persons的儲存空間下。

  • @Id:用於識別實體類別主鍵。在Redis資料庫中會預設產生字串形式的HashKey表示唯一的實體物件id,當然也可以在資料儲存時手動指定id。

  • @Indexed:用來指定在Redis資料庫中為對應屬性產生二級索引。當使用該註解時,屬性對應的二級索引將在資料庫中生成,這將使資料查詢變得簡單,索引名稱與屬性名稱相同。

(3)編寫Repository介面

SpringBoot針對包括Redis在內的一些常用資料庫提供了自動化配置,可以透過實作Repository介面簡化對資料庫中的數據進行增刪查改的操作:

package com.hardy.springbootdataredis.repository;import com.hardy.springbootdataredis.domain.Person;import org.springframework.data.repository.CrudRepository;import java.util.List;/**
 * @Author: HardyYao
 * @Date: 2021/6/15 */public interface PersonRepository extends CrudRepository<Person, String> {

    List<Person> findByAddress_City(String City);

}
登入後複製

注意:在操作Redis資料庫時編寫的Repository介面類別需要繼承最底層的CrudRepository接口,而不是繼承JpaRepository(JpaRepository是SpringBoot整合JPA特有的)。當然,也可以在專案pom.xml檔中同時導入SpringBoot整合的JPA依賴和Redis依賴,這樣就可以寫一個繼承JpaRepository的介面的操作Redis資料庫。

(4)Redis資料庫連線配置

在專案的全域設定檔application.properties中新增Redis資料庫的連線配置,範例程式碼如下:

# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
登入後複製

(5)編寫單元測試方法

package com.hardy.springbootdataredis;import com.hardy.springbootdataredis.domain.Address;import com.hardy.springbootdataredis.domain.Person;import com.hardy.springbootdataredis.repository.PersonRepository;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.util.List;

@SpringBootTestclass SpringbootdataRedisApplicationTests {

    @Autowiredprivate PersonRepository repository;

    @Testpublic void savePerson() {
        Person person = new Person();
        person.setFirstname("张");
        person.setLastname("三");
        Address address = new Address();
        address.setCity("北京");
        address.setCountry("中国");
        person.setAddress(address);// 向Redis数据库添加数据Person save = repository.save(person);
    }

    @Testpublic void selectPerson() {
        List<Person> list = repository.findByAddress_City("北京");for (Person person : list) {
            System.out.println(person);
        }
    }

}
登入後複製

(6)整合測試

開啟Redis用戶端視覺化管理工具,先連接本機Redis伺服器:

SpringBoot與Redis怎麼整合

#連線成功後,可以看到原來本地Redis資料庫中是沒有資料的:

SpringBoot與Redis怎麼整合

#運行上文中寫好的兩個測試方法,查看控制台列印結果:

SpringBoot與Redis怎麼整合

為了驗證save()方法確實把資料寫入到本機Redis資料庫中了,開啟Redis客戶端視覺化管理工具,刷新數據,可以看到資料成功寫入了:

SpringBoot與Redis怎麼整合

透過上圖可知:執行save()方法新增的資料在Redis資料庫中儲存成功。另外,在資料庫清單左側也形成了類似address.city、firstname、lastname等二級索引,這些二級索引是前面建立Person類別時在對應屬性上新增@Indexed註解而產生的。同時,由於在Redis資料庫中產生了對應屬性的二級索引,所以可以透過二級索引來查詢具體的資料信息,例如repository.findByAddress_City(“北京”)透過address.city索引查詢索引值為北京的數據資訊.如果沒有設定對應屬性的二級索引,那麼透過屬性索引查詢的資料結果將為空。

以上是SpringBoot與Redis怎麼整合的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板