NoSQL的運(yùn)用場景怜跑,你的項(xiàng)目在哪里用到它
1、什么是NoSQL
NOSQL說的是非關(guān)系型數(shù)據(jù)庫拆又,常用的有redis mongdb.
2温兼、Redis數(shù)據(jù)類型
- String(字符串)
- Hash (哈希,類似java中的map)
- List (列表):鏈表
- Set (集合)
- Zset (sorted set:有序集合)
3募判、數(shù)據(jù)存儲(chǔ)方式
redis的數(shù)據(jù)持久化有兩種方式,RDB(Redis DataBase)和AOF(Append Only File)
RDB
- 在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤咒唆,(snapshot快照),它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里全释。
- Redis會(huì)單獨(dú)創(chuàng)建一個(gè)子進(jìn)程來進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件中浸船,待持久化過程都結(jié)束時(shí)妄迁,再用這個(gè)臨時(shí)文件替換上次持久化好的文件李命。整個(gè)過程中,主進(jìn)程是不進(jìn)行任何IO操作的封字,這就確保了極高的性能耍鬓,如果需要進(jìn)行大規(guī)模數(shù)據(jù)恢復(fù),且對于數(shù)據(jù)恢復(fù)的完整性不是非常敏感辩撑,那rdb方式要比AOF方式更加高效界斜,RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。
- 默認(rèn)保存的文件 是 dump.rdb 文件, RDB也是默認(rèn)的保存策略
AOF
以日志的形式來記錄每個(gè)寫的操作合冀;將redis執(zhí)行過的所有寫指令記錄下來(讀操作不記錄)各薇,只許追加文件但不可以改寫文件,redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù)君躺,換言之峭判,redis重啟的話,就根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作棕叫。
aof保存的是appendonly.aof文件
appendonly no:默認(rèn)是關(guān)閉的林螃。修改為yes;
dump.rdb和appendonly.aof 可以同時(shí)存在俺泣,先會(huì)加載appendonly.aof文件疗认。
如果出現(xiàn)斷電等特殊情況,appendonly.aof文件中可能會(huì)出現(xiàn)錯(cuò)誤的內(nèi)內(nèi)容伏钠,當(dāng)redis啟動(dòng)時(shí)横漏,會(huì)先加載appendonly.aof文件,但是文件內(nèi)容錯(cuò)誤熟掂,則造成的結(jié)果就是啟動(dòng)失敗缎浇。
可以先將appendonly.aof文件進(jìn)行清理,然后再啟動(dòng).
4赴肚、使用redis有哪些好處
(1)速度快素跺,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類似于HashMap誉券,HashMap的優(yōu)勢就是查找和操作的時(shí)間復(fù)雜度都是O(1)
(2) 支持豐富數(shù)據(jù)類型指厌,支持string,list踊跟,set踩验,sorted set,hash
(3) 支持事務(wù)琴锭,操作都是原子性晰甚,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行衙传,要么全部不執(zhí)行
(4) 豐富的特性:可用于緩存决帖,消息,按key設(shè)置過期時(shí)間蓖捶,過期后將會(huì)自動(dòng)刪除
(5)性能極高 Redis能讀的速度是110000次/s,寫的速度是81000次/s
5地回、應(yīng)用場景
- 會(huì)話緩存,緩存購物車信息。
- 全頁面緩存
- 隊(duì)列
- 排行傍/計(jì)數(shù)器
- 發(fā)布與訂閱
- 限時(shí)任務(wù)刻像,如優(yōu)惠畅买,手機(jī)驗(yàn)證碼
- 分布式鎖
6、持久化策略
Appendfsync
i.always:同步持久化细睡,每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤中谷羞,性能較差但數(shù)據(jù)完整性比較好。
ii.everysec:出廠默認(rèn)推薦溜徙,異步操作湃缎,每秒記錄,如果一秒內(nèi)宕機(jī)蠢壹,有數(shù)據(jù)丟失
iii.no:不適用-
重寫rewrite
AOF采用文件追加方式嗓违,文件會(huì)越來越大為避免出現(xiàn)此種情況,新增了重寫機(jī)制图贸,當(dāng)AOF文件的大小超過所設(shè)定的值時(shí),redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮疏日。只保留可以恢復(fù)數(shù)據(jù)的最小指令。重寫的觸發(fā)機(jī)制:
Redis會(huì)記錄上次重寫時(shí)的aof大小父能,默認(rèn)配置是當(dāng)aof文件大小是上次rewrite后大小的一倍,且文件大于64M是觸發(fā)何吝。 缺點(diǎn)
相同數(shù)據(jù)集的數(shù)據(jù)而言aof文件要遠(yuǎn)大于rdb文件鹃唯,恢復(fù)速度慢與rdb;
Aof運(yùn)行效率要慢與rdb黔酥,每秒同步策略效率較好洪橘,不同步效率和rdb相同。
- 總結(jié)
RDB持久化方式能夠在指定的時(shí)間間隔能對你的數(shù)據(jù)記性快照存儲(chǔ)渣玲。
AOF持久化方式記錄每次對服務(wù)器寫的操作弟晚,當(dāng)服務(wù)器重啟的時(shí)候逾苫,會(huì)重新執(zhí)行哪些命令來恢復(fù)原始的數(shù)據(jù)枚钓,AOF命令一redis協(xié)議追加保存每次寫的操作到文件末尾,redis還能對AOF文件進(jìn)行后臺(tái)重寫星掰,使得AOF文件的體積不至于過大嫩舟。
只做緩存,如果你值希望你的數(shù)據(jù)在服務(wù)器運(yùn)行的時(shí)候存在至壤,你也可以不適用任何持久化的方式。
同時(shí)開啟兩種持久化的方式:第一黎棠、這種情況下镰绎,當(dāng)redis重啟的時(shí)候會(huì)優(yōu)先載入AOF文件來恢復(fù)原始的數(shù)據(jù),因?yàn)樵谕ǔG闆r下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集要完整随静,第二吗讶、RDB的數(shù)據(jù)不實(shí)時(shí),同時(shí)使用兩者服務(wù)器重啟也只會(huì)找AOF文件照皆,那要不要只使用aof呢?建議不要昭卓,因?yàn)镽DB更適合用于備份數(shù)據(jù)庫(aof在不斷變化不好備份)瘟滨,快速重啟,而且不會(huì)有AOF可能存在的bug倒淫。建議兩者都開啟。