Redid中指定更新日志條件虹钮,共有3個可選值
no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快)
always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢翼雀,安全)
everysec:表示每秒同步一次(折衷奏黑,默認值)
Redis 事務(wù)可以一次執(zhí)行多個命令炊邦, 并且?guī)в幸韵聝蓚€重要的保證:
事務(wù)是一個單獨的隔離操作:事務(wù)中的所有命令都會序列化、按順序地執(zhí)行熟史。事務(wù)在執(zhí)行的過程中馁害,不會被其他客戶端發(fā)送來的命令請求所打斷。
事務(wù)是一個原子操作:事務(wù)中的命令要么全部被執(zhí)行蹂匹,要么全部都不執(zhí)行碘菜。
一個事務(wù)從開始到執(zhí)行會經(jīng)歷以下三個階段:
開始事務(wù)。
命令入隊限寞。
執(zhí)行事務(wù)忍啸。
以 MULTI 開始一個事務(wù), 然后將多個命令入隊到事務(wù)中履植, 最后由 EXEC 命令觸發(fā)事務(wù)计雌, 一并執(zhí)行事務(wù)中的所有命令:
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
redis 127.0.0.1:6379> GET book-name
QUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
redis 127.0.0.1:6379> SMEMBERS tag
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
2) "C++"
3) "Programming"
緩存穿透
- 緩存穿透是指查詢?個數(shù)據(jù)庫?定不存在的數(shù)據(jù)。
- ?并發(fā)下玫霎,?秒鐘前?百個請求向數(shù)據(jù)庫請求凿滤,第?百零?個數(shù)據(jù)發(fā)現(xiàn)緩存有了传泊,就去訪
問緩存,?影響鸭巴。 - ?并發(fā)下眷细,?秒鐘?百萬個請求都去請求?個數(shù)據(jù),但是緩存沒有鹃祖,再去請求數(shù)據(jù)庫溪椎,數(shù)
據(jù)庫?也不存在,此時恬口,這?百萬個請求已經(jīng)和數(shù)據(jù)庫交互了校读。所以叫做繞過緩存,把
redis緩存數(shù)據(jù)庫穿透了祖能。 - 想象?下歉秫,uuid查詢,很容易找到?個不存在的key养铸,惡意攻擊雁芙,利?這個漏洞,很容易給
服務(wù)器帶來巨?的壓?钞螟。 - 解決?案:把不存在的給個null兔甘,放?緩存,可以防?攻擊?戶反復(fù)?同?個id暴?攻擊鳞滨。
緩存雪崩:
- 指緩存中數(shù)據(jù)?批量到過期時間甚?緩存服務(wù)器宕機洞焙,?查詢數(shù)據(jù)量巨?,引起數(shù)據(jù)庫壓
?過?甚?宕機拯啦。 - 和緩存擊穿不同的是澡匪,緩存擊穿指并發(fā)查同?條數(shù)據(jù),緩存雪崩是不同數(shù)據(jù)都過期了褒链,很
多數(shù)據(jù)都查不到從?查數(shù)據(jù)庫唁情。 - 解決?案:?般采取不同分類商品,設(shè)計隨機因?碱蒙,緩存不同周期
緩存擊穿
- 描述:緩存擊穿是指緩存中沒有但數(shù)據(jù)庫中有的數(shù)據(jù)(?般是緩存時間到期)荠瘪,這時由于并發(fā)?
戶特別多,同時讀緩存沒讀到數(shù)據(jù)赛惩,?同時去數(shù)據(jù)庫去取數(shù)據(jù)哀墓,引起數(shù)據(jù)庫壓?瞬間增?,造成
過?壓?喷兼。 - 例?:爆款
- 解決?案:
- 設(shè)置熱點數(shù)據(jù)永遠不過期篮绰。