Redis-緩存

一裆熙、Redis

1、概述

Redis是速度非城菪Γ快的非關(guān)系型內(nèi)存鍵值數(shù)據(jù)庫入录,可以存儲鍵和物種不同類型的值之間的映射。

Redis支持很多特性佳镜,如數(shù)據(jù)持久化到硬盤僚稿,使用復制擴展讀性能,使用分片來擴展寫性能蟀伸。

2蚀同、數(shù)據(jù)類型

(1)STRING

????可以存儲字符串、整數(shù)或者浮點數(shù)啊掏。對整個字符串或者字符串中的一部分執(zhí)行操作蠢络;對整數(shù)和浮點數(shù)執(zhí)行自增或者自減操作。

示例

????示例:

????set hello word

? ? get hello ------ "world"

? ? del hello ------ (integer) 1

? ? get hello ------ (nil)

(2)LIST

? ? 可以存儲列表迟蜜。從兩端壓入或者彈出元素刹孔,對單個或者多個元素進行修剪,只保留一個范圍內(nèi)的元素娜睛。

? ? 示例:

? ? lpush list-key item ------ (integer) 1

? ? lpush list-key item2 ------ (integer) 2

? ? lpush list-key item ------ (integer) 3

? ? lrange list-key 0 -1 ------ 1) "item"? 2) "item2"? 3) "item"

? ? lindex list-key 1 ------ "item2"

? ? lpop list key ------?"item"

? ? lrange list-key 0 -1 ------ 1) "item2"? 2) "item"

(3)SET

? ? 無序集合芦疏。添加、獲取微姊、移除單個元素酸茴;檢查一個元素是否存在于集合中;計算交集兢交,并集薪捍、差集,從集合里面隨機獲取元素配喳。

? ? 示例:

? ? sadd set-key item ------ (integer) 1

? ? sadd set-key item2 ------ (integer) 1

? ? sadd set-key item3 ------ (integer) 1

? ? sadd set-key item ------ (integer) 0

? ? smembers set-key ------?1) "item" 2) "item2" 3) "item3"

? ? smembers set-key item4 ------ (integer) 0

????smembers set-key item ------ (integer) 1

? ? srem set-key item2 ------ (integer) 1

? ? srem set-key item2 ------ (integer) 0

? ???smembers set-key ------?1) "item" 2) "item3"

(4)HASH

? ? 包含鍵值對的無須散列表酪穿。可以添加獲取和移除單個元素晴裹;檢查一個元素是否存在于集合中被济;計算交集、并集涧团、差集只磷;從集合里面隨機獲取元素经磅。

? ? 示例:

? ? hset hash-key syb-key1 value1 ------ (integer) 1

? ? hset hash-key sub-key2 value2 ------ (integer) 1

? ? hset hash-key sub-key1 value1 ------ (integer) 0

? ? hgetall hash-key ------1) "sub-key1" 2) "value1" 3) "sub-key2" 4) "value2"

? ? hdel hash-key sub-key2 ------ (integer) 1

? ? hdel hash-key sub-key2 ------ (integer) 0

? ? hget hash-key sub-key1 ------ "value1"

? ? hgetall hash-key ------ 1)"sub-key1" 2)"value1"

(5)ZSET

? ? 有序集合∨プ罚可以添加獲取和刪除元素预厌;根據(jù)分支范圍或者成員來獲取元素;計算一個鍵的排名元媚。

? ? 示例:

? ? zadd zset-key 728 member1------ (integer) 1

? ??zadd zset-key 982 member1------ (integer) 1

? ??zadd zset-key 982 member1 ------ (integer) 0

? ? zrange zset-key 0 -1 withscores ------?1) "member1" 2) "728" 3) "member0" 4) "982"

? ? zrangebyscore zset-key 0 800 withscore ------?1) "member1" 2) "728"

? ? zrem zset-key member1 ------ (integer) 1

? ??zrem zset-key member1 ------ (integer) 0

? ??zrange zset-key 0 -1 withscores ------? 1) "member0" 2) "982"

二轧叽、Redis面試

1、什么是Redis

Redis是一個基于內(nèi)存的高性能key-value數(shù)據(jù)庫刊棕。

2炭晒、Redis的特點

Redis本質(zhì)上是一個key-value類型的內(nèi)存數(shù)據(jù)庫,整個數(shù)據(jù)庫加載在內(nèi)存中進行操作甥角,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤進行保存网严。

由于是在內(nèi)存操作,所以性能很出色蜈膨,每秒可以處理超過10萬次讀寫操作屿笼,是已知性能最快的key-value DB牺荠。

同時Redis支持多種數(shù)據(jù)結(jié)構(gòu)翁巍,單個value的最大限制是1GB。

Redis的主要缺點是數(shù)據(jù)庫容量收到物理內(nèi)存的限制休雌,不能用作海量數(shù)據(jù)的高性能讀寫灶壶,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運算上。

3杈曲、Redis的好處

速度快:內(nèi)存中操作驰凛。數(shù)據(jù)類型多:string,list,set,sorted set,hash。支持事務(wù):操作都是原子性担扑。豐富的特性:可用于緩存恰响,消息,按key設(shè)置過期時間涌献。

4胚宦、Redis和memcache的對比

兩者都是非關(guān)系型內(nèi)存鍵值數(shù)據(jù)庫,主要有以下不同:

數(shù)據(jù)類型:Memcached 僅支持字符串類型燕垃,而 Redis 支持五種不同的數(shù)據(jù)類型枢劝,可以更靈活地解決問題。

數(shù)據(jù)持久化:Redis 支持兩種持久化策略:RDB 快照和 AOF 日志卜壕,而 Memcached 不支持持久化您旁。

分布式:Memcached 不支持分布式,只能通過在客戶端使用一致性哈希來實現(xiàn)分布式存儲轴捎,這種方式在存儲和查詢時都需要先在客戶端計算一次數(shù)據(jù)所在的節(jié)點鹤盒。Redis Cluster 實現(xiàn)了分布式的支持蚕脏。

內(nèi)存管理機制:在 Redis 中,并不是所有數(shù)據(jù)都一直存儲在內(nèi)存中昨悼,可以將一些很久沒用的 value 交換到磁盤蝗锥,而 Memcached 的數(shù)據(jù)則會一直在內(nèi)存中。Memcached 將內(nèi)存分割成特定長度的塊來存儲數(shù)據(jù)率触,以完全解決內(nèi)存碎片的問題终议。但是這種方式會使得內(nèi)存的利用率不高,例如塊的大小為 128 bytes葱蝗,只存儲 100 bytes 的數(shù)據(jù)穴张,那么剩下的 28 bytes 就浪費掉了。

5两曼、Redis數(shù)據(jù)淘汰策略

volatile-lru:從已設(shè)置過期時間的數(shù)據(jù)集中挑選最近最少使用的數(shù)據(jù)淘汰

volatile-ttl:從以設(shè)置過期時間的數(shù)據(jù)集中挑選將要過期的數(shù)據(jù)淘汰

volatile-random:從已設(shè)置過期時間的數(shù)據(jù)集中任意選擇數(shù)據(jù)淘汰

allkeys-lru:從數(shù)據(jù)集中挑選最少使用的數(shù)據(jù)淘汰

allkeys-random:從數(shù)據(jù)集中選擇任意數(shù)據(jù)淘汰

no-enviction:禁止驅(qū)逐數(shù)據(jù)

6皂甘、為什么redis需要將所有數(shù)據(jù)放在內(nèi)存中

Redis為了達到最快的讀寫速度將數(shù)據(jù)讀到內(nèi)存中,并通過異步的方式將數(shù)據(jù)寫入磁盤悼凑,所以redis具有快速和數(shù)據(jù)持久化的特征偿枕。如果設(shè)置了最大使用的內(nèi)存,則數(shù)據(jù)已有記錄數(shù)達到內(nèi)存限值后不能繼續(xù)插入新值户辫。

7渐夸、Redis的單進程單線程的

Redis利用隊列技術(shù)將并發(fā)訪問變?yōu)榇性L問,消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷渔欢。

8墓塌、Redis的并發(fā)競爭問題

Redis是單進程單線程的,采用隊列模式將并發(fā)訪問變?yōu)榇性L問奥额,Redis本身沒有鎖的改良苫幢,Redis對于多個客戶端連接并不存在競爭;但是Jedis客戶端對Redis進行并發(fā)訪問時會發(fā)生連接超時垫挨,數(shù)據(jù)轉(zhuǎn)換錯誤韩肝、阻塞、客戶端關(guān)閉連接等問題,這些問題都是由于客戶端連接混亂造成。有兩種解決方法:

客戶端角度衣式,為保證每個客戶端間正常有序與Redis進行通信,對連接進行池優(yōu)化谜诫,同時對客戶端讀寫Redis操作采用內(nèi)部鎖sychronized。

服務(wù)器角度攻旦,利用setnx實現(xiàn)鎖喻旷。

9、Redis事務(wù)

在Redis中牢屋,MULTI/EXEC/DISCARD/WATCH這四個命令是我們實現(xiàn)事務(wù)的基石且预。

Redis中事務(wù)的實現(xiàn)特征:

????在事務(wù)中所有命令都將會被串行化的順序執(zhí)行槽袄,事務(wù)執(zhí)行期間,Redis不會再為其他客戶端的請求提供任何服務(wù)锋谐,從而保證了事務(wù)中的所有命令被原子的執(zhí)行遍尺。

????Redis事務(wù)中如果有一條命令執(zhí)行失敗,其后的命令仍然會被繼續(xù)執(zhí)行涮拗。

????通過MULTI命令開啟事務(wù)乾戏,使用EXEC/DISCARD命令來提交/回滾事務(wù)。

????事務(wù)開啟之前三热,如果客戶端和服務(wù)器出現(xiàn)通訊故障導致網(wǎng)絡(luò)斷開鼓择,其后所有待執(zhí)行的語句都將不會被服務(wù)器執(zhí)行。而如果網(wǎng)絡(luò)中斷發(fā)生在客戶端執(zhí)行EXEC命令后就漾,那么該事務(wù)中的所有命令都會被服務(wù)器執(zhí)行呐能。

????當使用Append-only模式時,Redis會通過調(diào)用系統(tǒng)函數(shù)write將該事務(wù)內(nèi)的所有寫操作炸本次調(diào)用中全部寫入磁盤抑堡。然而在寫入的過程中出現(xiàn)系統(tǒng)崩潰摆出,那么此時也許只有部分數(shù)據(jù)被寫入磁盤,而另外一部分數(shù)據(jù)卻已丟失首妖。

Redis服務(wù)器會在重新啟動時執(zhí)行一系列必要的一致性檢測偎漫,一旦發(fā)現(xiàn)類似問題,就會立即退出并給出相應(yīng)的錯誤提示悯搔。

10骑丸、WATCH命令和基于CAS的樂觀鎖

WATCH命令可用于提供CAS功能舌仍,WATCH命令在事務(wù)執(zhí)行之前監(jiān)控了key妒貌,在WATCH之后key的值發(fā)生了變化,EXEC命令執(zhí)行的事務(wù)都將被放棄铸豁,同時返回Null multi-bulk應(yīng)答以通知調(diào)用者事務(wù)執(zhí)行失敗灌曙。

WATCH mykey

val = GET mykey

val = val + 1

MULTI

SET mykey $val

EXEC

11、Redis持久化的方式

RDB 持久化

將某個時間點的所有數(shù)據(jù)都存放到硬盤上节芥≡诖蹋可以將快照復制到其它服務(wù)器從而創(chuàng)建具有相同數(shù)據(jù)的服務(wù)器副本。如果系統(tǒng)發(fā)生故障头镊,將會丟失最后一次創(chuàng)建快照之后的數(shù)據(jù)蚣驼。如果數(shù)據(jù)量很大,保存快照的時間會很長相艇。

AOF 持久化

將寫命令添加到 AOF 文件(Append Only File)的末尾颖杏。使用 AOF 持久化需要設(shè)置同步選項,從而確保寫命令什么時候會同步到磁盤文件上坛芽。這是因為對文件進行寫入并不會馬上將內(nèi)容同步到磁盤上留储,而是先存儲到緩沖區(qū)翼抠,然后由操作系統(tǒng)決定什么時候同步到磁盤。有以下同步選項:

????always 每個寫命令都同步获讳,選項會嚴重減低服務(wù)器的性能阴颖;

????everysec 每秒同步一次,選項比較合適丐膝,可以保證系統(tǒng)崩潰時只會丟失一秒左右的數(shù)據(jù)量愧,并且 Redis 每秒執(zhí)行一次同步對服務(wù)器性能幾乎沒有任何影響;

????no 讓操作系統(tǒng)來決定何時同步帅矗,選項并不能給服務(wù)器性能帶來多大的提升侠畔,而且也會增加系統(tǒng)崩潰時數(shù)據(jù)丟失的數(shù)量。

隨著服務(wù)器寫請求的增多损晤,AOF 文件會越來越大软棺。Redis 提供了一種將 AOF 重寫的特性,能夠去除 AOF 文件中的冗余寫命令尤勋。

快照 snapshots:缺省情況下喘落,Redis把數(shù)據(jù)快照存放在磁盤上的二進制文件中,文件名為dump.rdb最冰。原理:Redis forks瘦棋,子進程開始講數(shù)據(jù)寫到臨時的RDB文件中,當子進程完成寫RDB文件暖哨,用新文件替換老文件赌朋。這種方式可以使Redis使用copy-on-write技術(shù)。

快照 AOF:快照模式不健壯篇裁,當系統(tǒng)停止或者Redis進程被關(guān)閉沛慢,寫入Redis的數(shù)據(jù)就會丟失。

虛擬內(nèi)存方式:當key很小达布,value很大時团甲,使用虛擬內(nèi)存的效果會比較好,節(jié)約較大的內(nèi)存黍聂。

12躺苦、Redis緩存失效策略和主鍵失效機制

作為緩存系統(tǒng)都要定期清理無效數(shù)據(jù),就需要一個主鍵失效和淘汰策略产还。

在Redis中匹厘,有生存期的key被稱為volatile,在創(chuàng)建緩存時脐区,要為給定的key設(shè)置生存期愈诚,當key過期時,它可能會被刪除。

生存時間可以通過DEL命令來刪除整個key來移除扰路,或者被SET和GETSET命令覆蓋原來的數(shù)據(jù)尤溜,也就是說,修改key對應(yīng)的value和使用另外相同的key和value來覆蓋后汗唱,當前的數(shù)據(jù)的生存時間不同宫莱。使用PERSIST命令可以在不刪除key的情況下,移除key的生存時間哩罪,讓key重新成為一個persistent key授霸。

對一個帶有生存時間的key執(zhí)行EXPIRE命令,新指定的生存時間會取代舊的生存時間际插。

13碘耳、最大緩存配置

在redis中,允許用戶設(shè)置最大使用內(nèi)存的大小框弛,server.maxmemory默認為0辛辨,沒有指定最大緩存,如果有行的數(shù)據(jù)添加瑟枫,超過最大內(nèi)存斗搞,則會使redis崩潰。redis數(shù)據(jù)集大小上升到一定大小的時候慷妙,就會實行淘汰策略僻焚。

14、使用Redis的場景

會話緩存 Session Cache膝擂;全頁緩存 FPC虑啤;隊列;排行榜/計數(shù)器架馋;發(fā)布/訂閱狞山。

15、Redis支持的Java客戶端有哪些

Redisson绩蜻,Jedis铣墨,lettuce等室埋,官方推薦Redisson办绝。

16、Jedis和Redisson對比

Jedis是Redis的java實現(xiàn)的客戶端姚淆,API提供了較全面的Redis命令支持孕蝉。

Redisson實現(xiàn)了分布式和可擴展的Java數(shù)據(jù)結(jié)構(gòu),和Jedis相比腌逢,功能較為簡單降淮,不支持字符串操作,不支持排序、事務(wù)佳鳖、管道霍殴、分區(qū)等Redis特性。

17系吩、Redis的內(nèi)存優(yōu)化

盡可能的使用散列表 hash来庭,散列表使用的內(nèi)存非常小。

18穿挨、一個字符串的值存儲最大容量是512M 月弛。

19、Redis哈希槽

Redis集群沒有使用一致性hash科盛,而是使用了hash槽的概念帽衙,Redis集群有16384個哈希槽,每個key通過CRC16校驗后對16384取模來確定放置哪個槽贞绵。

20厉萝、 Redis的主從復制模型

為了使在部分及誒按失敗或者發(fā)部分節(jié)點無法通信的情況下集群仍然可以使用,所以集群使用了主從復制模型榨崩,每個節(jié)點都會有N-1個復制品冀泻。

三、緩存

1蜡饵、緩存雪崩

數(shù)據(jù)未加載到緩存中弹渔,或者緩存同一時間大面積的失效,從而導致所有請求都去查數(shù)據(jù)庫溯祸,導致數(shù)據(jù)庫cpu和內(nèi)存負載過高肢专,甚至宕機。

防止緩存雪崩的方式:

緩存的高可用性

緩存層設(shè)計成高可用焦辅,防止緩存大面積故障博杖。即使個別節(jié)點、個別機器筷登、甚至是機房宕掉剃根,依然可以提供服務(wù),例如 Redis Sentinel 和 Redis Cluster 都實現(xiàn)了高可用前方。

緩存降級

可以利用ehcache等本地緩存(暫時支持)狈醉,但主要還是對源服務(wù)訪問進行限流、資源隔離(熔斷)惠险、降級等苗傅。

當訪問量劇增、服務(wù)出現(xiàn)問題仍然需要保證服務(wù)還是可用的班巩。系統(tǒng)可以根據(jù)一些關(guān)鍵數(shù)據(jù)進行自動降級渣慕,也可以配置開關(guān)實現(xiàn)人工降級,這里會涉及到運維的配合。

降級的最終目的是保證核心服務(wù)可用逊桦,即使是有損的眨猎。比如推薦服務(wù)中,很多都是個性化的需求强经,假如個性化需求不能提供服務(wù)了宵呛,可以降級補充熱點數(shù)據(jù),不至于造成前端頁面是個大空白夕凝。

在進行降級之前要對系統(tǒng)進行梳理宝穗,比如:哪些業(yè)務(wù)是核心(必須保證),哪些業(yè)務(wù)可以容許暫時不提供服務(wù)(利用靜態(tài)頁面替換)等码秉,以及配合服務(wù)器核心指標逮矛,來后設(shè)置整體預案,比如:

(1)一般:比如有些服務(wù)偶爾因為網(wǎng)絡(luò)抖動或者服務(wù)正在上線而超時转砖,可以自動降級须鼎;

(2)警告:有些服務(wù)在一段時間內(nèi)成功率有波動(如在95~100%之間),可以自動降級或人工降級府蔗,并發(fā)送告警晋控;

(3)錯誤:比如可用率低于90%,或者數(shù)據(jù)庫連接池被打爆了姓赤,或者訪問量突然猛增到系統(tǒng)能承受的最大閥值赡译,此時可以根據(jù)情況自動降級或者人工降級;

(4)嚴重錯誤:比如因為特殊原因數(shù)據(jù)錯誤了不铆,此時需要緊急人工降級蝌焚。

Redis備份和快速預熱

Redis數(shù)據(jù)備份和恢復;

快速緩存預熱誓斥。

提前演練

最后只洒,建議還是在項目上線前,演練緩存層宕掉后劳坑,應(yīng)用以及后端的負載情況以及可能出現(xiàn)的問題毕谴,對高可用提前預演,提前發(fā)現(xiàn)問題距芬。

2涝开、緩存穿透

緩存穿透是指查詢一個不存在的數(shù)據(jù),由于在redis里面沒有命中蔑穴,需要從mysql或者其他數(shù)據(jù)庫查詢忠寻,查不到數(shù)據(jù)則不寫入緩存,這將導致這個不存在的數(shù)據(jù)每次請求都要去mysql或者其他數(shù)據(jù)庫查詢存和,造成緩存穿透。

解決辦法:

如果查詢數(shù)據(jù)庫為空,那設(shè)置一個默認值放置在緩存中捐腿,設(shè)置一個過期時間或者單有值時將緩存中的值替換掉纵朋;可以給key設(shè)置一些規(guī)則,然后查詢之前先過濾掉不符合規(guī)則的key茄袖。

3操软、緩存并發(fā)

redis是單進程單線程操作,多個client并發(fā)操作宪祥,按照先到先執(zhí)行的原則聂薪,其余的阻塞。另外的解決方案是把redis.set操作放在隊列中使其串行化蝗羊,必須一個一個的執(zhí)行藏澳。

4、緩存預熱

緩存預熱就是系統(tǒng)上線后耀找,將相關(guān)的琿春數(shù)據(jù)直接加載到緩存系統(tǒng)翔悠,這樣可以避免在用戶請求時,先查詢數(shù)據(jù)庫野芒,然后再將數(shù)據(jù)緩存的問題蓄愁。

解決思路:使用緩存刷新頁面,人工刷新狞悲;數(shù)據(jù)量不大時撮抓,可以在項目啟動時自動進行加載。

5摇锋、redis緩存和mysql數(shù)據(jù)一致性

不管是先寫mysql數(shù)據(jù)庫胀滚,再刪除redis緩存,還是先刪除緩存乱投,在寫庫咽笼,都有可能出現(xiàn)數(shù)據(jù)不一致的情況。

解決方案:

(1)采用延時雙刪策略戚炫,在寫庫前后都進行redis.del(key)操作剑刑,并且設(shè)定合理的超時時間。具體步驟是:先刪除緩存双肤,再寫數(shù)據(jù)庫施掏,設(shè)置休眠時間,再次刪除緩存茅糜。

設(shè)置的休眠時間主要是根據(jù)業(yè)務(wù)邏輯的耗時進行設(shè)計七芭,確保讀請求結(jié)束,寫請求可以刪除讀請求造成的緩存臟數(shù)據(jù)蔑赘。當然這個時間還需要考慮redis和數(shù)據(jù)庫主從同步的耗時狸驳。

設(shè)置緩存過期時間预明,給緩存設(shè)置過期時間,是保證最終一致性的解決方案耙箍。所有的寫操作以數(shù)據(jù)庫為準撰糠,只要到達緩存過期時間,則后面的讀請求自然會從數(shù)據(jù)庫中讀取新的值然后回填緩存辩昆。

結(jié)合雙刪策略+緩存超時設(shè)置阅酪,最差的情況就是在超時時間內(nèi)數(shù)據(jù)存在不一致,而且又增加了寫請求耗時汁针。

(2)異步更新緩存

Mysql binlog增量訂閱消費+消息隊列+增量數(shù)據(jù)更新到redis术辐;讀Redis時,熱數(shù)據(jù)基本都在redis施无;寫mysql時辉词,增刪改都是操作mysql;更新redis數(shù)據(jù):mysql的數(shù)據(jù)操作binlog帆精,來更新到redis较屿;

redis更新主要數(shù)據(jù)操作分為全量操作(將全部數(shù)據(jù)一次性寫入到redis)和增量操作(實時更新),這里的增量指的是mysql的update卓练,insert隘蝎,delete變更的數(shù)據(jù)。

讀取binlog分析襟企,利用消息隊列嘱么,推送更新各臺的redis緩存數(shù)據(jù),這樣一旦mysql中產(chǎn)生了行的寫入顽悼、更新曼振、刪除等操作,就可以把binlog相關(guān)的信息推送到redis蔚龙,redis在根據(jù)binlog的記錄冰评,對redis進行更新。這種機制很類似mysql的主從備份機制木羹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甲雅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坑填,更是在濱河造成了極大的恐慌抛人,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脐瑰,死亡現(xiàn)場離奇詭異妖枚,居然都是意外死亡,警方通過查閱死者的電腦和手機苍在,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門绝页,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荠商,“玉大人,你說我怎么就攤上這事抒寂〗崽洌” “怎么了掠剑?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵屈芜,是天一觀的道長。 經(jīng)常有香客問我朴译,道長井佑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任眠寿,我火速辦了婚禮躬翁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盯拱。我一直安慰自己盒发,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布狡逢。 她就那樣靜靜地躺著宁舰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奢浑。 梳的紋絲不亂的頭發(fā)上蛮艰,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音雀彼,去河邊找鬼壤蚜。 笑死,一個胖子當著我的面吹牛徊哑,可吹牛的內(nèi)容都是我干的袜刷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼莺丑,長吁一口氣:“原來是場噩夢啊……” “哼著蟹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窒盐,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤草则,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蟹漓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炕横,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年葡粒,在試婚紗的時候發(fā)現(xiàn)自己被綠了份殿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膜钓。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卿嘲,靈堂內(nèi)的尸體忽然破棺而出颂斜,到底是詐尸還是另有隱情,我是刑警寧澤拾枣,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布沃疮,位于F島的核電站,受9級特大地震影響梅肤,放射性物質(zhì)發(fā)生泄漏司蔬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一姨蝴、第九天 我趴在偏房一處隱蔽的房頂上張望俊啼。 院中可真熱鬧,春花似錦左医、人聲如沸授帕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跛十。三九已至,卻和暖如春黔寇,著一層夾襖步出監(jiān)牢的瞬間偶器,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工缝裤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屏轰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓憋飞,卻偏偏與公主長得像霎苗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子榛做,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 五種數(shù)據(jù)結(jié)構(gòu)簡介 Redis是使用C編寫的唁盏,內(nèi)部實現(xiàn)了一個struct結(jié)構(gòu)體redisObject對象,通過結(jié)構(gòu)體...
    彥幀閱讀 6,944評論 0 14
  • 使用緩存是系統(tǒng)性能優(yōu)化的第一黃金法則检眯。 緩存的設(shè)計和使用對一個系統(tǒng)的性能至關(guān)重要厘擂,平時接觸到項目無論多少也都會在某...
    刀刃丿閱讀 1,344評論 0 6
  • Redis是一個 Key-Value 存儲系統(tǒng)刽严。和 Memcached 類似,它支持存儲的 value 類型相對更...
    vivi_wong閱讀 13,348評論 2 4
  • 一倒脓、什么是redis緩存穿透撑螺,緩存雪崩,緩存擊穿 1崎弃、緩存穿透 緩存穿透甘晤,是指查詢一個數(shù)據(jù)庫一定不存在的數(shù)據(jù)。正常...
    挑戰(zhàn)者666888閱讀 1,004評論 0 0
  • 分布式緩存技術(shù)PK:選擇Redis還是Memcached调鬓? 經(jīng)平臺同意授權(quán)轉(zhuǎn)載 作者:田京昆(騰訊后臺研發(fā)工程師)...
    meng_philip123閱讀 68,928評論 7 60