如何使用RedisTemplate訪問Redis數據結構?

limali


在springboot項目中,集成各種框架變得非常容易。下面簡單介紹一下如何在springboot項目中集成單機模式redis。集群模式也差不多,這裡就不過多介紹了。

  • 首先你得安裝redis服務,無論在linux還是windows系統上。如果沒有安裝,請自行百度或使用其他科學網站幫助。隨後需要在項目的配置文件中配置redis相關參數以及設置jedis連接池的參數。可參考下圖配置方式:
  • 由於本人使用了maven方式來構建項目,所以需要在項目的pom文件中加入redis相關依賴。

  • 之後就需要實現redis配置文件類。配置文件的jedis連接池配置就不列出來了,反正就是根本properties文件來一步一步設置,連接工廠也是跟連接池有關。這裡重點介紹一下redisTemplate的實現,以及與redis操作工具類的配合使用。可以根據下圖來進行個性化設置:

  • 實現配置文件後,就可以在redis工具類RedisUtil中使用redisTemplate了。如下圖所示:

  • 這裡redisTemplate實例化是在redis配置類中實現的。直接將RedisUtil通過註解方式直接注入到spring容器中去,在此過程中使用工具類的setRedisTemplate方法實例化RedisTemplate。這樣就能直接通過@AutoWired註解去裝配Bean了。

  • 在RedisUtil工具類中,我們通過redisTemplate去操作數據結構。無論是一般數據(String),還是Map數據結構,還是List數據結構,都有相應的操作方法。如下圖:

  • 工具類完成後,在相應的服務層使用這個工具類來操作redis的數據結構實現相應業務。

以上就是一個redis操作類在speingboot項目中的簡單實現。除了數據結構的操作,我們還能使用redis的特性來實現一些業務場景特定的功能。例如使用increment方法實現點贊功能;利用redis單線程特性生成唯一主鍵;將redis與Lua腳本相結合,實現redis分佈式鎖,當然這需要考慮到業務時間與過期時間的關係問題。

除此之外,在使用redis過程中應該需要考慮到雪崩、穿透和擊穿等問題,這也是在面試過程中經常問到的問題。希望對你有所幫助。


EmacserVimer


如果是 Spring Boot 項目的話,集成 RedisTemplate 還是非常簡單的。


01. 添加依賴

pom.xml

文件中添加 redis 的相關依賴;如果不是 Maven 構建的項目,需要自己做相應的配置。


02. 添加配置

Redis 的相關配置,比如 IP、端口、端口、超時時間、連接池大小等等。


03. 使用 RedisTemplate

到了這一步,我們就可以使用 RedisTemplate 了,可能有些同學會有疑問,RedisTemplate 是 jar 裡面自帶的麼?只需要做兩個配置就可以使用了?


其實就是 Spring Boot 的“約定大於配置”,很多配置 Spring Boot 都幫我們做好了,如果我們用它給的默認配置的話,就不需要做多餘的配置,如果你不想使用默認的配置,就需要告知 Spring Boot 你想怎麼做。



04. 自定義 RedisTemplate

如果我們使用默認配置的話,會有一些“坑”在裡面,執行完上面的代碼後,我們會發現 Redis 中的 key 和 value 的前後,都會有一些奇怪的字符,類似於這樣:

"\\xac\\xed\\x00\\x05t\\x00\\x05key01"


這是因為默認的配置中,使用的是 JdkSerializationRedisSerializer 來進行序列化,雖然不影響我們使用 Java 進行操作 Redis,但是對於運維來說無疑是災難性的。這時候我們可以自定義 RedisTemplate ,增加一個配置類,修改 RedisTemplate 的序列化方式。


05. RedisTemplate 的常用方法

Redis 中包含 String、Hash、List、Set、ZSet 五中數據結構,RedisTemplate 針對每種數據結構都提供了豐富的方法。

  • redisTemplate.opsForValue():針對 String 類型的操作;String 不僅是字符串型,還包括整形和浮點型;

  • redisTemplate.opsForHash():針對 Hash 的操作;

  • redisTemplate.opsForList():針對 List 的操作;可以對下標元素操作,也可以對鏈表頭部和尾部操作;

  • redisTemplate.opsForSet():針對 Set 的操作;包括兩個集合的交集和並集;

  • redisTemplate.opsForZSet():針對 ZSet 的操作;


我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔


Redis 數據結構簡介Redis 可以存儲鍵與5種不同數據結構類型之間的映射,這5種數據結構類型分別為String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。

下面來對這5種數據結構類型作簡單的介紹:

結構類型 結構存儲的值 結構的讀寫能力String 可以是字符串、整數或者浮點數 對整個字符串或者字符串的其中一部分執行操作;對象和浮點數執行自增(increment)或者自減(decrement)List 一個鏈表,鏈表上的每個節點都包含了一個字符串 從鏈表的兩端推入或者彈出元素;根據偏移量對鏈表進行修剪(trim);讀取單個或者多個元素;根據值來查找或者移除元素Set 包含字符串的無序收集器(unorderedcollection),並且被包含的每個字符串都是獨一無二的、各不相同 添加、獲取、移除單個元素;檢查一個元素是否存在於某個集合中;計算交集、並集、差集;從集合裡賣弄隨機獲取元素Hash 包含鍵值對的無序散列表 添加、獲取、移除單個鍵值對;獲取所有鍵值對Zset 字符串成員(member)與浮點數分值(score)之間的有序映射,元素的排列順序由分值的大小決定 添加、獲取、刪除單個元素;根據分值範圍(range)或者成員來獲取元素Redis 5種數據結構的概念大致介紹到這邊,下面將結合Spring封裝的RedisTemplate來對這5種數據結構的運用進行演示

RedisTemplate介紹spring 封裝了 RedisTemplate 對象來進行對redis的各種操作,它支持所有的 redis 原生的 api。

RedisTemplate在spring代碼中的結構如下:

org.springframework.data.redis.coreClass RedisTemplatejava.lang.Objectorg.springframework.data.redis.core.RedisAccessororg.springframework.data.redis.core.RedisTemplateType Parameters:K

the Redis key type against which the template works (usually a String)模板中的Redis!


分享到:


相關文章: