0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis能夠勝任存儲工作嗎?

jf_ro2CN3Fa ? 來源:小姐姐味道 ? 2023-10-09 14:52 ? 次閱讀

大多數(shù)數(shù)據(jù)庫,由于經(jīng)常和磁盤打交道,在高并發(fā)場景下,響應(yīng)會非常的慢。為了解決這種速度差異,大多數(shù)系統(tǒng)都習(xí)慣性的加入一個緩存層,來加速數(shù)據(jù)的讀取。redis由于它優(yōu)秀的處理能力和豐富的數(shù)據(jù)結(jié)構(gòu),已經(jīng)成為了事實(shí)上的分布式緩存標(biāo)準(zhǔn)

但是,如果你以為redis只能做緩存的話,那就太小看它了。

redis豐富的數(shù)據(jù)結(jié)構(gòu),使得它的業(yè)務(wù)使用場景非常廣泛,加上rdb的持久化特性,它甚至能夠被當(dāng)作落地的數(shù)據(jù)庫使用。在這種情況下,redis能夠撐起大多數(shù)互聯(lián)網(wǎng)公司,尤其是社交、游戲、直播類公司的半壁江山。

1. Redis能夠勝任存儲工作

redis提供了非常豐富的集群模式:主從、哨兵、cluster,滿足服務(wù)高可用的需求。同時,redis提供了兩種持久化方式:aof和rdb,常用的是rdb。

通過bgsave指令,主進(jìn)程會fork出新的進(jìn)程,回寫磁盤。bgsave相當(dāng)于做了一個快照,由于它并沒有WAL日志和checkpoint機(jī)制,是無法做到實(shí)時備份的。如果機(jī)器突然斷電,那就很容易丟失數(shù)據(jù)。

幸運(yùn)的是,redis是內(nèi)存型的數(shù)據(jù)庫,主叢同步的速度是非??斓?。如果你的集群維護(hù)的好,內(nèi)存分配的合理,那么除非機(jī)房斷電,否則redis的SLA,會一直保持在非常高的水平。

43cc6900-666c-11ee-939d-92fbcf53809c.jpgimg

聽起來不是絕對可靠啊,有丟失數(shù)據(jù)的可能!這在一般CRUD的業(yè)務(wù)中,是無法忍受的。但為什么redis能夠滿足大多數(shù)互聯(lián)網(wǎng)公司的需求?這也是由業(yè)務(wù)屬性所決定的。

在決定最大限度擁抱redis之前,你需要確認(rèn)你的業(yè)務(wù)是否有以下特點(diǎn):

除了核心業(yè)務(wù),是否大多數(shù)業(yè)務(wù)對于數(shù)據(jù)的可靠性要求較低,丟失一兩條數(shù)據(jù)是可以忍受的?

面對的是C端用戶,可根據(jù)用戶ID快速定位到一類數(shù)據(jù),數(shù)據(jù)集合普遍較小?無大量范圍查詢需求?

是否能忍受內(nèi)存型數(shù)據(jù)的成本需求?

是否業(yè)務(wù)幾乎不需要事務(wù)操作?

很幸運(yùn)的是,這類業(yè)務(wù)需求特別的多。比如常見的社交,游戲、直播、運(yùn)營類業(yè)務(wù),都是可以完全依賴Redis的。

2. Redis 應(yīng)用場景

Redis具有松散的文檔結(jié)構(gòu),豐富的數(shù)據(jù)類型,能夠適應(yīng)千變?nèi)f化的scheme變更需求,接下來我將介紹Redis除緩存外的大量的應(yīng)用場景。

43d7429e-666c-11ee-939d-92fbcf53809c.jpgimg

2.1 基本用戶數(shù)據(jù)存儲

在傳統(tǒng)的數(shù)據(jù)庫設(shè)計中,用戶表是非常難以設(shè)計的,變更的時候會傷筋動骨。使用Redis的hash結(jié)構(gòu),可以實(shí)現(xiàn)松散的數(shù)據(jù)模型設(shè)計。某些不固定,驗(yàn)證型的功能屬性,可以以JSON接口直接存儲在hash的value中。使用hash結(jié)構(gòu),可以采用HGET和HMGET等指令,只獲取自己所需要的數(shù)據(jù),在使用上也是非常便捷的。

>HSETuser:199929sexm
>HSETuser:199929age22
>HGETALLuser:199929
1)"sex"
2)"m"
3)"age"
4)"22"

這種非統(tǒng)計型的、讀多寫少的場景,是非常適合使用KV結(jié)構(gòu)進(jìn)行存儲的。Redis的hash結(jié)構(gòu)提供了非常豐富的指令,某個屬性也可以使用HINCRBY進(jìn)行遞增遞減,非常的方便。

2.2 實(shí)現(xiàn)計數(shù)器

上面稍微提了一下HINCRBY指令,而對于Redis的Key本身來說,也有INCRBY指令,實(shí)現(xiàn)某個值的遞增遞減。

比如以下場景:統(tǒng)計某個帖子的點(diǎn)贊數(shù);存放某個話題的關(guān)注數(shù);存放某個標(biāo)簽的粉絲數(shù);存儲一個大體的評論數(shù);某個帖子熱度;紅點(diǎn)消息數(shù);點(diǎn)贊、喜歡、收藏數(shù)等。

>INCRBYfeedlike1
>INCRBYfeedlike1
>GETfeedlike
"2"

像微博這樣容易出現(xiàn)熱點(diǎn)的業(yè)務(wù),傳統(tǒng)的數(shù)據(jù)庫,肯定是撐不住的,就要借助于內(nèi)存數(shù)據(jù)庫。由于Redis的速度非??欤筒挥迷俨捎脗鹘y(tǒng)DB非常慢的count操作,所有這種遞增操作都是毫秒級別的,而且效果都是實(shí)時的。

2.3 排行榜

排行榜能提高參與者的積極性,所以這項(xiàng)業(yè)務(wù)非常常見,它本質(zhì)上是一個topn的問題。

Redis中有一個叫做zset的數(shù)據(jù)結(jié)構(gòu),使用跳表實(shí)現(xiàn)的有序列表,可以很容易實(shí)現(xiàn)排行榜一類的問題。當(dāng)存入zset中的數(shù)據(jù),達(dá)到千萬甚至是億的級別,依然能夠保持非常高的并發(fā)讀寫,且擁有非常棒的平均響應(yīng)時間(5ms以內(nèi))。

使用zadd 可以添加新的記錄,我們會使用排行相關(guān)的分?jǐn)?shù),作為記錄的score值,然后使用zrevrange指令即可獲取實(shí)時的排行榜數(shù)據(jù),而zrevrank則可以非常容易的獲取用戶的實(shí)時排名。

>ZADDsorted2021-0755dog0
>ZADDsorted2021-0789dog1
>ZADDsorted2021-0732dog2
>ZCARDsorted2021-07
>3
>ZREVRANGEsorted2021-070-10WITHSCORES#top10排行榜
1)"dog1"
2)"89"
3)"dog0"
4)"55"
5)"dog2"
6)"32"

2.4 好友關(guān)系

set結(jié)構(gòu),是一個沒有重復(fù)數(shù)據(jù)的集合,你可以將某個用戶的關(guān)注列表、粉絲列表、雙向關(guān)注列表、黑名單、點(diǎn)贊列表等,使用獨(dú)立的zset進(jìn)行存儲。

使用ZADD、ZRANK等,將用戶的黑名單使用ZADD添加,ZRANK使用返回的sorce值判斷是否存在黑名單中。使用sinter指令,可以獲取A和B的共同好友。

除了好友關(guān)系,有著明確黑名單、白名單業(yè)務(wù)場景的數(shù)據(jù),都可以使用set結(jié)構(gòu)進(jìn)行存儲。這種業(yè)務(wù)場景還有很多,比如某個用戶上傳的通訊錄,計算通訊錄的好友關(guān)系等等。

在實(shí)際使用中,使用zset存儲這類關(guān)系的更多一些。zset同set一樣,都不允許有重復(fù)值,但zset多了一個score字段,我們可以存儲一個時間戳,用來標(biāo)明關(guān)系建立所發(fā)生的時間,有更明確的業(yè)務(wù)含義。

2.5 統(tǒng)計活躍用戶數(shù)

類似統(tǒng)計每天的活躍用戶、用戶簽到、用戶在線狀態(tài),這種零散的需求,實(shí)在是太多了。如果為每一個用戶存儲一個bool變量,那占用的空間就太多了。這種情況下,我們可以使用bitmap結(jié)構(gòu),來節(jié)省大量的存儲空間。

>SETBITonline:2021-07-2338765203331
>SETBITonline:2021-07-2438765203331
>GETBITonline:2021-07-233876520333
1
>BITOPANDactiveonline:2021-07-23online:2021-07-24
>GETBITactive3876520333
1
>DEBUGOBJECTonline:2021-07-23
Valueat:0x7fdfde438bf0refcount:1encoding:rawserializedlength:5506446lru:16410558lru_seconds_idle:5
(0.96s)

注意,如果你的id很大,你需要先進(jìn)行一次預(yù)處理,否則它會占用非常多的內(nèi)存。

bitmap包含一串連續(xù)的2進(jìn)制數(shù)字,使用1bit來表示真假問題。在bitmap上,可以使用and、or、xor等位操作(bitop)。

2.6 分布式鎖

Redis的分布式鎖,是一種輕量級的解決方案。雖然它的可靠性比不上Zookeeper之類的系統(tǒng),但Redis分布式鎖有著極高的吞吐量。

一個最簡陋的加鎖動作,可以使用redis帶nx和px參數(shù)的set指令去完成。下面是一小段簡單的分布式樣例代碼。

publicStringlock(Stringkey,inttimeOutSecond){
for(;;){
Stringstamp=String.valueOf(System.nanoTime());
booleanexist=redisTemplate.opsForValue().setIfAbsent(key,stamp,timeOutSecond,TimeUnit.SECONDS);
if(exist){
returnstamp;
}
}
}
publicvoidunlock(Stringkey,Stringstamp){
redisTemplate.execute(script,Arrays.asList(key),stamp);
}

刪除操作的lua為。

localstamp=ARGV[1]
localkey=KEYS[1]
localcurrent=redis.call("GET",key)
ifstamp==currentthen
redis.call("DEL",key)
return"OK"
end

redisson的RedLock,是使用最普遍的分布式鎖解決方案,有讀寫鎖的差別,并處理了多redis實(shí)例情況下的異常問題。

2.7 分布式限流

使用計數(shù)器去實(shí)現(xiàn)簡單的限流,在Redis中是非常方便的,只需要使用incr配合expire指令即可。

incrkey
expirekey1

這種簡單的實(shí)現(xiàn),通常來說不會有問題,但在流量比較大的情況下,在時間跨度上會有流量突然飆升的風(fēng)險。根本原因,就是這種時間切分方式太固定了,沒有類似滑動窗口這種平滑的過度方案。

同樣是redisson的RRateLimiter,實(shí)現(xiàn)了與guava中類似的分布式限流工具類,使用非常便捷。下面是一個簡短的例子:

RRateLimiterlimiter=redisson.getRateLimiter("xjjdogLimiter");
//只需要初始化一次
//每2秒鐘5個許可
limiter.trySetRate(RateType.OVERALL,5,2,RateIntervalUnit.SECONDS);

//沒有可用的許可,將一直阻塞
limiter.acquire(3);

2.8 消息隊(duì)列

redis可以實(shí)現(xiàn)簡單的隊(duì)列。在生產(chǎn)者端,使用LPUSH加入到某個列表中;在消費(fèi)端,不斷的使用RPOP指令取出這些數(shù)據(jù),或者使用阻塞的BRPOP指令獲取數(shù)據(jù),適合小規(guī)模的搶購需求。

Redis還有PUB/SUB模式,不過pubsub更適合做消息廣播之類的業(yè)務(wù)。

在Redis5.0中,增加了stream類型的數(shù)據(jù)結(jié)構(gòu)。它比較類似于Kafka,有主題和消費(fèi)組的概念,可以實(shí)現(xiàn)多播以及持久化,已經(jīng)能滿足大多數(shù)業(yè)務(wù)需求了。

2.9 LBS應(yīng)用

早早在Redis3.2版本,就推出了GEO功能。通過GEOADD指令追加lat、lng經(jīng)緯數(shù)據(jù),可以實(shí)現(xiàn)坐標(biāo)之間的距離計算、包含關(guān)系計算、附近的人等功能。

關(guān)于GEO功能,最強(qiáng)大的開源方案是基于PostgreSQL的PostGIS,但對于一般規(guī)模的GEO服務(wù),redis已經(jīng)足夠用了。

2.10 更多擴(kuò)展應(yīng)用場景

要看redis能干什么,就不得不提以下java的客戶端類庫redisson。redisson包含豐富的分布式數(shù)據(jù)結(jié)構(gòu),全部是基于redis進(jìn)行設(shè)計的。

redisson提供了比如Set、 SetMultimap、 ScoredSortedSet、 SortedSet, Map、 ConcurrentMap、 List、 ListMultimap、 Queue、BlockingQueue等非常多的數(shù)據(jù)結(jié)構(gòu),使得基于redis的編程更加的方便。在github上,可以看到有上百個這樣的數(shù)據(jù)結(jié)構(gòu):https://github.com/redisson/redisson/tree/master/redisson/src/main/java/org/redisson/api。

對于某個語言來說,基本的數(shù)組、鏈表、集合等api,配合起來能夠完成大部分業(yè)務(wù)的開發(fā)。Redis也不例外,它擁有這些基本的api操作能力,同樣能夠組合成分布式的、線程安全的高并發(fā)應(yīng)用。

由于Redis是基于內(nèi)存的,所以它的速度非常快,我們也會把它當(dāng)作一個中間數(shù)據(jù)的存儲地去使用。比如一些公用的配置,放到redis中進(jìn)行分享,它就充當(dāng)了一個配置中心的作用;比如把JWT的令牌存放到Redis中,就可以突破JWT的一些限制,做到安全登出。

3. 一站式Redis面臨的挑戰(zhàn)

redis的數(shù)據(jù)結(jié)構(gòu)豐富,一般不會在功能性上造成困擾。但隨著請求量的增加,SLA要求的提高,我們勢必會對Redis進(jìn)行一些改造和定制性開發(fā)。

3.1 高可用挑戰(zhàn)

redis提供了主從、哨兵、cluster等三種集群模式,其中cluster模式為目前大多數(shù)公司所采用的方式。

但是,redis的cluster模式,有不少的硬傷。redis cluster采用虛擬槽的概念,把所有的key映射到 0~16383個整數(shù)槽內(nèi),屬于無中心化的架構(gòu)。但它的維護(hù)成本較高,slave也不能夠參與讀取操作。

它的主要問題,在于一些批量操作的限制。由于key被hash到多臺機(jī)器上,所以mget、hmset、sunion等操作就非常的不友好,經(jīng)常發(fā)生性能問題。

redis的主從模式是最簡單的模式,但無法做到自動failover,通常在主從切換后,還需要修改業(yè)務(wù)代碼,這是不能忍受的。即使加上haproxy這樣的負(fù)載均衡組件,復(fù)雜性也是非常高的。

哨兵模式在主從數(shù)量比較多的時候,能夠顯著的體現(xiàn)它的價值。一個哨兵集群,能夠監(jiān)控成百上千個集群,但是哨兵集群本身的維護(hù)是比較困難的。幸運(yùn)的是,redis的文本協(xié)議非常簡單,在netty中,甚至直接提供了redis的codec。自研一套哨兵系統(tǒng),加強(qiáng)它的功能,是可行的。

3.2 冷熱數(shù)據(jù)分離

redis的特點(diǎn)是,不管什么數(shù)據(jù),都一股腦地搞到內(nèi)存里做計算,這對于有時間序列概念,有冷熱數(shù)據(jù)之分的業(yè)務(wù),造成了非常大的成本考驗(yàn)。為什么大多數(shù)開發(fā)者喜歡把數(shù)據(jù)存放在MySQL中,而不是Redis中?除了事務(wù)性要求以外,很大原因是歷史數(shù)據(jù)的問題。

通常,這種冷熱數(shù)據(jù)的切換,是由中間件完成的。我們上面也談到了,Redis是一個文本協(xié)議,非常簡單。做一個中間件,或者做一個協(xié)議兼容的Redis模擬存儲,是比較容易的。

比如我們Redis中,只保留最近一年的活躍用戶。一個好幾年不活躍的用戶,突然間訪問了系統(tǒng),這時候我們獲取數(shù)據(jù)的時候,就需要中間件進(jìn)行轉(zhuǎn)換,從容量更大,速度更慢的存儲中查找。

這個時候,Redis的作用,更像是一個熱庫,更像是一個傳統(tǒng)cache層做的事情,發(fā)生在業(yè)務(wù)已經(jīng)上規(guī)模的時候。但是注意,直到此時,我們的業(yè)務(wù)層代碼,一直都是操作的redis的api。它們使用這眾多的函數(shù)指令,并不關(guān)心數(shù)據(jù)到底是真正存儲在redis中,還是在ssdb中。

3.3 功能性需求

redis還能玩很多花樣。舉個例子,全文搜索。很多人都會首選es,但redis生態(tài)就提供了一個模塊:RediSearch,可以做查詢,可以做filter。

但我們通常還會有更多的需求,比如統(tǒng)計類、搜索類、運(yùn)營效果分析等。這類需求與大數(shù)據(jù)相關(guān),即使是傳統(tǒng)的DB也不能勝任。這時候,我們當(dāng)然要把redis中的數(shù)據(jù),導(dǎo)入到其他平臺進(jìn)行計算啦。

如果你選擇的是redis數(shù)據(jù)庫,那么dba打交道的,就是rdb,而不是binlog。有很多的rdb解析工具(比如redis-rdb-tools),能夠定期把rdb解析成記錄,導(dǎo)入到hadoop等其他平臺。

此時,rdb成為所有團(tuán)隊(duì)的中樞,成為基本的數(shù)據(jù)交換格式。導(dǎo)入到其他db后的業(yè)務(wù),該怎么玩怎么玩,完全不會因?yàn)闃I(yè)務(wù)系統(tǒng)選用了redis就無法運(yùn)轉(zhuǎn)。

4. 總結(jié)

大多數(shù)業(yè)務(wù)系統(tǒng),跑在redis上,這是很多一直使用MySQL做業(yè)務(wù)系統(tǒng)的同學(xué)所不能想象的??赐炅松厦娴慕榻B,相信你能夠?qū)edis能夠?qū)崿F(xiàn)的存儲功能有個大體的了解。打開你的社交app、游戲app、視頻app,看一下它們的功能,能夠涵蓋多少呢?

我這里要強(qiáng)調(diào)的是,某些數(shù)據(jù),并不是一定要落地到RDBMS才算安全,它們并不是一個強(qiáng)需求。

那既然redis這么厲害,為什么還要有mysql、tidb這樣的存儲呢?關(guān)鍵還在于業(yè)務(wù)屬性上。

如果一個業(yè)務(wù)系統(tǒng),每次交互的數(shù)據(jù),都是一個非常大的結(jié)果集,并涉及到非常復(fù)雜的統(tǒng)計、過濾工作,那么RDBMS是必須的;但如果一個系統(tǒng),能夠通過某個標(biāo)識,快速定位到一類數(shù)據(jù),這一類數(shù)據(jù)在可以預(yù)見的未來,是有限的,那就非常適合Redis存儲。

一個電商系統(tǒng),選用redis做存儲就是作死,但一個社交系統(tǒng)就快活的多。在合適的場景選用合適的工具,才是我們應(yīng)該做的。

但是一個系統(tǒng),能否在產(chǎn)品驗(yàn)證期,就能快速的響應(yīng)變化,快速開發(fā)上線,才是成功的關(guān)鍵。這也是使用redis做數(shù)據(jù)庫,所能夠帶來的最大好處。千萬別被那概率極低的丟數(shù)據(jù)場景,給嚇怕了。比起產(chǎn)品成功,你的系統(tǒng)即使是牢如鋼鐵,也一文不值。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94581
  • SLA
    SLA
    +關(guān)注

    關(guān)注

    1

    文章

    54

    瀏覽量

    18273
  • Hash算法
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    7383
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    376

    瀏覽量

    10878

原文標(biāo)題:Redis只能做緩存?太out了!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用Rust連接Redis

    Redis是一款快速、開源、鍵值存儲數(shù)據(jù)庫,被廣泛應(yīng)用于緩存、發(fā)布/訂閱系統(tǒng)、定時任務(wù)等場景中。Rust提供了很多Redis的客戶端庫,本教程將會介紹如何使用Rust連接Redis,以
    的頭像 發(fā)表于 09-19 16:22 ?2374次閱讀

    Redis Stream應(yīng)用案例

    ,還有一個很重要的能力是跨平臺,甚至是作為一個嵌入式的存儲系統(tǒng)跑在基于ARM的平臺上,比如作者之前就宣稱,Redis成功的跑在了“樹莓派”上。試想一下,在IoT時代,會有無數(shù)隨時隨地可以接入互聯(lián)網(wǎng)
    發(fā)表于 06-26 17:15

    redis概述

    REmote DIctionary Server(Redis)是一個基于key-value鍵值對的持久化數(shù)據(jù)庫存儲系統(tǒng)。redis和大名鼎鼎的Memcached緩存服務(wù)軟件很像,但是redis
    發(fā)表于 07-17 07:38

    如何使得redis中的數(shù)據(jù)不再有

    嵌入式Linux系統(tǒng)重啟后如何使得redis中的數(shù)據(jù)不再有今天在工作中遇到一個問題:網(wǎng)頁展示redis中的數(shù)據(jù),然而再Linux系統(tǒng)重啟后網(wǎng)頁還能展示redis中的數(shù)據(jù),感覺很奇怪,到
    發(fā)表于 11-05 08:50

    簡要分析Redis的特性

    的、鍵值存儲數(shù)據(jù)庫。它也被稱為作為鍵值存儲的字典服務(wù)器,這些鍵值不僅可以是字符串,還可以是hashes(哈希類型)、sets(集合)、lists(列表) 和sorted sets(有序集合)。 Redis
    發(fā)表于 10-11 15:21 ?0次下載
    簡要分析<b class='flag-5'>Redis</b>的特性

    redis幾個認(rèn)識誤區(qū)

    Redis性能驚人,國內(nèi)前十大網(wǎng)站的子產(chǎn)品估計用1臺Redis就可以滿足存儲及Cache的需求。除了性能印象之外,業(yè)界其實(shí)普遍對Redis的認(rèn)識存在一定誤區(qū)。下文是對對
    的頭像 發(fā)表于 02-09 13:46 ?2692次閱讀

    Redis混合存儲產(chǎn)品與架構(gòu)介紹

    ,存在熱點(diǎn)數(shù)據(jù);內(nèi)存不足以放下所有數(shù)據(jù),且Value較大(相對于Key而言)線程模型Redis混合存儲實(shí)例采用單工作線程的模式,主線程為工作線程,負(fù)責(zé)處理用戶請求等主要邏輯。此外,
    發(fā)表于 08-30 16:09 ?188次閱讀

    關(guān)于redis中數(shù)據(jù)存儲的機(jī)制解析

    不同于memcached等完全基于內(nèi)存的緩存中間件,Redis同時還提供了持久化功能,這也是為什么Redis不僅可以用來做數(shù)據(jù)緩存還可以用來做數(shù)據(jù)存儲,服務(wù)器節(jié)點(diǎn)宕機(jī)之后可以通過事先持久化的數(shù)據(jù)還原數(shù)據(jù)到某個時間點(diǎn)的狀態(tài)。
    發(fā)表于 09-02 10:46 ?1125次閱讀
    關(guān)于<b class='flag-5'>redis</b>中數(shù)據(jù)<b class='flag-5'>存儲</b>的機(jī)制解析

    redis工作原理

    Redis作為內(nèi)存數(shù)據(jù)庫,擁有非常高的性能,單個實(shí)例的QPS能夠達(dá)到10W左右。但我們在使用Redis時,經(jīng)常時不時會出現(xiàn)訪問延遲很大的情況,如果你不知道Redis的內(nèi)部實(shí)現(xiàn)原理,在排
    的頭像 發(fā)表于 09-24 15:57 ?3562次閱讀

    Redis持久化機(jī)制的實(shí)現(xiàn)原理和使用技巧

    Redis將數(shù)據(jù)存儲在內(nèi)存中,宕機(jī)或重啟都會使內(nèi)存數(shù)據(jù)全部丟失, Redis的持久化機(jī)制用來保證數(shù)據(jù)不會因?yàn)楣收隙鴣G失。
    的頭像 發(fā)表于 09-13 16:42 ?1005次閱讀

    如何使用Redis更節(jié)省內(nèi)存?

    當(dāng)你的業(yè)務(wù)應(yīng)用在 Redis存儲數(shù)據(jù)很少時,你可能并不太關(guān)心內(nèi)存資源的使用情況。但隨著業(yè)務(wù)的發(fā)展,你的業(yè)務(wù)存儲Redis 中的數(shù)據(jù)就會越來越多。
    的頭像 發(fā)表于 12-19 15:41 ?954次閱讀

    深入探究Redis存儲原理

    **Redis是用C語言開發(fā)的一個開源的高性能鍵值對(key-value)內(nèi)存數(shù)據(jù)庫。** **Redis數(shù)據(jù)存儲原理**
    的頭像 發(fā)表于 02-15 15:52 ?777次閱讀
    深入探究<b class='flag-5'>Redis</b><b class='flag-5'>存儲</b>原理

    Redis架構(gòu)演化之路

    這個架構(gòu)非常簡單,你的業(yè)務(wù)應(yīng)用可以把 Redis 當(dāng)做緩存來使用,從 MySQL 中查詢數(shù)據(jù),然后寫入到 Redis 中,之后業(yè)務(wù)應(yīng)用再從 Redis 中讀取這些數(shù)據(jù),由于 Redis
    的頭像 發(fā)表于 08-03 16:54 ?613次閱讀
    <b class='flag-5'>Redis</b>架構(gòu)演化之路

    Redis中的使用

    Redis 作為內(nèi)存的存儲中間件,已經(jīng)是面試的面試題必問之一了,今天一起來看看 Redis 的事務(wù)吧。 事務(wù)提供了一種"將多個命令打包,一次性提交并按順序執(zhí)行"的機(jī)制,提交后在事務(wù)執(zhí)行中不會
    的頭像 發(fā)表于 10-08 15:27 ?476次閱讀
    <b class='flag-5'>Redis</b>中的使用

    redis的原理和使用場景

    、消息隊(duì)列、實(shí)時分析、排行榜和計數(shù)器等場景。本文將詳細(xì)介紹Redis的原理和使用場景。 一、Redis的原理 Redis的原理主要包括以下幾個方面: 內(nèi)存數(shù)據(jù)庫:Redis是一種內(nèi)存數(shù)
    的頭像 發(fā)表于 12-04 16:29 ?600次閱讀