Redis
- 數(shù)據(jù)模型
Redis的外圍由一個(gè)鍵、值映射的字典構(gòu)成粗合。
與其他非關(guān)系型數(shù)據(jù)庫主要不同在于:Redis中值的類型不僅限于字符串,還支持如下抽象數(shù)據(jù)類型:
字符串列表
無序不重復(fù)的字符串集合
有序不重復(fù)的字符串集合
鍵骨田、值都為字符串的哈希表
值的類型決定了值本身支持的操作长赞。Redis支持不同無序、有序的列表逛犹,無序端辱、有序的集合間的交集、并集等高級(jí)服務(wù)器端原子操作虽画。
- 持久化
Redis通常將全部的數(shù)據(jù)存儲(chǔ)在內(nèi)存中舞蔽。2.4版本后可配置為使用虛擬內(nèi)存,一部分?jǐn)?shù)據(jù)集存儲(chǔ)在硬盤上码撰,但這個(gè)特性廢棄了渗柿。
目前通過兩種方式實(shí)現(xiàn)持久化:
使用快照,一種半持久耐用模式脖岛。不時(shí)的將數(shù)據(jù)集以異步方式從內(nèi)存以RDB格式寫入硬盤朵栖。
1.1版本開始使用更安全的AOF格式替代,一種只能追加的日志類型柴梆。將數(shù)據(jù)集修改操作記錄起來混槐。Redis能夠在后臺(tái)對(duì)只可追加的記錄作修改來避免無限增長(zhǎng)的日志。
- 同步
Redis支持主從同步轩性。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制揣苏。從盤可以有意無意的對(duì)數(shù)據(jù)進(jìn)行寫操作悯嗓。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步樹時(shí)卸察,可訂閱一個(gè)頻道并接收主服務(wù)器完整的消息發(fā)布記錄脯厨。同步對(duì)讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。
- 性能
當(dāng)數(shù)據(jù)依賴不再需要坑质,Redis這種基于內(nèi)存的性質(zhì)合武,與在執(zhí)行一個(gè)事務(wù)時(shí)將每個(gè)變化都寫入硬盤的數(shù)據(jù)庫系統(tǒng)相比就顯得執(zhí)行效率非常高。寫與讀操作速度沒有明顯差別涡扼。
Memcached
Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng)稼跳,通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲(chǔ)各種格式的數(shù)據(jù)吃沪,包括圖像汤善、視頻、文件以及數(shù)據(jù)庫檢索的結(jié)果等票彪。簡(jiǎn)單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中红淡,然后從內(nèi)存中讀取,從而大大提高讀取速度降铸。
特征:
- 協(xié)議簡(jiǎn)單
它是基于文本行的協(xié)議在旱,直接通過telnet在memcached服務(wù)器上可進(jìn)行存取數(shù)據(jù)操作 - 基于libevent事件處理
Libevent是一套利用C開發(fā)的程序庫,它將BSD系統(tǒng)的kqueue,Linux系統(tǒng)的epoll等事件處理功能封裝成一個(gè)接口推掸,與傳統(tǒng)的select相比桶蝎,提高了性能。 - 內(nèi)置的內(nèi)存管理方式
所有數(shù)據(jù)都保存在內(nèi)存中终佛,存取數(shù)據(jù)比硬盤快俊嗽,當(dāng)內(nèi)存滿后,通過LRU算法自動(dòng)刪除不使用的緩存铃彰,但沒有考慮數(shù)據(jù)的容災(zāi)問題绍豁,重啟服務(wù),所有數(shù)據(jù)會(huì)丟失牙捉。 - 分布式
各個(gè)memcached服務(wù)器之間互不通信竹揍,各自獨(dú)立存取數(shù)據(jù),不共享任何信息邪铲。服務(wù)器并不具有分布式功能芬位,分布式部署取決于memcache客戶端。
Redis與Memcached的不同
- 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在很多方面具備數(shù)據(jù)庫的特征论颅,或者說就是一個(gè)數(shù)據(jù)庫系統(tǒng)哎垦,而Memcached只是簡(jiǎn)單的K/V緩存。
- memcache只能當(dāng)做緩存恃疯,cache漏设。redis的內(nèi)容是可以落地的,類似數(shù)據(jù)庫澡谭,然后redis也可以作為緩存愿题,并且可以設(shè)置master-slave。