引入這個依賴器建立項目,在專案pom.xml檔會出現以下依賴:
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資料庫中為對應屬性產生二級索引。當使用該註解時,屬性對應的二級索引將在資料庫中生成,這將使資料查詢變得簡單,索引名稱與屬性名稱相同。
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資料庫。
在專案的全域設定檔application.properties中新增Redis資料庫的連線配置,範例程式碼如下:
# Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password=
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); } } }
開啟Redis用戶端視覺化管理工具,先連接本機Redis伺服器:
#連線成功後,可以看到原來本地Redis資料庫中是沒有資料的:
#運行上文中寫好的兩個測試方法,查看控制台列印結果:
為了驗證save()方法確實把資料寫入到本機Redis資料庫中了,開啟Redis客戶端視覺化管理工具,刷新數據,可以看到資料成功寫入了:
透過上圖可知:執行save()方法新增的資料在Redis資料庫中儲存成功。另外,在資料庫清單左側也形成了類似address.city、firstname、lastname等二級索引,這些二級索引是前面建立Person類別時在對應屬性上新增@Indexed註解而產生的。同時,由於在Redis資料庫中產生了對應屬性的二級索引,所以可以透過二級索引來查詢具體的資料信息,例如repository.findByAddress_City(“北京”)透過address.city索引查詢索引值為北京的數據資訊.如果沒有設定對應屬性的二級索引,那麼透過屬性索引查詢的資料結果將為空。
以上是SpringBoot與Redis怎麼整合的詳細內容。更多資訊請關注PHP中文網其他相關文章!