Redis非關係型資料庫

2021-09-26 23:45:12 字數 1803 閱讀 4129

一、redis的事務管理

redis的事務管理是基於樂觀鎖實現的,主要是為了保證事務的一致性;一旦開啟事務後,redis的所有命令都會進入到乙個queue,只有commit,才會依次執行佇列中的命令;事務必須在乙個連線(connection)中執行,通常spring中會使用sessioncallback介面進行處理;

二、redis的超時命令

redis是基於記憶體儲存資料的,所以redis的資料儲存能力是有限的;在實際開發過程中,開發人員應該操作redis儲存資料庫中的熱點資料;這時候需要快取預熱和超時命令;

redis的key到期,不會立刻從記憶體中刪除

有三種情況會移除過期的key:

1>當使用到這個key的時候,此時發現key過期了,就會刪除;

2>redis自帶乙個定時掃瞄器,預設頻率是1次/s;

3>觸發redis的記憶體淘汰策略

三、lua指令碼

redis是單執行緒模型的非關係型資料庫,但是redis的資料不一定是安全的,為了確保redis的資料安全,redis提供了一套lua指令碼,將一套業務操作封裝到lua指令碼中,一起傳送到redis服務,redis單執行緒執行這個指令碼時,可以保證不會去執行其他客戶端的命令,從而達到原子性的操作,保證資料的一致性;

lua指令碼可以通過redis實現分布式鎖的功能;

四、redis的持久化

1>rdb:快照(預設行為)

快照就是將當前redis記憶體資料結構直接儲存到硬碟的乙個檔案中;

2>aof:只追加檔案

記錄使用者所有的增刪改操作的命令,寫到硬碟檔案中,當redis服務重啟時,直接根據aof檔案依次執行這些增刪改命令,從而達到恢復資料的目的

rdb與aof對比:

1、通常來說快照的恢復速度會遠快於aof檔案,但是aof檔案相對rdb會更安全,因為aof最多隻會丟失1s以內的資料,所以redis在恢復資料的時候會優先恢復aof;

2、如果需要比較安全的做法,則同時開啟rdb和aof,但是不能保證資料的絕對安全;

3、如果只是需要redis作為快取伺服器使用,可以關閉rdb和aof,將redis的效能提到最高;

4、rdb效能比aof要高,因為是快照,執行頻率也比aof要低,rdb檔案直接儲存的是key-value的二進位制形式,對於恢復速度也快,aof檔案儲存的是命令,恢復資料的時候需要逐行執行命令,所以恢復速度慢

五、redis的記憶體**策略

redis有以下**策略:

volatile-lru:從所有設定了超時時間的key中,選擇乙個最近最少被使用的key淘汰掉,如果沒有課刪除的key物件,會回退到noeviction策略

allkeys-lru:從所有的key中,選擇乙個最近最少被使用的key淘汰掉

volatile-lfu:從所有設定了超時時間的key中,選擇乙個總共最少被使用的key淘汰掉,如果沒有課刪除的key物件,會回退到noeviction策略

allkeys-lfu:從所有的key中,選擇乙個總共最少被使用的key淘汰掉

volatile-random:從所有設定了超時時間的key中,隨機選擇乙個key淘汰掉,直到釋足夠的記憶體為止

allkeys-random:從所有的key中,隨機選擇乙個key淘汰掉,直到釋放足夠的記憶體空間為止

volatile-ttl:從所有設定了超時時間的key中,選擇乙個存活時間最短的key淘汰掉,如果沒有,就會回退到noeviction策略

noeviction(預設策略):redis記憶體滿了之後,變成唯讀模式,拒絕所有寫入的操作,並返回oom錯誤資訊;

redis非關係型資料庫

概述 redis是一種nosql資料庫,他的資料是儲存在記憶體中,同時redis可以定時把記憶體資料同步到磁碟,即可以將資料持久化,並且他比memcached支援更多的資料結構 string,list列表 佇列和棧 set 集合 sorted set 有序集合 hash hash表 相關參考文件 r...

REDIS非關係型資料庫

redis資料以 key 和value進行儲存 非關係行資料庫 1.用於記憶體中快速讀寫和快取資料value value資料型別 1.string 2.hash 相當於hashmap,裡面可以繼續存放key 和value 3.list 可以有重複元素 4.set 不可以重複元素 5.sortedse...

非關係型資料庫 redis

非關係型資料庫的統稱 不保證關係資料的acid 事務性 特性 關注效能 高效能 不用sql語言 不用表儲存資料 開源 用 key value儲存資料 資料儲存在記憶體中 啟動redis,會把硬碟的資料讀取到記憶體 寫資料時先把資料直接寫到記憶體,然後會定期把資料儲存到硬碟。所以高效能 服務端操作 啟...