在spring boot中,默認集成的redis是Spring Data Redis,Spring Data Redis針對redis提供了非常方便的操作模版RedisTemplate
idea中新建spring boot項目的時候,引入Spring Data Redis依賴:
創建成功后的項目依賴pom.xml如下:
其實spring-boot-starter-data-redis依賴中就包含了spring-data-redis依賴
application.properties中配置redis的信息:
可以看到默認連接的redis服務端主機和端口是localhost和6379
我的redis安裝在了本地,端口也是默認的6379,所以application.properties中沒有寫東西
當開發者在項目中引入了Spring Data Redis,並配置了redis的基本信息,此時自動化配置就會生效,看一下spring boot中redis的自動化配置類
- 首先標記這是一個配置類,同時該配置在RedisOperations存在的情況下才會生效(即項目中引入了Spring Data Redis)
- 然后導入在application.properties中配置的屬性
- 然后再導入連接池信息
- 最后,提供了兩個bean,RedisTemplate和StringRedisTemplate,其中StringRedisTemplate是RedisTemplate的子類,兩個方法基本一致,
不同之處主要體現在操作的數據類型不同,RedisTemplate中的兩個泛型都是Object,意味着存儲的key和value都可以是一個對象,而StringRedisTemplate
的兩個泛型都是String,意味着StringRedisTemplate的key和value都只能是字符串。如果開發者沒有提供相關的bean,這兩個配置就會生效,否則不會生效
終端開啟redis服務端,並保持開啟狀態,確保一會可以連得上redis服務端:
Spring Data Redis中真正操作redis可以采用RedisTemplate的方式
- 針對key的操作,相關的方法就在RedisTemplate中
- 針對具體數據類型的操作,相關的方法首先獲取對應的數據類型,獲取對應數據類型的操作方法是opsForXXX
在測試類中注入redisTemplate,redis支持的五種數據類型在RedisTemplate類中對應相應的方法:
以操作字符串的opfForValue()方法為例:
name前面的字符是由於使用了RedisTemplate導致的,RedisTemplate對key進行序列化之后對結果
RedisTemplate中,key默認的序列化方案是JdkSerializationRedisSerializer
而在StringRedisTemplate中,key默認的序列化方案是StringRedisSerializer,因此,如果使用StringRedisTemplate,默認情況下key前面不會有前綴
不過開發者也可以自行修改RedisRemplate中的序列化方案,也可以直接使用StringRedisTemplate
另外需要注意,spring boot的自動化配置,只能配置單機的redis,如果是redis集群,則所有的東西都需要手動配置