javascript
redis缓存路由为空_Springboot使用RedisTemplate优雅地操作redis
概述
本文內(nèi)容主要
- 關(guān)于spring-redis
- 關(guān)于redis的key設(shè)計(jì)
- redis的基本數(shù)據(jù)結(jié)構(gòu)
- 介紹redis與springboot的整合
- sringboot中的redistemplate的使用
關(guān)于spring-redis
spring-data-redis針對(duì)jedis提供了如下功能:
1.連接池自動(dòng)管理,提供了一個(gè)高度封裝的“RedisTemplate”類(lèi)
2.針對(duì)jedis客戶(hù)端中大量api進(jìn)行了歸類(lèi)封裝,將同一類(lèi)型操作封裝為operation接口
- ValueOperations:簡(jiǎn)單K-V操作
- SetOperations:set類(lèi)型數(shù)據(jù)操作
- ZSetOperations:zset類(lèi)型數(shù)據(jù)操作
- HashOperations:針對(duì)map類(lèi)型的數(shù)據(jù)操作
- ListOperations:針對(duì)list類(lèi)型的數(shù)據(jù)操作
3.提供了對(duì)key的“bound”(綁定)便捷化操作API,可以通過(guò)bound封裝指定的key,然后進(jìn)行一系列的操作而無(wú)須“顯式”的再次指定Key,即BoundKeyOperations:
- BoundValueOperations
- BoundSetOperations
- BoundListOperations
- BoundSetOperations
- BoundHashOperations
4.將事務(wù)操作封裝,有容器控制。
5.針對(duì)數(shù)據(jù)的“序列化/反序列化”,提供了多種可選擇策略(RedisSerializer)
JdkSerializationRedisSerializer:POJO對(duì)象的存取場(chǎng)景,使用JDK本身序列化機(jī)制,將pojo類(lèi)通過(guò)ObjectInputStream/ObjectOutputStream進(jìn)行序列化操作,最終redis-server中將存儲(chǔ)字節(jié)序列。是目前最常用的序列化策略。
StringRedisSerializer:Key或者value為字符串的場(chǎng)景,根據(jù)指定的charset對(duì)數(shù)據(jù)的字節(jié)序列編碼成string,是“new String(bytes, charset)”和“string.getBytes(charset)”的直接封裝。是最輕量級(jí)和高效的策略。
JacksonJsonRedisSerializer:jackson-json工具提供了javabean與json之間的轉(zhuǎn)換能力,可以將pojo實(shí)例序列化成json格式存儲(chǔ)在redis中,也可以將json格式的數(shù)據(jù)轉(zhuǎn)換成pojo實(shí)例。因?yàn)閖ackson工具在序列化和反序列化時(shí),需要明確指定Class類(lèi)型,因此此策略封裝起來(lái)稍微復(fù)雜?!拘枰猨ackson-mapper-asl工具支持】
OxmSerializer:提供了將javabean與xml之間的轉(zhuǎn)換能力,目前可用的三方支持包括jaxb,apache-xmlbeans;redis存儲(chǔ)的數(shù)據(jù)將是xml工具。不過(guò)使用此策略,編程將會(huì)有些難度,而且效率最低;不建議使用?!拘枰猻pring-oxm模塊的支持】
如果你的數(shù)據(jù)需要被第三方工具解析,那么數(shù)據(jù)應(yīng)該使用StringRedisSerializer而不是JdkSerializationRedisSerializer。關(guān)于key的設(shè)計(jì)
key的存活時(shí)間:
無(wú)論什么時(shí)候,只要有可能就利用key超時(shí)的優(yōu)勢(shì)。一個(gè)很好的例子就是儲(chǔ)存一些諸如臨時(shí)認(rèn)證key之類(lèi)的東西。當(dāng)你去查找一個(gè)授權(quán)key時(shí)——以O(shè)AUTH為例——通常會(huì)得到一個(gè)超時(shí)時(shí)間。
這樣在設(shè)置key的時(shí)候,設(shè)成同樣的超時(shí)時(shí)間,Redis就會(huì)自動(dòng)為你清除。
關(guān)系型數(shù)據(jù)庫(kù)的redis
1: 把表名轉(zhuǎn)換為key前綴 如, tag:
2: 第2段放置用于區(qū)分區(qū)key的字段--對(duì)應(yīng)mysql中的主鍵的列名,如userid
3: 第3段放置主鍵值,如2,3,4…., a , b ,c
4: 第4段,寫(xiě)要存儲(chǔ)的列名
例:user:userid:9:username
Redis的數(shù)據(jù)類(lèi)型
String字符串
- string是redis最基本的類(lèi)型,一個(gè)key對(duì)應(yīng)一個(gè)value。
- string類(lèi)型是二進(jìn)制安全的。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對(duì)象 。
- string類(lèi)型是Redis最基本的數(shù)據(jù)類(lèi)型,一個(gè)鍵最大能存儲(chǔ)512MB。
String類(lèi)型的操作參考:
http://www.runoob.com/redis/redis-strings.html鏈表
- redis列表是簡(jiǎn)單的字符串列表,排序?yàn)椴迦氲捻樞?。列表的最大長(zhǎng)度為2^32-1。
- redis的列表是使用鏈表實(shí)現(xiàn)的,這意味著,即使列表中有上百萬(wàn)個(gè)元素,增加一個(gè)元素到列表的頭部或尾部的操作都是在常量的時(shí)間完成。
- 可以用列表獲取最新的內(nèi)容(像帖子,微博等),用ltrim很容易就會(huì)獲取最新的內(nèi)容,并移除舊的內(nèi)容。
- 用列表可以實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式,生產(chǎn)者調(diào)用lpush添加項(xiàng)到列表中,消費(fèi)者調(diào)用rpop從列表中提取,如果沒(méi)有元素,則輪詢(xún)?nèi)カ@取,或者使用brpop等待生產(chǎn)者添加項(xiàng)到列表中。
List類(lèi)型的操作參考:
http://www.runoob.com/redis/redis-lists.html集合
- redis集合是無(wú)序的字符串集合,集合中的值是唯一的,無(wú)序的??梢詫?duì)集合執(zhí)行很多操作,例如,測(cè)試元素是否存在,對(duì)多個(gè)集合執(zhí)行交集、并集和差集等等。
- 我們通??梢杂眉洗鎯?chǔ)一些無(wú)關(guān)順序的,表達(dá)對(duì)象間關(guān)系的數(shù)據(jù),例如用戶(hù)的角色,可以用sismember很容易就判斷用戶(hù)是否擁有某個(gè)角色。
- 在一些用到隨機(jī)值的場(chǎng)合是非常適合的,可以用 srandmember/spop 獲取/彈出一個(gè)隨機(jī)元素。同時(shí),使用@EnableCaching開(kāi)啟聲明式緩存支持,這樣就可以使用基于注解的緩存技術(shù)。注解緩存是一個(gè)對(duì)緩存使用的抽象,通過(guò)在代碼中添加下面的一些注解,達(dá)到緩存的效果。
Set類(lèi)型的操作參考:
http://www.runoob.com/redis/redis-sets.htmlZSet 有序集合
- 有序集合由唯一的,不重復(fù)的字符串元素組成。有序集合中的每個(gè)元素都關(guān)聯(lián)了一個(gè)浮點(diǎn)值,稱(chēng)為分?jǐn)?shù)。可以把有序看成hash和集合的混合體,分?jǐn)?shù)即為hash的key。
- 有序集合中的元素是按序存儲(chǔ)的,不是請(qǐng)求時(shí)才排序的。
ZSet類(lèi)型的操作類(lèi)型
http://www.runoob.com/redis/redis-sorted-sets.htmlHash-哈希
- redis的哈希值是字符串字段和字符串之間的映射,是表示對(duì)象的完美數(shù)據(jù)類(lèi)型。
- 哈希中的字段數(shù)量沒(méi)有限制,所以可以在你的應(yīng)用程序以不同的方式來(lái)使用哈希。
Hash類(lèi)型的操作參考:
http://www.runoob.com/redis/redis-hashes.htmlspringboot 與redis的整合
pom文件
依賴(lài)如下:
<application.properties
#redisTemplate的配置
新建一個(gè)redisConfig類(lèi),進(jìn)行相關(guān)bean的配置:
packagespring-redis中使用了RedisTemplate來(lái)進(jìn)行redis的操作,通過(guò)泛型的K和V設(shè)置鍵值對(duì)的對(duì)象類(lèi)型。這里使用了string作為key的對(duì)象類(lèi)型,值為Object。
對(duì)于Object,spring-redis默認(rèn)使用了jdk自帶的序列化,不推薦使用默認(rèn)了。所以使用了json的序列化方式
對(duì)spring-redis對(duì)redis的五種數(shù)據(jù)類(lèi)型也有支持
HashOperations:對(duì)hash類(lèi)型的數(shù)據(jù)操作ValueOperations:對(duì)redis字符串類(lèi)型數(shù)據(jù)操作
ListOperations:對(duì)鏈表類(lèi)型的數(shù)據(jù)操作
SetOperations:對(duì)無(wú)序集合類(lèi)型的數(shù)據(jù)操作
ZSetOperations:對(duì)有序集合類(lèi)型的數(shù)據(jù)操作
redis操作的工具類(lèi)
packageredis的key工具類(lèi)
package如何使用?
測(cè)試代碼
新建一個(gè)實(shí)體類(lèi):
package再新建一個(gè)測(cè)試類(lèi):
package注解緩存的使用
@Cacheable:在方法執(zhí)行前Spring先查看緩存中是否有數(shù)據(jù),如果有數(shù)據(jù),則直接返回緩存數(shù)據(jù);沒(méi)有則調(diào)用方法并將方法返回值放進(jìn)緩存。
@CachePut:將方法的返回值放到緩存中。
@CacheEvict:刪除緩存中的數(shù)據(jù)。
本文代碼
https://github.com/JayTange/springbootRedis.git參考
https://www.cnblogs.com/chiangchou/p/7748009.htmlhttp://www.cnblogs.com/chiangchou/p/redis-1.html推薦閱讀
1. SpringBoot 整合篇
2. 手寫(xiě)一套迷你版HTTP服務(wù)器
3. 記住:永遠(yuǎn)不要在MySQL中使用UTF-8
4. Springboot啟動(dòng)原理解析
總結(jié)
以上是生活随笔為你收集整理的redis缓存路由为空_Springboot使用RedisTemplate优雅地操作redis的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: r语言plot函数x轴y轴名字_Matp
- 下一篇: java 模板引擎_极简 Spring