還記得上家公司做操盤應(yīng)用摧莽,因數(shù)據(jù)操作頻繁,所以當(dāng)時(shí)用了redis來做數(shù)據(jù)的緩存 陨界。還有個(gè)做緩存的叫memcached巡揍,這個(gè)之前學(xué)php的時(shí)候用過,不過實(shí)際項(xiàng)目中并沒有用到菌瘪,相比redis的優(yōu)勢(shì)有:
- Redis不僅僅支持簡(jiǎn)單的k/v類型的數(shù)據(jù)腮敌,同時(shí)還提供list阱当,set,zset糜工,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)弊添。
- Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份捌木。
- Redis支持?jǐn)?shù)據(jù)的持久化油坝,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用刨裆。
Redis 5中集中數(shù)據(jù)類型:
字符串類型(string)澈圈,散列類型(hash),列表類型(list)帆啃,集合類型(set)瞬女,有序集合類型(zset)
結(jié)構(gòu)類型 | 存儲(chǔ)的值 | 讀寫能力 |
---|---|---|
String | 字符串、整數(shù)努潘、浮點(diǎn)數(shù) | 對(duì)整個(gè)字符串或其中一部分執(zhí)行操作诽偷;對(duì)整數(shù)和浮點(diǎn)數(shù)執(zhí)行自增或自減操作 |
List | 鏈表 | 從鏈表兩端進(jìn)行push、pull操作 |
Set | 包含字符串的無序收集器疯坤,不重復(fù) | 添加渤刃、獲取、刪除單個(gè)元素贴膘;檢查元素是否存在于集合中卖子;計(jì)算交集、并集刑峡、差集 |
Hash | 包含鍵值對(duì)的無序列表 | 添加洋闽、獲取、刪除單個(gè)元素突梦;獲取所有鍵值對(duì)元素 |
Zset | 字符串成員與浮點(diǎn)數(shù)分?jǐn)?shù)之間的有序映射 | 添加诫舅、獲取、刪除單個(gè)元素宫患;根據(jù)分值范圍或成員來獲取元素 |
Redis存儲(chǔ)策略:
首先來了解一下redis緩存雪崩刊懈,因?yàn)閿?shù)據(jù)未加載到緩存中,或者緩存同一時(shí)間大面積失效娃闲,從而導(dǎo)致所有請(qǐng)求去查數(shù)據(jù)庫(kù)虚汛,導(dǎo)致數(shù)據(jù)庫(kù)CPU和內(nèi)存負(fù)載過高,甚至宕機(jī)皇帮。
存儲(chǔ)策略分為Snapshot和AOF兩種卷哩,這兩種機(jī)制都是講數(shù)據(jù)存儲(chǔ)在內(nèi)容中:
Snapshot:將數(shù)據(jù)先存儲(chǔ)在內(nèi)存中,當(dāng)數(shù)據(jù)量累計(jì)達(dá)到設(shè)定的閥值時(shí)属拾,會(huì)觸發(fā)一次DUMP操作将谊,將變化的數(shù)據(jù)一次性寫入數(shù)據(jù)文件
AOF:將數(shù)據(jù)先存在內(nèi)存中冷溶,存儲(chǔ)的時(shí)候會(huì)調(diào)用fsync來完成本次操作的日志記錄,AOF最關(guān)鍵的配置就是關(guān)于調(diào)用fsync追加日志文件的平率尊浓,有兩種預(yù)設(shè)頻率逞频,always每次記錄進(jìn)來都添加,everysecond 每秒添加一次
當(dāng)數(shù)據(jù)量大的時(shí)候栋齿,會(huì)用一下策略:
唯一標(biāo)識(shí)作為key虏劲,存全部信息
其它查詢信息作為key,只存唯一標(biāo)識(shí)
監(jiān)控變化褒颈,expire設(shè)置過起時(shí)間
Redis容災(zāi)策略:
- 采用主從方式(mater-slave)
- 為了讀寫性能,master不做任何持久化
- slave開啟Snapshot和AOF來進(jìn)行持久化励堡,保證數(shù)據(jù)安全性
- master掛掉后谷丸,修改slav為master
- 恢復(fù)master后,將原先的master修改為slave应结,啟動(dòng)slave
- master和slave都掛掉了刨疼,調(diào)用命令通過AOF和Snapshot進(jìn)行恢復(fù)