一、速度快。
????????這主要時因為這些數(shù)據(jù)都時存在雨內存中的。另外當你打開Redis的源碼時,你會發(fā)現(xiàn)Redis都是用C語言寫的,C語言時最接近計算級語言的,且只有五萬行代碼,從而保證了Redis的速度。同時,因為Redis是單線程的,因為單線程在內存中是效率最高的。
二、持久化。
? ? ? ? Redis的持久化可以保證將內存中的數(shù)據(jù)每隔一段時間就保存在磁盤中,重啟的時候會重新加載到內存中。齒芥花方式是RDB和AOF。(RDB和AOF區(qū)別在最后)
三、支持多種數(shù)據(jù)結構
? ? ? ? Redis支持哈希、集合、BitMaps、還有位圖(用于活躍用戶數(shù)統(tǒng)計等)、HyperLogLog(超小內存唯一值計數(shù))、GEO(地理信息定位)。
四、支持多種編程語言
? ? ? ? 支持Java、PHP、Python、Ruby、Lua、Nodejs。
五、功能豐富
? ? ? ? 如發(fā)布訂閱、Lua腳本、事物、Pipeline(管道,即當指令到達一定數(shù)量后,客戶端才會執(zhí)行)。
六、簡單
? ? ? ? 不依賴外部庫、單線程、只有23000行的Code。
七、主從復制
? ? ? ? 主節(jié)點的數(shù)據(jù)做副本、這事做高可用的基石。
八、高可用和分布式
? ? ? ? Redis-Sentinel(v2.8)支持高可用、Redis-Cluster(v3.0)支持分布式。
Redis的使用場景:
? ? ? ? Redis最大的作用是增加訪問性能的問題,他可以解決很多關系型數(shù)據(jù)庫無法解決的問題。
1、緩存系統(tǒng)
? ? ? ? 這是Redis使用最多的應用場景。Redis能提到Memcached,讓你的緩存從只能存儲數(shù)據(jù)變得能夠更新數(shù)據(jù)、因此你不再需要每次都重新生成數(shù)據(jù)。
2、計數(shù)器
? ? ? ? 如轉發(fā)數(shù)、評論數(shù)、有了原子遞增,你可以放心的加上各種計數(shù)。
3、消息隊列系統(tǒng)
? ? ? ? 雖然Kafka更強,但是簡單的可以使用Redis。運行穩(wěn)定且快速、支持模式匹配,能夠實時訂閱和取消。Redis還有阻塞隊列的命令,可以讓一個程序在執(zhí)行時被另一個程序添加到隊列。
4、排行榜及相關問題
? ? ? ? 其實就是一種有序集合。對于Redis來說,你要在幾百萬個用戶中找到排名,其他的數(shù)據(jù)庫的查詢速度時非常慢的,但是Redis可以輕松解決。
5、實時系統(tǒng)
? ? ? ? 使用位圖來做布隆過濾器,例如實現(xiàn)垃圾郵件過濾系統(tǒng)的開發(fā)變得非常容易。
RDB和AOF兩種持久化的區(qū)別
????RDB:原理是將Redis在內存中的數(shù)據(jù)庫記錄定時dump到磁盤的RDB持久化。
????AOF:原理是將Redis的操作日志以追加的方式寫入文件。
? ? RDB持久化是值在指定的時間間隔內將內存中的數(shù)據(jù)集快照寫入磁盤,實際操作過程是fork一個子進程,先將數(shù)據(jù)集寫入臨時文件,寫入成功后,再替換之前的文件,用二進制壓縮存儲。
? ? AOF持久化是以日志的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。
本章內容就寫到這,希望能對你有幫助。