加法速算 為什么要用redis,redis有哪些優(yōu)缺點(diǎn)?redis如何實(shí)現(xiàn)擴(kuò)容?
為什么要用redis,redis有哪些優(yōu)缺點(diǎn)?redis如何實(shí)現(xiàn)擴(kuò)容?Redis等鍵值緩存產(chǎn)品有以下三個(gè)特點(diǎn):Redis支持?jǐn)?shù)據(jù)持久化,可以將數(shù)據(jù)保存在磁盤(pán)內(nèi)存中,重啟時(shí)可以重新加載使用。Redis不
為什么要用redis,redis有哪些優(yōu)缺點(diǎn)?redis如何實(shí)現(xiàn)擴(kuò)容?
Redis等鍵值緩存產(chǎn)品有以下三個(gè)特點(diǎn):Redis支持?jǐn)?shù)據(jù)持久化,可以將數(shù)據(jù)保存在磁盤(pán)內(nèi)存中,重啟時(shí)可以重新加載使用。Redis不僅支持簡(jiǎn)單的鍵值數(shù)據(jù),還提供list、set、Zset、hash等數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。Redis支持?jǐn)?shù)據(jù)備份,即主從模式下的數(shù)據(jù)備份。Redis具有極高的性能。C redis可以讀110000次/s,寫(xiě)81000次/s。豐富的數(shù)據(jù)類(lèi)型C redis支持二進(jìn)制大小寫(xiě)的字符串、列表、哈希、集合和有序集合數(shù)據(jù)類(lèi)型操作。原子C redis的所有操作都是原子的。同時(shí),redis還支持合并多個(gè)操作后的原子執(zhí)行。富特性C redis還支持發(fā)布/訂閱、通知、密鑰過(guò)期等特性。
redis原子的遞增一定能保證數(shù)據(jù)是一致的嗎?
Redis的設(shè)計(jì)模式?jīng)Q定了incr操作既能滿足原子性,又能保證數(shù)據(jù)的一致性。
原子性和一致性是數(shù)據(jù)庫(kù)事務(wù)中最常提到的概念,包括隔離和持久性。為什么數(shù)據(jù)庫(kù)事務(wù)要同時(shí)滿足這四個(gè)特性,而redis卻不能?主要原因是它們的并發(fā)處理模式不同。
Redis使用IO多路復(fù)用模式,即多個(gè)網(wǎng)絡(luò)連接多路復(fù)用一個(gè)處理線程。在這種模式下,所有命令都按順序執(zhí)行,在多線程場(chǎng)景中沒(méi)有并發(fā)問(wèn)題。同時(shí),命令的原子性確保操作要么完全執(zhí)行要么完全回滾。沒(méi)有第三種情況,保證了數(shù)據(jù)的一致性:其他命令只能在前一個(gè)命令執(zhí)行或失敗后執(zhí)行,并且數(shù)據(jù)狀態(tài)穩(wěn)定,必須是一致的。
如何高效向redis插入大量的數(shù)據(jù)?
1. 創(chuàng)建一個(gè)新的文本文件,包括redis命令
set key0 value0 set key1 value1。。。Set Keyn valuen
如果你有原始數(shù)據(jù),構(gòu)造這個(gè)文件并不困難,比如shell或Python
2。將這些命令轉(zhuǎn)換為redis協(xié)議。
redis pipeline函數(shù)支持redis協(xié)議,而不是直接的redis命令。
如何轉(zhuǎn)換可以參考以下腳本。
3. 插入帶管道的cat數(shù)據(jù).txt|redis cli--pipe
Shell VS redis pipe