初識(shí)Redis睬关,看這一篇就夠了

Redis (全稱: Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個(gè)開源的使用 ANSI C語(yǔ)言 編寫、支持網(wǎng)絡(luò)毡证、可基于內(nèi)存亦可持久化的日志型共螺、 Key-Value數(shù)據(jù)庫(kù) 。

環(huán)境的搭建和安裝網(wǎng)上有很多教程情竹,在這里就不再重復(fù)了。

1. Redis 是什么匀哄?

Redis (全稱: Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個(gè)開源的使用 ANSI C語(yǔ)言 編寫秦效、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型涎嚼、 Key-Value數(shù)據(jù)庫(kù) 阱州。

大家可能知道 Redis 是做緩存用的,它實(shí)際上也是一種數(shù)據(jù)庫(kù)法梯,可以對(duì)經(jīng)常使用到的數(shù)據(jù)進(jìn)行存儲(chǔ)苔货,也就是大家所說(shuō)的緩存。

官方給出的數(shù)據(jù)是立哑, Redis 能達(dá)到 10w+ 的 QPS( 每秒查詢速度 ) 夜惭。

為什么 Redis 的速度比 Mysql 等這種數(shù)據(jù)快呢?

因?yàn)?Redis 存儲(chǔ)的是 key-values 格式的數(shù)據(jù)铛绰,時(shí)間復(fù)雜度是 O(1) 诈茧,即直接通過(guò) key 查詢對(duì)應(yīng)的 value 。 而如 Mysql 數(shù)據(jù)庫(kù)捂掰,底層的實(shí)現(xiàn)是 B+ 樹敢会,時(shí)間復(fù)雜度是 O(logn) 。

最重要的一點(diǎn)是这嚣,數(shù)據(jù)庫(kù)的數(shù)據(jù)是存儲(chǔ)在磁盤中的鸥昏,而 Redis 是存儲(chǔ)在內(nèi)存當(dāng)中的,它們的速度差距不言而喻姐帚。但 Redis 也支持持久化存儲(chǔ)吏垮,這個(gè)后面的常見(jiàn)問(wèn)題里會(huì)提到。

2. Redis 數(shù)據(jù)類型

Redis 支持 5 種數(shù)據(jù)類型: string (字符串)罐旗、 hash (哈希)惫皱、 list (列表,有序可重復(fù))尤莺、 set (集合旅敷,無(wú)序不可重復(fù))、 zset (有序集合颤霎,有序不可重復(fù))媳谁。

Redis 中所有數(shù)據(jù)都是字符串涂滴, key 是區(qū)分大小寫的。

(1)string 是最基本的類型晴音,可以包含任何數(shù)據(jù)柔纵,但是 string 類型的值最大能存儲(chǔ) 512MB 。

(2)hash 的 value 相當(dāng)于一個(gè) map 锤躁, value 里面也有對(duì)應(yīng)的 key-value 搁料,特別適合存儲(chǔ)對(duì)象。一個(gè) hash 可以存儲(chǔ) 2^32-1 個(gè)鍵值對(duì)系羞,基本用不完郭计。并且可以修改某一個(gè)屬性值,所以一般用于存儲(chǔ)用戶或其他實(shí)體類的值椒振。

(3)list 中的 value 按照插入順序排序昭伸,可以在列表的頭部和尾部添加新元素。一般用于最新消息的排行或消息隊(duì)列澎迎。

(4)set 存放的是不重復(fù)值的集合庐杨,是無(wú)序的。并提供了求交集夹供、并集灵份、差集等操作,所以一般用于統(tǒng)計(jì)等功能哮洽。

(5)與 set 不同的是各吨, zset 是通過(guò)分?jǐn)?shù)( score )從小到大進(jìn)行排序的,我們可以指定每個(gè)值的分?jǐn)?shù)袁铐,分?jǐn)?shù)可以重復(fù)揭蜒。一般用于排行等功能。

3.Redis常用命令

基于對(duì)上面 5 種數(shù)據(jù)類型的了解剔桨,接著學(xué)習(xí)一下 Redis 常用命令屉更。更多了命令學(xué)習(xí),推薦大家看一看官方文檔?http://www.redis.cn/commands.html

(1)對(duì)stirng的操作

redis命令不區(qū)分大小寫洒缀。

下面命令中瑰谜,str就是key,hello就是value树绩,append為追加命令萨脑,如果原來(lái)沒(méi)有str,就新建一個(gè)饺饭。

append str hello? ? //對(duì)key為str的鍵追加hello字符串a(chǎn)ppend str redis//str的value變?yōu)閔elloredisset str1 1 ? //set命令設(shè)置一個(gè)key的value值 str1是key渤早,1是valueget str1 //get命令,獲取一個(gè)key的值 incr str1  //incr命令瘫俊,執(zhí)行加1操作鹊杖,比如str1的值會(huì)變成2悴灵,如果指定的key的value不能表示一個(gè)整數(shù),就會(huì)返回一個(gè)錯(cuò)誤decr str1  //減一操作

(2)對(duì)hash的操作

上面說(shuō)到過(guò)骂蓖,hash的value相當(dāng)于一個(gè)map积瞒,所以只設(shè)置值的時(shí)候myhash是key,h1是value里面的key登下,hello是h1的value

hset myhash h1 hello//設(shè)置一個(gè)key的value值hget myhash h1//返回hello茫孔,myhash為key,h1是value里面的key被芳,兩個(gè)都需要指定hlen myhash//獲取myhash的字段數(shù)量缰贝,這里返回1hkeys myhash//獲取myhash所以字段,這里返回h1

(3)對(duì)list的操作

mylst是key筐钟,a,b,c,d都是value,并且有順序赋朦,所以實(shí)際存進(jìn)去后是d,c,b,a

lpush mylist a b c d//lpush,從隊(duì)列左邊入隊(duì)一個(gè)或多個(gè)元素lrange mylist 0 -1//獲取指定范圍的值篓冲,從0開始,-1代表全部宠哄,注意這里返回d,c,b,a壹将。rpush mylist 1 2 3//從右邊入隊(duì),再次lrange的話就是d,c,b,a,1,2,3lpop mylist//從左邊彈出一個(gè)元素,這里彈出d,此時(shí)的mylist就沒(méi)有d了

(4)對(duì)set的操作

如果我們添加了重復(fù)的元素毛嫉,不會(huì)報(bào)錯(cuò)诽俯,但只會(huì)存一個(gè)。如a b b承粤,只會(huì)存a b

兩個(gè)集合之間不受影響暴区,即key為myset和myset2兩個(gè)集合里面都可以有a b

sadd myset a b c d//添加一個(gè)或多個(gè)元素到集合里面smembers myset//獲取集合里所有元素,輸出是無(wú)序的辛臊,隨機(jī)的仙粱。這里可能是b,d,c,asrem myset a c//移除myset中的a和c元素,由于不可能重復(fù)也沒(méi)順序彻舰,所以可以直接指定元素值來(lái)移除

(5)對(duì)zset的操作

myzset為key伐割,a b c前面的數(shù)字就是score

zadd myzset 2 b 1 a 3 c//添加一個(gè)或多個(gè)元素zrange myzset 0 -1//獲取指定范圍的值,0開始刃唤,-1代表全部隔心。這里返回a,b,c

更多的命令可以看上面網(wǎng)站中的文檔,寫的非常詳細(xì)尚胞,下面的常見(jiàn)問(wèn)題中也會(huì)提及一些硬霍。

4.Redis常見(jiàn)問(wèn)題

(1)在大量的key中查詢某一固定前綴的key

在實(shí)際的業(yè)務(wù)當(dāng)中,key的命名是有規(guī)范的笼裳,比如緩存用戶信息须尚,key的前綴可能會(huì)是user崖堤。

現(xiàn)在有幾千萬(wàn)條數(shù)據(jù),查詢user為前綴的key的話耐床,第一下想到的可能會(huì)是keys命令

keys user*//user*為正則表達(dá)式

其時(shí)間復(fù)雜度為O(n)密幔,雖然性能也算可以,但是在查詢幾千萬(wàn)條數(shù)據(jù)時(shí)明顯太慢了撩轰,花上幾分鐘都不稀奇胯甩,而且在查詢出來(lái)之前,可能會(huì)造成服務(wù)卡頓堪嫂,占用大量?jī)?nèi)存偎箫,顯然是不可取的。

那么這種情況就可以使用scan命令

下面的命令中皆串,math count為可選項(xiàng)淹办,可用可不用,所以需要顯示的寫出來(lái)恶复。math意味后面會(huì)匹配一個(gè)正則表達(dá)式怜森。count代表一次查詢10條。

這個(gè)10條不是強(qiáng)制的谤牡,可能會(huì)比10條少副硅。

scan 0 math user*? count 10//從0開始,查詢user為前綴的key翅萤,一次查詢10條并返回

執(zhí)行上面一句話后恐疲,會(huì)返回兩個(gè)東西,一個(gè)游標(biāo)套么,代表執(zhí)行到哪了培己,比如執(zhí)行到了14325。返回的另一個(gè)就是user為前綴的key了胚泌。

下次再執(zhí)行這條語(yǔ)句時(shí)漱凝,把0換成14325,接著上次的位置繼續(xù)查詢诸迟。但是游標(biāo)不一定是遞增的茸炒,也許下次的游標(biāo)比這次還小,所以存在重復(fù)的隱患阵苇。

我們可以在業(yè)務(wù)代碼處循環(huán)查詢壁公,記錄每次返回的游標(biāo),并把查詢的key存入到set當(dāng)中绅项,起到去重的效果紊册。

scan,實(shí)際上就是分批查詢,速度顯然沒(méi)有keys快囊陡,在查詢大量數(shù)據(jù)時(shí)芳绩,不會(huì)對(duì)服務(wù)器造成壓力。數(shù)據(jù)量不大時(shí)依舊推薦keys撞反。

(2)利用Redis實(shí)現(xiàn)分布式鎖

首先了解什么是分布式鎖妥色。即控制分布式系統(tǒng)訪問(wèn)共享資源的一種方式。

比如系統(tǒng)(或主機(jī))A和B都需要訪問(wèn)資源DataA時(shí)遏片,當(dāng)A先訪問(wèn)到了DataA嘹害,這時(shí)候就需要分布式鎖來(lái)把B擋住,防止A和B彼此干擾吮便,保證數(shù)據(jù)的一致性笔呀。

額外提一點(diǎn)就是,Redis命令的操作是原子性的髓需,原子性在數(shù)據(jù)庫(kù)的事務(wù)中有體現(xiàn)许师,Redis的命令也是原子性的,要么執(zhí)行要么不執(zhí)行僚匆,不會(huì)出現(xiàn)一個(gè)命令執(zhí)行到一半失敗了微渠,但還是改變了數(shù)據(jù)的問(wèn)題。

實(shí)現(xiàn)分布式鎖白热,需要解決一下幾個(gè)問(wèn)題:

1.互斥性敛助,即任意時(shí)刻只能有一個(gè)客戶端獲取鎖粗卜。

2.安全性屋确,鎖只能有持有它的客戶端刪除,不能由其他客戶端刪除续扔。

3.死鎖攻臀,即由于某些原因,一些客戶端出現(xiàn)問(wèn)題不能及時(shí)釋放鎖纱昧,導(dǎo)致其他客戶端也不能獲取鎖刨啸。

4.容錯(cuò),當(dāng)某些Redis節(jié)點(diǎn)出現(xiàn)問(wèn)題時(shí)识脆,客戶端也要能獲取到鎖设联。

我們可以用setnx實(shí)現(xiàn)鎖的功能。語(yǔ)法:setnx key value

僅當(dāng)key不存在時(shí)灼捂,才會(huì)設(shè)置成功离例。成功返回1,否則返回0悉稠。

1.在對(duì)應(yīng)的訪問(wèn)資源的業(yè)務(wù)代碼處宫蛆,對(duì)指定的key設(shè)值,如果成功了的猛,則代表沒(méi)有其他線程執(zhí)行過(guò)這段代碼耀盗,也就是沒(méi)有其他線程訪問(wèn)這個(gè)資源想虎。

如果設(shè)值失敗,就代表有其他線程占用該資源叛拷,就一直等待舌厨,直到setnx成功。

2.還有個(gè)問(wèn)題就是胡诗,這個(gè)key是長(zhǎng)期有效的邓线,所以還需要用到expire命令,語(yǔ)法:expire key seconds,seconds單位為秒煌恢,用以設(shè)置對(duì)應(yīng)key的過(guò)期時(shí)間骇陈。

上面兩步似乎好像是實(shí)現(xiàn)了鎖的功能,但是缺陷也非常明顯瑰抵,如果成功設(shè)值后你雌,在我設(shè)置時(shí)間之前客戶端就出現(xiàn)問(wèn)題了怎么辦??用兩個(gè)命令實(shí)現(xiàn)一個(gè)功能有悖于Redis的原子性?二汛。

在Redis2.6.12版本開始婿崭,set有兩個(gè)參數(shù),就是實(shí)現(xiàn)了以上兩個(gè)功能肴颊。雖然上面兩步分開的做法是錯(cuò)的氓栈,但是思路是一樣的。

具體語(yǔ)法:?set key value ex 10 nx?婿着。ex代表過(guò)期時(shí)間授瘦,這里設(shè)置10秒過(guò)期,nx代表key是要唯一的竟宋,即一個(gè)命令實(shí)現(xiàn)了以上兩個(gè)步驟提完。

最后還有一個(gè)小問(wèn)題,如果不同資源同時(shí)設(shè)置了鎖key丘侠,過(guò)期時(shí)間也是一樣的徒欣,到期后Redis同時(shí)刪除大量key時(shí),難免會(huì)出現(xiàn)卡頓蜗字。

解決方法就是在設(shè)置過(guò)期值時(shí)加上隨機(jī)值打肝。

3.利用Redis實(shí)現(xiàn)消息隊(duì)列

消息隊(duì)列,簡(jiǎn)稱MQ挪捕,即消息和隊(duì)列兩個(gè)單詞的首字母縮寫粗梭。常見(jiàn)的消息隊(duì)列有RabbitMQ和RocketMQ等,利用Redis實(shí)現(xiàn)消息隊(duì)列只是熟悉下其特點(diǎn)担神,實(shí)際當(dāng)中一般會(huì)使用專門的消息隊(duì)列中間件楼吃。

如果之前沒(méi)了解過(guò)消息隊(duì)列,建議搜索一下消息隊(duì)列相關(guān)知識(shí)進(jìn)行一下簡(jiǎn)單的學(xué)習(xí)。

簡(jiǎn)單地說(shuō)孩锡,消息隊(duì)列的作用就是接受客戶端的請(qǐng)求酷宵,然后對(duì)這些請(qǐng)求依次處理,一般應(yīng)用請(qǐng)求量特別大時(shí)躬窜,比如秒殺搶購(gòu)等浇垦。上面介紹數(shù)據(jù)類型時(shí)就說(shuō)到了list一般用于消息隊(duì)列。

看一下list的常見(jiàn)操作荣挨,雖然叫做列表男韧,但其特點(diǎn)和數(shù)據(jù)結(jié)構(gòu)的隊(duì)列基本一模一樣。所以在用Redis實(shí)現(xiàn)消息隊(duì)列時(shí)默垄,首先肯定會(huì)想到list此虑。

1.利用list的話,仿佛?使用rpush生產(chǎn)消息口锭,lpop消費(fèi)消息?就行了朦前。但是有一個(gè)小問(wèn)題,lpop不會(huì)等待rpush的鹃操,當(dāng)rpush還沒(méi)來(lái)得及生成數(shù)據(jù)時(shí)韭寸,這時(shí)lpop會(huì)直接返回null的。

2.既然要等待rpush生成數(shù)據(jù)荆隘,難免又會(huì)想到一個(gè)命令blpop,其語(yǔ)法為:blpop key seconds恩伺。 和lpop功能一樣,但是會(huì)等待指定的時(shí)間椰拒,這段時(shí)間內(nèi)rpush如果生成數(shù)據(jù)的話晶渠,blpop會(huì)及時(shí)返回。

3. 但是blpop的缺點(diǎn)也很明顯耸三,當(dāng)然這個(gè)缺點(diǎn)也存在于lpop當(dāng)中乱陡,就是blpop執(zhí)行完后浇揩,代表出隊(duì)仪壮,rpush生成的這條消息就沒(méi)了,而消息隊(duì)列中有的需求是需要多個(gè)消費(fèi)者去接收的胳徽。

這時(shí)候就可以用上?Redis的訂閱者模式?积锅,Redis客戶端可以訂閱任意數(shù)量的頻道(Topic)

在Redis當(dāng)中用subscribe命令訂閱一個(gè)頻道,語(yǔ)法subscribe topic养盗,topic就是自定義的頻道名稱缚陷,注意是topic不是key,?不需要事先定義往核,直接訂閱就行了箫爷。

然后用publish生產(chǎn)消息,語(yǔ)法publish topic value,topic就是你想發(fā)布到哪個(gè)頻道,value就是數(shù)據(jù)內(nèi)容虎锚,而訂閱了這個(gè)頻道的所有消費(fèi)者都會(huì)接收到消息硫痰。?注意是及時(shí)收到,不需要你再去手動(dòng)用命令獲取窜护。

訂閱者模式效斑,的確解決了以上兩種方法的缺點(diǎn),但是其缺陷也很明顯柱徙,就是只有處于訂閱者模式缓屠,也就是監(jiān)聽(tīng)狀態(tài)下,消費(fèi)者才會(huì)接受到生產(chǎn)者的消息护侮,也就是及時(shí)發(fā)送及時(shí)接收的敌完,一旦Redis客戶端下線,就永遠(yuǎn)不會(huì)接收到這個(gè)消息了羊初。

這就回到了前面說(shuō)到的一句話蠢挡,實(shí)際當(dāng)中會(huì)使用專門的消息隊(duì)列中間件來(lái)說(shuō)實(shí)現(xiàn)這些功能,以上三種方法或多或少可以實(shí)現(xiàn)消息隊(duì)列的功能凳忙,但是缺陷也非常明顯业踏。

4.Redis如何做持久化

Redis是基于內(nèi)存當(dāng)中的,那么肯定就會(huì)有疑問(wèn)了涧卵,當(dāng)我關(guān)閉主機(jī)或者關(guān)閉了Redis勤家,那Redis的數(shù)據(jù)是不是就全沒(méi)了。

持久化的作用就是柳恐,把Redis的數(shù)據(jù)存儲(chǔ)到磁盤當(dāng)中伐脖,以免Redis的數(shù)據(jù)丟失。

Redis有兩種持久化機(jī)制乐设,默認(rèn)的一種是RDB,另一種是AOF讼庇。

1.RDB(快照)持久化會(huì)在某個(gè)時(shí)間點(diǎn)保存全量的數(shù)據(jù),快照即針對(duì)內(nèi)存進(jìn)行的快速讀取技術(shù)近尚。而這個(gè)時(shí)間點(diǎn)可以由我們的實(shí)際業(yè)務(wù)進(jìn)行時(shí)間策略配置蠕啄。

RDB會(huì)按照時(shí)間周期策略對(duì)數(shù)據(jù)以快照的方式保存到磁盤里,并產(chǎn)生一個(gè)?dump.rdb的二進(jìn)制文件?戈锻。我們可以在redis.conf配置文件中save參數(shù)查看和配置時(shí)間策略歼跟。

dump.rdb文件是如何創(chuàng)建的呢??rdb文件可以通過(guò)兩個(gè)命令創(chuàng)建?格遭,一個(gè)是save,一個(gè)是bgsave哈街。 要注意這里的save是redis命令,上面提到的save是配置文件里面的參數(shù)拒迅。

save命令會(huì)阻塞Redis服務(wù)器進(jìn)程骚秦,直到rdb文件創(chuàng)建完成她倘,一般很少使用。

bgsave命令會(huì)fork出一個(gè)子進(jìn)程來(lái)創(chuàng)建rdb文件作箍,不會(huì)阻塞服務(wù)器進(jìn)程帝牡。fork即創(chuàng)建一個(gè)與父進(jìn)程幾乎一樣的子進(jìn)程。

bgsave的基本原理:當(dāng)我們使用bgsave命令時(shí)蒙揣,首先會(huì)檢查是否存在RDB/AOF子進(jìn)程正在進(jìn)行靶溜,有的話就返回錯(cuò)誤,即當(dāng)我們第一次執(zhí)行了bgsave懒震,在執(zhí)行完之前其他的bgsave會(huì)被拒絕執(zhí)行罩息。

如果沒(méi)有正在進(jìn)行的子進(jìn)程,就會(huì)調(diào)用redis源碼里面的rdbSaveBackground這個(gè)方法个扰,然后利用fork創(chuàng)建一個(gè)子進(jìn)程瓷炮。

RDB的缺點(diǎn):

1.1.前面提到,在某個(gè)時(shí)間點(diǎn)會(huì)進(jìn)行全量數(shù)據(jù)保存递宅,數(shù)據(jù)量大的話由于I/O而嚴(yán)重影響到性能娘香。

1.2.由于RDB是根據(jù)配置文件里面的時(shí)間策略進(jìn)行保存的,如果發(fā)生意外情況办龄,那么上次保存到當(dāng)前時(shí)間段內(nèi)的數(shù)據(jù)會(huì)發(fā)生丟失烘绽。

2.AOF(Append-Only-File)持久化 會(huì)以追加的方式(append)保存除了查詢指令以外所有變更的數(shù)據(jù),其默認(rèn)的文件名稱為?appendonly.aof?俐填。

AOF持久化默認(rèn)是關(guān)閉的安接,我們可以 在配置文件當(dāng)中找到appendonly參數(shù),把它的參數(shù)內(nèi)容改為yes英融。

前面說(shuō)到AOF文件會(huì)記錄所有非查詢的所有指令盏檐,最后肯定難以避免文件不斷增大的問(wèn)題,最主要的問(wèn)題是記錄的很多數(shù)據(jù)是不必要的驶悟。

比如循環(huán)更新一個(gè)數(shù)100次胡野,AOF會(huì)記錄這100個(gè)過(guò)程,而我們只需要最終結(jié)果就行了痕鳍。

所以硫豆, Redis提供了一個(gè)日志重寫的功能解決文件不斷增大的問(wèn)題 ,可以用BGREWRITEAOF命令手動(dòng)執(zhí)行额获。日志重寫在服務(wù)不中斷的情況下也能執(zhí)行够庙,?其基本原理如下?:

1.使用fork創(chuàng)建一個(gè)子進(jìn)程恭应。2.子進(jìn)程把新的AOF寫道一個(gè)臨時(shí)文件里抄邀,并不會(huì)依賴現(xiàn)有的AOF文件,只需要讀取內(nèi)存中的數(shù)據(jù)昼榛。這里就優(yōu)化了很多不必要的數(shù)據(jù)境肾。

2.主進(jìn)程這時(shí)候會(huì)依舊將新的變動(dòng)寫到內(nèi)存里剔难,也會(huì)寫到現(xiàn)有的AOF文件里,即使子進(jìn)程重寫失敗奥喻,數(shù)據(jù)也不會(huì)丟失偶宫。4.主進(jìn)程獲取到子進(jìn)程AOF重寫完成的信號(hào)后,會(huì)把新的變動(dòng)追加到新的AOF文件里环鲤。

3.最后使用新的AOF文件替換掉原來(lái)的AOF文件纯趋。

如果啟用了AOF持久化,Redis啟動(dòng)時(shí)會(huì)先檢查AOF文件是否存在冷离,如果存在就直接加載AOF文件吵冒,如果不存在就檢查RDB文件是否存在,如果存在就加載西剥,不存在就直接啟動(dòng)Redis痹栖。

在Redis4.0之后,推出了RDB-AOF混合持久化方式并作為默認(rèn)方式瞭空,RDB全量保存揪阿,AOF增量保存,集成了它們各自的優(yōu)點(diǎn)咆畏。

5.SpringBoot整合Redis

首先在依賴項(xiàng)里面添加redis啟動(dòng)器

spring-boot-starter-data-redis

然后在配置文件里面進(jìn)行相關(guān)的配置南捂,更多的配置可以看RedisProperties.java源碼查看。

spring.redis.host=127.0.0.1? ? #redis地址spring.redis.port=6379? ? #redis服務(wù)端口號(hào)

最后注入相關(guān)的類

//操作的是復(fù)雜類型旧找,比如各種實(shí)體類@AutowiredRedisTemplate redisTemplate//操作的是字符串@AutowiredStringRedisTemplate stringRedisTemplate

SpringBoot框架下對(duì)Redis的操作不像Jedis那樣可以直接使用原生的Redis命令黑毅,具體的API大家可以自行搜索相關(guān)的文檔。

不過(guò)推薦使用一些SpringBoot的Redis工具類钦讳,工具類會(huì)對(duì) RedisTemplate和StringRedisTemplate的方法進(jìn)行封裝矿瘦,而封裝后的方法名和Redis原生命令是一樣的。

最后愿卒,希望閱讀此文后能讓你軟件開發(fā)的過(guò)程中 缚去,能更好的學(xué)習(xí)Redis。另外小編分類整理了許多java進(jìn)階學(xué)習(xí)材料和BAT面試題琼开,需要資料的請(qǐng)轉(zhuǎn)發(fā)此文章后再私聊小編回復(fù)【java】就能領(lǐng)取2019年java進(jìn)階學(xué)習(xí)資料和BAT面試題以及《Effective Java》(第3版)電子版書籍易结。也可以加群:712263501領(lǐng)取海量學(xué)習(xí)資料進(jìn)行學(xué)習(xí)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柜候,一起剝皮案震驚了整個(gè)濱河市搞动,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渣刷,老刑警劉巖鹦肿,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辅柴,居然都是意外死亡箩溃,警方通過(guò)查閱死者的電腦和手機(jī)瞭吃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涣旨,“玉大人歪架,你說(shuō)我怎么就攤上這事∨福” “怎么了和蚪?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)烹棉。 經(jīng)常有香客問(wèn)我惠呼,道長(zhǎng),這世上最難降的妖魔是什么峦耘? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任剔蹋,我火速辦了婚禮,結(jié)果婚禮上辅髓,老公的妹妹穿的比我還像新娘泣崩。我一直安慰自己,他們只是感情好洛口,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布矫付。 她就那樣靜靜地躺著,像睡著了一般第焰。 火紅的嫁衣襯著肌膚如雪买优。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天挺举,我揣著相機(jī)與錄音杀赢,去河邊找鬼。 笑死湘纵,一個(gè)胖子當(dāng)著我的面吹牛脂崔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梧喷,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼砌左,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了铺敌?” 一聲冷哼從身側(cè)響起汇歹,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偿凭,沒(méi)想到半個(gè)月后产弹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笔喉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年取视,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了硝皂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片常挚。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡作谭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奄毡,到底是詐尸還是另有隱情折欠,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布吼过,位于F島的核電站锐秦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盗忱。R本人自食惡果不足惜酱床,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趟佃。 院中可真熱鬧扇谣,春花似錦、人聲如沸闲昭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)序矩。三九已至鸯绿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簸淀,已是汗流浹背瓶蝴。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留租幕,地道東北人囊蓝。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像令蛉,于是被迫代替她去往敵國(guó)和親聚霜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表珠叔,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)蝎宇,如redis,volde...
    MicoCube閱讀 4,000評(píng)論 2 27
  • Nosql概述 在介紹Redis之前祷安,首先先要介紹Nosql的概念姥芥。 互聯(lián)網(wǎng)架構(gòu)發(fā)展 在90年代的時(shí)候,計(jì)算機(jī)訪問(wèn)...
    COKIDCC閱讀 690評(píng)論 0 1
  • Redis雜談 Redis是近年來(lái)發(fā)展迅速的內(nèi)存數(shù)據(jù)庫(kù)汇鞭,網(wǎng)上也已經(jīng)有多Redis的文章凉唐。但不管是英文還是中文庸追,多數(shù)...
    迷失于重逢閱讀 1,566評(píng)論 0 14
  • 一、Redis高可用概述 在介紹Redis高可用之前台囱,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義淡溯。 我們知道,在w...
    空語(yǔ)閱讀 1,598評(píng)論 0 2
  • 為一名iOS開發(fā)簿训,蘋果已經(jīng)在強(qiáng)制推行內(nèi)購(gòu)了咱娶,所以,你不得不了解一下啦强品”煳辏可能還有些人不知道哪種情況下一定要用到內(nèi)購(gòu),...
    獨(dú)酌丿紅顏閱讀 3,706評(píng)論 2 7