redis--內(nèi)存型key-value型數(shù)據(jù)庫

一、什么是redis?

redis是c語言編寫的內(nèi)存型key-value高性能的數(shù)據(jù)庫,遵從BSD協(xié)議

二、redis有哪些優(yōu)點(diǎn)?

1、性能極高?– Redis能讀的速度是110000次/s,寫的速度是81000次/s 。

2、豐富的數(shù)據(jù)類型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。

3、原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個(gè)操作是原子性的。多個(gè)操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來。

4、豐富的特性?– Redis還支持 publish/subscribe, 通知, key 過期等等特性。

三、為什么使用redis?redis的使用場景?

1.性能

? ??我們?cè)谂龅叫枰獔?zhí)行耗時(shí)特別久,且結(jié)果不頻繁變動(dòng)的SQL,就特別適合將運(yùn)行結(jié)果放入緩存。

2.并發(fā)

? ??在大并發(fā)的情況下,所有的請(qǐng)求直接訪問數(shù)據(jù)庫,數(shù)據(jù)庫會(huì)出現(xiàn)連接異常。這個(gè)時(shí)候,就需要使用redis做一個(gè)緩沖操作,讓請(qǐng)求先訪問到redis,而不是直接訪問數(shù)據(jù)庫。

四、redis的工作模式及原理

1、redis是單線程工作模型。

(一)純內(nèi)存操作

(二)單線程操作,避免了頻繁的上下文切換

(三)采用了非阻塞I/O多路復(fù)用機(jī)制

2、redis的線程模型

五、redis的過期策略以及內(nèi)存淘汰機(jī)制

redis采用的是定期刪除+惰性刪除策略。

定期刪除+惰性刪除是如何工作的呢?

定期刪除,redis默認(rèn)每個(gè)100ms檢查,是否有過期的key,有過期key則刪除。需要說明的是,redis不是每個(gè)100ms將所有的key檢查一次,而是隨機(jī)抽取進(jìn)行檢查(如果每隔100ms,全部key進(jìn)行檢查,redis豈不是卡死)。因此,如果只采用定期刪除策略,會(huì)導(dǎo)致很多key到時(shí)間沒有刪除。

于是,惰性刪除派上用場。也就是說在你獲取某個(gè)key的時(shí)候,redis會(huì)檢查一下,這個(gè)key如果設(shè)置了過期時(shí)間那么是否過期了?如果過期了此時(shí)就會(huì)刪除。

內(nèi)存淘汰機(jī)制

在redis.conf中有一行配置

# maxmemory-policy volatile-lru

1)noeviction:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),新寫入操作會(huì)報(bào)錯(cuò)。應(yīng)該沒人用吧。

2)allkeys-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在鍵空間中,移除最近最少使用的key。推薦使用,目前項(xiàng)目在用這種。

3)allkeys-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在鍵空間中,隨機(jī)移除某個(gè)key。應(yīng)該也沒人用吧,你不刪最少使用Key,去隨機(jī)刪。

4)volatile-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在設(shè)置了過期時(shí)間的鍵空間中,移除最近最少使用的key。這種情況一般是把redis既當(dāng)緩存,又做持久化存儲(chǔ)的時(shí)候才用。不推薦

5)volatile-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在設(shè)置了過期時(shí)間的鍵空間中,隨機(jī)移除某個(gè)key。依然不推薦

6)volatile-ttl:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在設(shè)置了過期時(shí)間的鍵空間中,有更早過期時(shí)間的key優(yōu)先移除。不推薦

ps:如果沒有設(shè)置 expire 的key, 不滿足先決條件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行為, 和 noeviction(不刪除) 基本上一致。

鏈接:https://redis.io/documentation? redis文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容