redis

類型常量 對象的名稱
REDIS_STRING 字符串對象
REDIS_LIST 列表對象
REDIS_HASH 哈希對象
REDIS_SET 集合對象
REDIS_ZSET 有序集合對象
緩存穿透

什么是緩存穿透轻黑?

一般的緩存系統(tǒng)瘫证,都是按照key去緩存查詢颅筋,如果不存在對應(yīng)的value像街,就應(yīng)該去后端系統(tǒng)查找(比如DB)凤巨。如果key對應(yīng)的value是一定不存在的戈锻,并且對該key并發(fā)請求量很大稍途,就會對后端系統(tǒng)造成很大的壓力呕童。這就叫做緩存穿透。

如何避免意蛀?

1:對查詢結(jié)果為空的情況也進(jìn)行緩存耸别,緩存時(shí)間設(shè)置短一點(diǎn),或者該key對應(yīng)的數(shù)據(jù)insert了之后清理緩存县钥。

2:對一定不存在的key進(jìn)行過濾秀姐。可以把所有的可能存在的key放到一個(gè)大的Bitmap中若贮,查詢時(shí)通過該bitmap過濾省有⊙髁簦【感覺應(yīng)該用的不多吧】

什么是緩存雪崩?

當(dāng)緩存服務(wù)器重啟或者大量緩存集中在某一個(gè)時(shí)間段失效锥咸,這樣在失效的時(shí)候狭瞎,也會給后端系統(tǒng)(比如DB)帶來很大壓力。

如何避免搏予?

1:在緩存失效后熊锭,通過加鎖或者隊(duì)列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。比如對某個(gè)key只允許一個(gè)線程查詢數(shù)據(jù)和寫緩存雪侥,其他線程等待碗殷。

2:不同的key,設(shè)置不同的過期時(shí)間速缨,讓緩存失效的時(shí)間點(diǎn)盡量均勻锌妻。

3:做二級緩存,A1為原始緩存旬牲,A2為拷貝緩存仿粹,A1失效時(shí),可以訪問A2原茅,A1緩存失效時(shí)間設(shè)置為短期吭历,A2設(shè)置為長期(此點(diǎn)為補(bǔ)充)

緩存擊穿
一個(gè)key在過期失效的時(shí)候大量訪問打到db,導(dǎo)致db過大

如何避免
加鎖,在訪問key之前擂橘,采用SETNX(set if not exists)來設(shè)置另一個(gè)短期key來鎖住當(dāng)前key的訪問晌区,訪問結(jié)束再刪除該短期key。

總結(jié):緩存穿透:訪問key,key的value不存在,走DB通贞,
緩存雪崩:多個(gè)緩存同時(shí)失效(重啟或者設(shè)置的時(shí)間一致)
緩存擊穿:一個(gè)key在過期時(shí)間內(nèi)大量訪問

Redis的并發(fā)競爭問題如何解決
使用 redis的樂觀鎖watch機(jī)制

如何實(shí)現(xiàn)持久化

Redis是一種高級key-value數(shù)據(jù)庫朗若。它跟memcached類似,不過數(shù)據(jù)可以持久化昌罩,而且支持的數(shù)據(jù)類型很豐富哭懈。有字符串,鏈表茎用,集 合和有序集合银伟。支持在服務(wù)器端計(jì)算集合的并,交和補(bǔ)集(difference)等绘搞,還支持多種排序功能。所以Redis也可以被看成是一個(gè)數(shù)據(jù)結(jié)構(gòu)服務(wù) 器傅物。
Redis的所有數(shù)據(jù)都是保存在內(nèi)存中夯辖,然后不定期的通過異步方式保存到磁盤上(這稱為“半持久化模式”);也可以把每一次數(shù)據(jù)變化都寫入到一個(gè)append only file(aof)里面(這稱為“全持久化模式”)董饰。

由于Redis的數(shù)據(jù)都存放在內(nèi)存中蒿褂,如果沒有配置持久化圆米,redis重啟后數(shù)據(jù)就全丟失了,于是需要開啟redis的持久化功能啄栓,將數(shù)據(jù)保存到磁盤上娄帖,當(dāng)redis重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)昙楚。redis提供兩種方式進(jìn)行持久化近速,一種是RDB持久化(原理是將Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時(shí)dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)堪旧。那么這兩種持久化方式有什么區(qū)別呢削葱,改如何選擇呢?網(wǎng)上看了大多數(shù)都是介紹這兩種方式怎么配置淳梦,怎么使用析砸,就是沒有介紹二者的區(qū)別,在什么應(yīng)用場景下使用爆袍。

2首繁、二者的區(qū)別

RDB持久化是指在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,實(shí)際操作過程是fork一個(gè)子進(jìn)程陨囊,先將數(shù)據(jù)集寫入臨時(shí)文件弦疮,寫入成功后,再替換之前的文件谆扎,用二進(jìn)制壓縮存儲挂捅。


4444.png

AOF持久化以日志的形式記錄服務(wù)器所處理的每一個(gè)寫、刪除操作堂湖,查詢操作不會記錄闲先,以文本的方式記錄,可以打開文件看到詳細(xì)的操作記錄无蜂。

5555.png

3伺糠、二者優(yōu)缺點(diǎn)

RDB存在哪些優(yōu)勢呢?

1). 一旦采用該方式斥季,那么你的整個(gè)Redis數(shù)據(jù)庫將只包含一個(gè)文件训桶,這對于文件備份而言是非常完美的。比如酣倾,你可能打算每個(gè)小時(shí)歸檔一次最近24小時(shí)的數(shù)據(jù)舵揭,同時(shí)還要每天歸檔一次最近30天的數(shù)據(jù)。通過這樣的備份策略躁锡,一旦系統(tǒng)出現(xiàn)災(zāi)難性故障午绳,我們可以非常容易的進(jìn)行恢復(fù)。

2). 對于災(zāi)難恢復(fù)而言映之,RDB是非常不錯(cuò)的選擇拦焚。因?yàn)槲覀兛梢苑浅]p松的將一個(gè)單獨(dú)的文件壓縮后再轉(zhuǎn)移到其它存儲介質(zhì)上蜡坊。

3). 性能最大化。對于Redis的服務(wù)進(jìn)程而言赎败,在開始持久化時(shí)秕衙,它唯一需要做的只是fork出子進(jìn)程,之后再由子進(jìn)程完成這些持久化的工作僵刮,這樣就可以極大的避免服務(wù)進(jìn)程執(zhí)行IO操作了据忘。

4). 相比于AOF機(jī)制,如果數(shù)據(jù)集很大妓笙,RDB的啟動效率會更高若河。

RDB又存在哪些劣勢呢?

1). 如果你想保證數(shù)據(jù)的高可用性寞宫,即最大限度的避免數(shù)據(jù)丟失萧福,那么RDB將不是一個(gè)很好的選擇。因?yàn)橄到y(tǒng)一旦在定時(shí)持久化之前出現(xiàn)宕機(jī)現(xiàn)象辈赋,此前沒有來得及寫入磁盤的數(shù)據(jù)都將丟失鲫忍。

2). 由于RDB是通過fork子進(jìn)程來協(xié)助完成數(shù)據(jù)持久化工作的,因此钥屈,如果當(dāng)數(shù)據(jù)集較大時(shí)悟民,可能會導(dǎo)致整個(gè)服務(wù)器停止服務(wù)幾百毫秒,甚至是1秒鐘篷就。

AOF的優(yōu)勢有哪些呢射亏?

1). 該機(jī)制可以帶來更高的數(shù)據(jù)安全性,即數(shù)據(jù)持久性竭业。Redis中提供了3中同步策略智润,即每秒同步、每修改同步和不同步未辆。事實(shí)上窟绷,每秒同步也是異步完成的,其效率也是非常高的咐柜,所差的是一旦系統(tǒng)出現(xiàn)宕機(jī)現(xiàn)象兼蜈,那么這一秒鐘之內(nèi)修改的數(shù)據(jù)將會丟失。而每修改同步拙友,我們可以將其視為同步持久化为狸,即每次發(fā)生的數(shù)據(jù)變化都會被立即記錄到磁盤中∫牌酰可以預(yù)見钥平,這種方式在效率上是最低的。至于無同步,無需多言涉瘾,我想大家都能正確的理解它。

2). 由于該機(jī)制對日志文件的寫入操作采用的是append模式捷兰,因此在寫入過程中即使出現(xiàn)宕機(jī)現(xiàn)象立叛,也不會破壞日志文件中已經(jīng)存在的內(nèi)容。然而如果我們本次操作只是寫入了一半數(shù)據(jù)就出現(xiàn)了系統(tǒng)崩潰問題贡茅,不用擔(dān)心秘蛇,在Redis下一次啟動之前,我們可以通過redis-check-aof工具來幫助我們解決數(shù)據(jù)一致性的問題顶考。

3). 如果日志過大赁还,Redis可以自動啟用rewrite機(jī)制。即Redis以append模式不斷的將修改數(shù)據(jù)寫入到老的磁盤文件中驹沿,同時(shí)Redis還會創(chuàng)建一個(gè)新的文件用于記錄此期間有哪些修改命令被執(zhí)行艘策。因此在進(jìn)行rewrite切換時(shí)可以更好的保證數(shù)據(jù)安全性。

4). AOF包含一個(gè)格式清晰渊季、易于理解的日志文件用于記錄所有的修改操作朋蔫。事實(shí)上,我們也可以通過該文件完成數(shù)據(jù)的重建却汉。

AOF的劣勢有哪些呢驯妄?

1). 對于相同數(shù)量的數(shù)據(jù)集而言,AOF文件通常要大于RDB文件合砂。RDB 在恢復(fù)大數(shù)據(jù)集時(shí)的速度比 AOF 的恢復(fù)速度要快青扔。

2). 根據(jù)同步策略的不同,AOF在運(yùn)行效率上往往會慢于RDB翩伪∥⒉總之,每秒同步策略的效率是比較高的幻工,同步禁用策略的效率和RDB一樣高效励两。

二者選擇的標(biāo)準(zhǔn),就是看系統(tǒng)是愿意犧牲一些性能囊颅,換取更高的緩存一致性(aof)当悔,還是愿意寫操作頻繁的時(shí)候,不啟用備份來換取更高的性能踢代,待手動運(yùn)行save的時(shí)候盲憎,再做備份(rdb)。rdb這個(gè)就更有些 eventually consistent的意思了胳挎。

緩存失效策略

二饼疙、3種過期策略
?定時(shí)刪除 ?含義:在設(shè)置key的過期時(shí)間的同時(shí),為該key創(chuàng)建一個(gè)定時(shí)器慕爬,讓定時(shí)器在key的過期時(shí)間來臨時(shí)窑眯,對key進(jìn)行刪除
?優(yōu)點(diǎn):保證內(nèi)存被盡快釋放
?缺點(diǎn): ?若過期key很多屏积,刪除這些key會占用很多的CPU時(shí)間,在CPU時(shí)間緊張的情況下磅甩,CPU不能把所有的時(shí)間用來做要緊的事兒炊林,還需要去花時(shí)間刪除這些key
?定時(shí)器的創(chuàng)建耗時(shí),若為每一個(gè)設(shè)置過期時(shí)間的key創(chuàng)建一個(gè)定時(shí)器(將會有大量的定時(shí)器產(chǎn)生)卷要,性能影響嚴(yán)重
?沒人用

?惰性刪除 ?含義:key過期的時(shí)候不刪除渣聚,每次從數(shù)據(jù)庫獲取key的時(shí)候去檢查是否過期,若過期僧叉,則刪除奕枝,返回null。
?優(yōu)點(diǎn):刪除操作只發(fā)生在從數(shù)據(jù)庫取出key的時(shí)候發(fā)生瓶堕,而且只刪除當(dāng)前key隘道,所以對CPU時(shí)間的占用是比較少的,而且此時(shí)的刪除是已經(jīng)到了非做不可的地步(如果此時(shí)還不刪除的話捞烟,我們就會獲取到了已經(jīng)過期的key了)
?缺點(diǎn):若大量的key在超出超時(shí)時(shí)間后薄声,很久一段時(shí)間內(nèi),都沒有被獲取過题画,那么可能發(fā)生內(nèi)存泄露(無用的垃圾占用了大量的內(nèi)存)

?定期刪除 ?含義:每隔一段時(shí)間執(zhí)行一次刪除(在redis.conf配置文件設(shè)置hz默辨,1s刷新的頻率)過期key操作
?優(yōu)點(diǎn): ?通過限制刪除操作的時(shí)長和頻率,來減少刪除操作對CPU時(shí)間的占用--處理"定時(shí)刪除"的缺點(diǎn)
?定期刪除過期key--處理"惰性刪除"的缺點(diǎn)

?缺點(diǎn) ?在內(nèi)存友好方面苍息,不如"定時(shí)刪除"
?在CPU時(shí)間友好方面缩幸,不如"惰性刪除"

?難點(diǎn) ?合理設(shè)置刪除操作的執(zhí)行時(shí)長(每次刪除執(zhí)行多長時(shí)間)和執(zhí)行頻率(每隔多長時(shí)間做一次刪除)(這個(gè)要根據(jù)服務(wù)器運(yùn)行情況來定了)

看完上面三種策略后可以得出以下結(jié)論:
定時(shí)刪除和定期刪除為主動刪除:Redis會定期主動淘汰一批已過去的key

惰性刪除為被動刪除:用到的時(shí)候才會去檢驗(yàn)key是不是已過期,過期就刪除

惰性刪除為redis服務(wù)器內(nèi)置策略

定期刪除可以通過:
?第一竞思、配置redis.conf 的hz選項(xiàng)表谊,默認(rèn)為10 (即1秒執(zhí)行10次,100ms一次盖喷,值越大說明刷新頻率越快爆办,最Redis性能損耗也越大)
?第二、配置redis.conf的maxmemory最大值课梳,當(dāng)已用內(nèi)存超過maxmemory限定時(shí)距辆,就會觸發(fā)主動清理策略

注意:
?上邊所說的數(shù)據(jù)庫指的是內(nèi)存數(shù)據(jù)庫,默認(rèn)情況下每一臺redis服務(wù)器有16個(gè)數(shù)據(jù)庫(關(guān)于數(shù)據(jù)庫的設(shè)置暮刃,看下邊代碼)跨算,默認(rèn)使用0號數(shù)據(jù)庫,所有的操作都是對0號數(shù)據(jù)庫的操作椭懊,關(guān)于redis數(shù)據(jù)庫的存儲結(jié)構(gòu)诸蚕,查看 第八章 Redis數(shù)據(jù)庫結(jié)構(gòu)與讀寫原理

集群,高可用,分片

1- 水平分區(qū) VS 垂直分區(qū)

分區(qū)是分割數(shù)據(jù)到多個(gè)Redis實(shí)例的處理過程背犯,因此每個(gè)實(shí)例只保存key的一個(gè)子集坏瘩。有兩種分區(qū)方式:水平分區(qū)、垂直分區(qū)媳板。

1.1 分區(qū)的優(yōu)勢與不足
1.優(yōu)勢

通過利用多臺計(jì)算機(jī)內(nèi)存的和值桑腮,允許我們構(gòu)造更大的數(shù)據(jù)庫。
通過多核和多臺計(jì)算機(jī)蛉幸,允許我們擴(kuò)展計(jì)算能力;通過多臺計(jì)算機(jī)和網(wǎng)絡(luò)適配器丛晦,允許我們擴(kuò)展網(wǎng)絡(luò)帶寬
2.不足

涉及多個(gè)key的操作通常是不被支持的:
?當(dāng)兩個(gè)set映射到不同的redis實(shí)例上時(shí)奕纫,你就不能對這兩個(gè)set執(zhí)行交集操作。
?涉及多個(gè)key的redis事務(wù)不能使用烫沙。
?當(dāng)使用分區(qū)時(shí)匹层,數(shù)據(jù)處理較為復(fù)雜,比如你需要處理多個(gè)rdb/aof文件锌蓄,并且從多個(gè)實(shí)例和主機(jī)備份持久化文件升筏。
?增加或刪除容量也比較復(fù)雜。redis集群大多數(shù)支持在運(yùn)行時(shí)增加瘸爽、刪除節(jié)點(diǎn)的透明數(shù)據(jù)平衡的能力您访,但是類似于客戶端分區(qū)、代理等其他系統(tǒng)則不支持這項(xiàng)特性剪决。

1.2 水平分區(qū)

水平分區(qū)是根據(jù)一些規(guī)則把同一業(yè)務(wù)單元的Key拆分到不同的Redis實(shí)例上灵汪。
1.按Range水平分區(qū)

最簡單的分區(qū)方式是按范圍分區(qū),就是映射一定范圍的對象到特定的Redis實(shí)例
比如柑潦,ID從0到10000的用戶會保存到實(shí)例R0享言,ID從10001到 20000的用戶會保存到R1,以此類推渗鬼。這種方式是可行的览露,并且在實(shí)際中使用,不足就是要有一個(gè)區(qū)間范圍到實(shí)例的映射表譬胎。這個(gè)表要被管理差牛,同時(shí)還需要各種對象的映射表,通常對Redis來說并非是好的方法银择。優(yōu)點(diǎn):規(guī)則簡單多糠、數(shù)據(jù)均衡性較好、比較容易擴(kuò)展浩考;缺點(diǎn):請求的負(fù)載不一定均衡夹孔,一般來說,新注冊的用戶會比老用戶更活躍,大range的服務(wù)請求壓力會更大搭伤。
2.對Key哈希水平切分

按照Key進(jìn)行Hash只怎,支持任意類型的Key,然后對得到的Hash值進(jìn)行取模運(yùn)算怜俐,分配到不同Redis實(shí)例上身堡。優(yōu)點(diǎn):規(guī)則簡單、數(shù)據(jù)均衡性較好拍鲤、請求均勻性較好贴谎;缺點(diǎn)是:不容易擴(kuò)展,擴(kuò)展一個(gè)數(shù)據(jù)服務(wù)季稳,hash方法改變時(shí)候擅这,可能需要進(jìn)行數(shù)據(jù)遷移。

1.3 垂直分區(qū)

垂直分區(qū)就是把一個(gè)Redis實(shí)例上的不同業(yè)務(wù)單元的Key拆分到不同的Redis實(shí)例上景鼠。

基于Sentinel + master/slave + VIP漂移

redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時(shí)候仲翎,就會施行數(shù)據(jù)淘汰策略。redis 提供 6種數(shù)據(jù)淘汰策略:

volatile-lru:從已設(shè)置過期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰
volatile-ttl:從已設(shè)置過期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過期的數(shù)據(jù)淘汰
volatile-random:從已設(shè)置過期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中任意選擇數(shù)據(jù)淘汰
allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最近最少使用的數(shù)據(jù)淘汰
allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中任意選擇數(shù)據(jù)淘汰
no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)

Memcached為每個(gè)item設(shè)置一個(gè)過期時(shí)間铛漓,但不是到期就把item從內(nèi)存刪除溯香,而是訪問item時(shí),如果到了有效期浓恶,才把item從內(nèi)存中刪除玫坛。

當(dāng)Memcached使用內(nèi)存大于設(shè)置的最大內(nèi)存使用時(shí),為了騰出內(nèi)存空間來存放新的數(shù)據(jù)項(xiàng)问顷,Memcached會啟動LRU算法淘汰舊的數(shù)據(jù)項(xiàng)昂秃。
使用slabs_alloc函數(shù)申請內(nèi)存失敗時(shí),就開始淘汰數(shù)據(jù)了杜窄。淘汰規(guī)則是肠骆,從數(shù)據(jù)項(xiàng)列表尾部開始遍歷,在列表中查找一個(gè)引用計(jì)數(shù)器為0的item塞耕,把此item釋放掉蚀腿。

為什么要從item列表尾部開始遍歷呢? 因?yàn)閙emcached會把剛剛訪問過的item放到item列表頭部扫外,所以尾部的item都是沒有或很少訪問的莉钙,這就是LRU算法的精髓。

如果在item列表找不到計(jì)數(shù)器為0的item筛谚,就查找一個(gè)3小時(shí)沒有訪問過的item磁玉。把他釋放,如果還是找不到驾讲,就返回NULL(申請內(nèi)存失斘蒙 )席赂。

從上面的分析可以知道,當(dāng)內(nèi)存不足時(shí)时迫,memcached會把訪問比較少或者一段時(shí)間沒有訪問的item淘汰颅停,以便騰出內(nèi)存空間存放新的item。

Memcached的LRU幾種策略

  1. 惰性刪除掠拳。memcached一般不會主動去清除已經(jīng)過期或者失效的緩存癞揉,當(dāng)get請求一個(gè)item的時(shí)候,才會去檢查item是否失效溺欧。

  2. flush命令喊熟。flush命令會將所有的item設(shè)置為失效。

  3. 創(chuàng)建的時(shí)候檢查姐刁。Memcached會在創(chuàng)建ITEM的時(shí)候去LRU的鏈表尾部開始檢查逊移,是否有失效的ITEM,如果沒有的話就重新創(chuàng)建龙填。

  4. LRU爬蟲。memcached默認(rèn)是關(guān)閉LRU爬蟲的拐叉。LRU爬蟲是一個(gè)單獨(dú)的線程岩遗,會去清理失效的ITEM。

  5. LRU淘汰凤瘦。當(dāng)緩存沒有內(nèi)存可以分配給新的元素的時(shí)候宿礁,memcached會從LRU鏈表的尾部開始淘汰一個(gè)ITEM,不管這個(gè)ITEM是否還在有效期都將會面臨淘汰蔬芥。LRU鏈表插入緩存ITEM的時(shí)候有先后順序梆靖,所以淘汰一個(gè)ITEM也是從尾部進(jìn)行 也就是先淘汰最早的ITEM。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笔诵,一起剝皮案震驚了整個(gè)濱河市返吻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乎婿,老刑警劉巖测僵,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谢翎,居然都是意外死亡捍靠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門森逮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榨婆,“玉大人,你說我怎么就攤上這事褒侧×挤纾” “怎么了谊迄?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拖吼。 經(jīng)常有香客問我鳞上,道長,這世上最難降的妖魔是什么吊档? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任篙议,我火速辦了婚禮,結(jié)果婚禮上怠硼,老公的妹妹穿的比我還像新娘鬼贱。我一直安慰自己,他們只是感情好香璃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布这难。 她就那樣靜靜地躺著,像睡著了一般葡秒。 火紅的嫁衣襯著肌膚如雪姻乓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天眯牧,我揣著相機(jī)與錄音蹋岩,去河邊找鬼。 笑死学少,一個(gè)胖子當(dāng)著我的面吹牛剪个,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播版确,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼扣囊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绒疗?” 一聲冷哼從身側(cè)響起侵歇,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忌堂,沒想到半個(gè)月后盒至,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡士修,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年枷遂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棋嘲。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酒唉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沸移,到底是詐尸還是另有隱情痪伦,我是刑警寧澤侄榴,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站网沾,受9級特大地震影響癞蚕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辉哥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一桦山、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧醋旦,春花似錦恒水、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捂人,卻和暖如春御雕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滥搭。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工饮笛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人论熙。 一個(gè)月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像摄狱,于是被迫代替她去往敵國和親脓诡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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

  • 前言 在上一篇文章中媒役,介紹了Redis內(nèi)存模型祝谚,從這篇文章開始,將依次介紹Redis高可用相關(guān)的知識——持久化酣衷、復(fù)...
    Java架構(gòu)閱讀 2,318評論 3 21
  • 1.1 資料 交惯,最好的入門小冊子,可以先于一切文檔之前看猪杭,免費(fèi)规求。 作者Antirez的博客末早,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,064評論 1 51
  • 超強(qiáng)、超詳細(xì)Redis入門教程 轉(zhuǎn)載2017年03月04日 16:20:02 16916 轉(zhuǎn)載自: http://...
    邵云濤閱讀 17,448評論 3 313
  • 文章已經(jīng)放到github上 只锻,如果對您有幫助 請給個(gè)star[https://github.com/qqxuanl...
    尼爾君閱讀 2,287評論 0 22