超詳細(xì)的redis學(xué)習(xí)(2)-進(jìn)階篇

redis多數(shù)據(jù)庫

說明:一個redis實(shí)例可以包含多個數(shù)據(jù)庫,客戶端可以指定連接某個數(shù)據(jù)庫(與MySql客戶端我們創(chuàng)建多個數(shù)據(jù)庫類似)一個redis實(shí)例最多可以提供16個數(shù)據(jù)庫跑筝,下標(biāo)是從0到15制轰,默認(rèn)連接的是第0號數(shù)據(jù)庫栅组。

代碼相關(guān)演示:

127.0.0.1:6379> select 1  //選擇數(shù)據(jù)庫1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set string1 2 
OK
127.0.0.1:6379> keys *  //查詢所有的key
1) "hsah1"
2) "list1"
3) "set1"
4) "list2"
5) "string1"
6) "hash1"
7) "string2"
127.0.0.1:6379> move list1 1  //移動list1到數(shù)據(jù)庫1
(integer) 1
127.0.0.1:6379> move set1 1
(integer) 1
127.0.0.1:6379> keys *
1) "hsah1"
2) "list2"
3) "string1"
4) "hash1"
5) "string2"
127.0.0.1:6379> select 1 
OK
127.0.0.1:6379[1]> keys *
1) "list1"
2) "set1"
127.0.0.1:6379[1]> type set1 //獲取數(shù)據(jù)類型
set
127.0.0.1:6379[1]>

可以試著敲一遍瑟俭,查看注釋基本明白了redis多數(shù)據(jù)庫的使用

redis事務(wù)的概念

  • 事務(wù)的基本命令

1)multi 標(biāo)記一個事務(wù)的開始

2)exec 執(zhí)行所有事務(wù)塊內(nèi)的命令

3)discard 取消事務(wù)障斋,放棄執(zhí)行事務(wù)塊內(nèi)的所有命令

  • 事務(wù)特性

1)事務(wù)中的命令都是串行執(zhí)行的辱士。

2)事務(wù)執(zhí)行期間redis不會再對其它的客戶端提供任何服務(wù)泪掀,從而保證事務(wù)中的命令能夠原子化執(zhí)行。

3)單個 Redis 命令的執(zhí)行是原子性的颂碘,但 Redis 沒有在事務(wù)上增加任何維持原子性的機(jī)制异赫,所以 Redis 事務(wù)的執(zhí)行并不是原子性的。事務(wù)可以理解為一個打包的批量執(zhí)行腳本,但批量指令并非原子化的操作塔拳,中間某條指令的失敗不會導(dǎo)致前面已做指令的回滾鼠证,也不會造成后續(xù)的指令不做。

  • 代碼實(shí)例
redis 127.0.0.1:6379> MULTI   //開啟事務(wù)
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC //提交事務(wù)
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

redis數(shù)據(jù)持久化

  • RDB數(shù)據(jù)持久化方式

優(yōu)勢

1)redis數(shù)據(jù)庫會只包含一個文件存儲在硬盤中靠抑,對于文件備份會簡單很多量九。

2)對于災(zāi)難恢復(fù),RDB是更好的選擇颂碧,因?yàn)橐粋€文件可以直接拷貝走荠列,拷貝回來。

3)性能最大化载城,redis開始持久化的時候只分出一些子進(jìn)程肌似,之后這些子進(jìn)程會完成持久化工作,避免了服務(wù)器進(jìn)程執(zhí)行io的操作。數(shù)據(jù)集很大的時候诉瓦,啟動效率會更高川队。

缺點(diǎn)

1)最大限度的避免數(shù)據(jù)丟失,RDB做的不是特別好垦搬,系統(tǒng)一定在定時持久化之前出現(xiàn)一些檔期的情況呼寸,還沒有來得及往硬盤上寫,數(shù)據(jù)已經(jīng)丟失掉猴贰。

2)因?yàn)镽DB是通過開啟子進(jìn)程的方式來進(jìn)行持久化操作的对雪,因此當(dāng)數(shù)據(jù)集比較大的時候,這個過程可能會導(dǎo)致服務(wù)器停止一定事件米绕,幾十毫秒甚至1秒瑟捣。

配置

linux目錄中/usr/local/redis/redis-conf目錄中找到這樣的幾行代碼

save 900 1
save 300 10
save 60 10000

第一行代碼表示:900秒,也就是15分鐘至少又一個key發(fā)生變化就會持久化一次栅干。

第二行代碼表示:300秒迈套,至少有10個key發(fā)生變化就會往硬盤中持久化一次。

第三行代碼表示:60秒碱鳞,至少有10000個key發(fā)生變化就會往硬盤中持久化一次桑李。

dbfilename dump.rdb

配置中繼續(xù)往下看,看到這樣一行代碼窿给,這個dump是數(shù)據(jù)庫的名字贵白。

往下一段代碼

dir ./

保存路徑位置,就是當(dāng)前目錄下的上面的名字崩泡,就是持久化的數(shù)據(jù)庫

  • AOF數(shù)據(jù)持久化方式

優(yōu)勢

1)可以帶來更高的數(shù)據(jù)安全性禁荒,這種數(shù)據(jù)持久化方式有三種同步策略,每秒同步角撞,每修改同步(每一次發(fā)生數(shù)據(jù)的變化都會立即被記錄到磁盤中呛伴,效率最低但是最安全)勃痴,不同步。

2)日志的寫入操作是采用append追加的模式热康,在寫入過程中即使出現(xiàn)服務(wù)器檔期問題沛申,也不會破壞日志文件中已經(jīng)寫入的內(nèi)容。

3)如果日志過大褐隆,redis可以自動啟動重寫機(jī)制污它,redis會不斷的將修改的數(shù)據(jù)寫入到老的磁盤當(dāng)中,同時redis會創(chuàng)建一個新的文件來記錄此期間產(chǎn)生了哪些修改命令被執(zhí)行了庶弃。

4)AOF包含一個格式非常清晰易于理解的日志文件衫贬,用于記錄所有的修改操作。通過這個文件就可以完成數(shù)據(jù)的重建歇攻。

劣勢

1)對于相同的數(shù)據(jù)集文件固惯,AOF要比RDB文件大。

2)根據(jù)同步策略的不同缴守,AOF在運(yùn)行效率上往往低于RDB葬毫,AOF每修改就同步到硬盤上效率肯定是沒有RDB高的。

>   配置

linux目錄中/usr/local/redis/redis-conf目錄中找到這樣的幾行代碼

appendonly no

# The name of the append only file(default:"appendonly.aof")

appendfilename "appendonly.aof"

如果使用AOF的持久還方式,需要把a(bǔ)ppendonly 后面的屬性變?yōu)閥es

appendonly.aof是用來記錄所有修改操作的文件,這個文件還可以用來進(jìn)行數(shù)據(jù)的恢復(fù)等崔步,例如一條刪除操作成功后赡茸,我們在appendonly.aof文件中把刪除命令去掉印蔗,重新運(yùn)行redis,之前的數(shù)據(jù)又都會恢復(fù)

# appendfsync always
appendfsync everysec
# appendfsync no

這段代碼是關(guān)于同步策略的一個設(shè)置,第一條是每修改就同步持久化,第二條是每秒同步持久化一次汛骂,第三條是不同步持久化。

說明:按照redis之后默認(rèn)選擇的是RDB方式评腺,還有在修改過redis-config之后注意要重新啟動redis服務(wù)才能生效

高難度
http://blog.51cto.com/hmtk520/2115789

redis中的key設(shè)置過期時間

設(shè)置時間格式
EXPIRE key secords

  • 設(shè)置過期時間后的一些說明
  1. 當(dāng)給定的key設(shè)置了生存時間帘瞭,當(dāng)key過期時(生存/過期為0),它會被自動刪除
  2. redis中帶有生存時間的key被稱為易失(volatile)的
  3. 生存時間可以通過使用 DEL 命令來刪除整個 key 來移除蒿讥,或者被 SET 和 GETSET 命令覆寫(overwrite)蝶念,這意味著,如果一個命令只是修改(alter)一個帶生存時間的 key 的值而不是用一個新的 key 值來代替(replace)它的話芋绸,那么生存時間不會被改變媒殉。
  4. 對一個 key 執(zhí)行 INCR 命令,對一個列表進(jìn)行 LPUSH 命令侥钳,或者對一個哈希表執(zhí)行 HSET 命令适袜,這類操作都不會修改 key 本身的生存時間柄错。
  5. 使用 RENAME 對一個 key 進(jìn)行改名舷夺,那么改名后的 key 的生存時間和改名前一樣苦酱。RENAME 命令的另一種可能是,嘗試將一個帶生存時間的 key 改名成另一個帶生存時間的 another_key 给猾,這時舊的 another_key (以及它的生存時間)會被刪除疫萤,然后舊的 key 會改名為 another_key ,因此敢伸,新的 another_key 的生存時間也和原本的 key 一樣扯饶。
  6. 使用 PERSIST 命令可以在不刪除 key 的情況下,移除 key 的生存時間池颈,讓 key 重新成為一個『持久的』(persistent) key 尾序。
  • 更新過期(生存)時間

可以對一個已經(jīng)帶有生存時間的 key 執(zhí)行 EXPIRE 命令,新指定的生存時間會取代舊的生存時間躯砰。

代碼如下:

redis> SET cache_audio "hello koala"
OK
 
redis> EXPIRE cache_audio 30  # 設(shè)置過期時間為 30 秒
(integer) 1
 
redis> EXPIRE cache_audio 30000   # 更新過期時間
(integer) 1
 
redis> TTL cache_audio    # 查看剩余生存時間
(integer) 29996 

注意在設(shè)置過期時間的時候:
返回值:

設(shè)置成功返回 1 每币。

當(dāng) key 不存在或者不能為 key 設(shè)置生存時間時(比如在低于 2.1.3 版本的 Redis 中你嘗試更新 key 的生存時間),返回 0 琢歇。

  • 過期時間的精確度

在Redis2.4版本中兰怠,過期時間的延遲在一秒之內(nèi),可以簡單的說李茫,就算key已經(jīng)過期揭保,但它還是可能在過期一秒之內(nèi)被訪問到,在新的Redis2.6版本中魄宏,延遲被降低到了一毫秒之內(nèi)秸侣。

  • 不同版本redis設(shè)置過期時間的問題

在redis2.1.3之前的版本中,修改一個帶有生存時間的key會導(dǎo)致整個key被刪除娜庇,這一行為是受當(dāng)時復(fù)制(replication)層的限制而作出的塔次,現(xiàn)在這一限制已經(jīng)被修復(fù)。

  • 如何查看剩余時間
    使用TT
    代碼如下:
redis> SET cache_audio "hello koala"
OK
 
redis> EXPIRE cache_audio 30  # 設(shè)置過期時間為 30 秒
(integer) 1
 
redis> TTL cache_audio    # 查看剩余生存時間
(integer) 23
  • 如何為redis文件夾下的所有key設(shè)置過期時間
    圖在電腦桌面有(redis設(shè)置過期時間)
    我本地的redis 怎么設(shè)置haha.* 的所有過期時間而不是一個固定的key

覺得本文對你有幫助名秀?請分享給更多人

我的公眾號.jpg

歡迎大家關(guān)注我的公眾號——程序員成長指北励负。請自行微信搜索——“程序員成長指北”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市匕得,隨后出現(xiàn)的幾起案子继榆,更是在濱河造成了極大的恐慌,老刑警劉巖汁掠,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件略吨,死亡現(xiàn)場離奇詭異,居然都是意外死亡考阱,警方通過查閱死者的電腦和手機(jī)翠忠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乞榨,“玉大人秽之,你說我怎么就攤上這事当娱。” “怎么了考榨?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵跨细,是天一觀的道長。 經(jīng)常有香客問我河质,道長冀惭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任掀鹅,我火速辦了婚禮散休,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乐尊。我一直安慰自己溃槐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布科吭。 她就那樣靜靜地躺著昏滴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪对人。 梳的紋絲不亂的頭發(fā)上谣殊,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音牺弄,去河邊找鬼姻几。 笑死,一個胖子當(dāng)著我的面吹牛势告,可吹牛的內(nèi)容都是我干的蛇捌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼咱台,長吁一口氣:“原來是場噩夢啊……” “哼络拌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起回溺,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤春贸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后遗遵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萍恕,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年车要,在試婚紗的時候發(fā)現(xiàn)自己被綠了允粤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖类垫,靈堂內(nèi)的尸體忽然破棺而出绳姨,到底是詐尸還是另有隱情,我是刑警寧澤阔挠,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站脑蠕,受9級特大地震影響购撼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谴仙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一迂求、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晃跺,春花似錦揩局、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烹玉,卻和暖如春驰怎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背二打。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工县忌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人继效。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓症杏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瑞信。 傳聞我的和親對象是個殘疾皇子厉颤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

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

  • 一、Redis高可用概述 在介紹Redis高可用之前凡简,先說明一下在Redis的語境中高可用的含義走芋。 我們知道,在w...
    空語閱讀 1,593評論 0 2
  • 原帖地址:http://www.reibang.com/p/2f14bc570563 redis概述 Redis...
    onlyHalfSoul閱讀 2,159評論 0 28
  • 五種數(shù)據(jù)結(jié)構(gòu)簡介 Redis是使用C編寫的潘鲫,內(nèi)部實(shí)現(xiàn)了一個struct結(jié)構(gòu)體redisObject對象翁逞,通過結(jié)構(gòu)體...
    彥幀閱讀 6,934評論 0 14
  • 企業(yè)級redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的溉仑,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,194評論 0 7
  • 1.1 資料 挖函,最好的入門小冊子,可以先于一切文檔之前看浊竟,免費(fèi)怨喘。 作者Antirez的博客津畸,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,036評論 1 51