redis相關整理
redis 記憶體資料集大小上升到一定大小的時候,就會施行資料淘汰策略。redis 提供 6種資料淘汰策略:
voltile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰
volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰
volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰
allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰
allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰
no-enviction(驅逐):禁止驅逐資料
Redis支援哪幾種資料型別?
String、List、Set、Sorted Set、hashes
為什麼Redis需要把所有資料放到記憶體中?
Redis為了達到最快的讀寫速度將資料都讀到記憶體中,並通過非同步的方式將資料寫入磁碟。
所以redis具有快速和資料持久化的特徵。如果不將資料放在記憶體中,磁碟I/O速度為嚴重影響redis的效能。
在記憶體越來越便宜的今天,redis將會越來越受歡迎。 如果設定了最大使用的記憶體,則資料已有記錄數達到記憶體限值後不能繼續插入新值。
Redis事務相關的命令有哪幾個?
MULTI、EXEC、DISCARD、WATCH
Redis key的過期時間和永久有效分別怎麼設定?
EXPIRE和PERSIST命令
保證與資料庫的一致性:雙刪+超時
快取穿透:布隆過濾器
什麼是快取雪崩?
當快取伺服器重啟或者大量快取集中在某一個時間段失效,這樣在失效的時候,也會給後端系統(比如DB)帶來很大壓力。
如何避免?
1:在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許一個執行緒查詢資料和寫快取,其他執行緒等待。
2:不同的key,設定不同的過期時間,讓快取失效的時間點儘量均勻。
3:做二級快取,A1為原始快取,A2為拷貝快取,A1失效時,可以訪問A2,A1快取失效時間設定為短期,A2設定為長期(此點為補充)