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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

解決redis-server找不到問題的步驟:檢查安裝,確保已正確安裝Redis;設置環境變量REDIS_HOST和REDIS_PORT;啟動Redis服務器redis-server;檢查服務器是否運行redis-cli ping。

要查看 Redis 中的所有鍵,共有三種方法:使用 KEYS 命令返回所有匹配指定模式的鍵;使用 SCAN 命令迭代鍵並返回一組鍵;使用 INFO 命令獲取鍵的總數。

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

要查看 Redis 版本號,可以使用以下三種方法:(1) 輸入 INFO 命令,(2) 使用 --version 選項啟動服務器,(3) 查看配置文件。

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。
