什么是redis內(nèi)存數(shù)據(jù)庫(kù)?
創(chuàng)新互聯(lián)建站是專(zhuān)業(yè)的當(dāng)涂網(wǎng)站建設(shè)公司,當(dāng)涂接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行當(dāng)涂網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
Redis,本質(zhì)上上一個(gè)KEY-VALUE類(lèi)型的內(nèi)存數(shù)據(jù)庫(kù),整個(gè)數(shù)據(jù)庫(kù)都加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過(guò)異步操作把數(shù)據(jù)庫(kù)數(shù)據(jù)flush到硬盤(pán)上進(jìn)行保存。因此它是純內(nèi)存操作,Redis的性能非常出色,每秒可以處理超過(guò)10萬(wàn)次讀寫(xiě)操作。雖然是內(nèi)存數(shù)據(jù)庫(kù),但是其數(shù)據(jù)可以持久化,而且支持豐富的數(shù)據(jù)類(lèi)型。
Redis支持保存LIST列表和SET集合的數(shù)據(jù)結(jié)構(gòu),而且還支持對(duì)LIST進(jìn)行各種操作,例如從LIST兩端進(jìn)行PUSH和POP數(shù)據(jù),取LIST區(qū)間,排序等等。對(duì)SET支持各種集合的并集交集操作,單個(gè)value的最大限制是1GB。
Redis主要的缺點(diǎn)是受到物理內(nèi)存限制,不能用作海量數(shù)據(jù)的高性能讀寫(xiě),而且它沒(méi)有原生的可擴(kuò)展機(jī)制,不具有擴(kuò)展能力,要依賴(lài)客戶(hù)端來(lái)實(shí)現(xiàn)分布式讀寫(xiě),因此其適合的應(yīng)用場(chǎng)景主要局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。
最佳應(yīng)用場(chǎng)景:適用于數(shù)據(jù)變化快且數(shù)據(jù)庫(kù)大小可遇見(jiàn)(內(nèi)存大?。┑膽?yīng)用程序。
例如:股票軟件、數(shù)據(jù)分析、實(shí)時(shí)數(shù)據(jù)收集、實(shí)時(shí)通訊。
Redis屬于NOSQL范疇內(nèi),其含義為:Not only SQL,是不僅僅是SQL,是一項(xiàng)新的技術(shù),隨著WEB 2. 0的到來(lái)而得到廣泛應(yīng)用。理念是運(yùn)用非關(guān)系的數(shù)據(jù)存儲(chǔ)。
鍵值類(lèi)型的數(shù)據(jù)庫(kù)主要使用哈希表,這個(gè)表中有一個(gè)特定的鍵和一個(gè)指針指向特定數(shù)據(jù)。KEY/VALUE模型對(duì)于IT系統(tǒng)來(lái)說(shuō)的優(yōu)勢(shì)在于簡(jiǎn)單、容易部署。主要特點(diǎn)是具有極高的并發(fā)讀寫(xiě)性能。
什么是持久化?
Redis的所有數(shù)據(jù)都保存在內(nèi)存中,然后不定期的通過(guò)異步方式保存到磁盤(pán)上(這稱(chēng)為半持久化);也可以把每一次數(shù)據(jù)變化都寫(xiě)入到磁盤(pán)(這稱(chēng)為全持久化)。所謂持久化就是將內(nèi)存數(shù)據(jù)轉(zhuǎn)換為硬盤(pán)數(shù)據(jù),內(nèi)存模型到存儲(chǔ)模型的轉(zhuǎn)換,或者說(shuō)是瞬時(shí)狀態(tài)與持久狀態(tài)的相互轉(zhuǎn)換。
Redis有兩種持久化方式,默認(rèn)是snapshot方式,實(shí)現(xiàn)方法是定時(shí)將內(nèi)存的快照持久化到硬盤(pán),這種方式的缺點(diǎn)是持久化之后如果出現(xiàn)crash則會(huì)丟失一段數(shù)據(jù)。另外一種是aof方式,在寫(xiě)入內(nèi)存數(shù)據(jù)的同時(shí)將操作命令保存到日志文件中。
快照方式:
這種快照方式和虛擬機(jī)的快照一樣,保存某一時(shí)刻的完整數(shù)據(jù)。Redis在使用這種方式做持久化的時(shí)候,定期(默認(rèn)5分鐘)會(huì)先寫(xiě)入到一個(gè)臨時(shí)文件,寫(xiě)入完成后,會(huì)用這個(gè)文件去替換上次的舊的文件。這種方式的好處是,任何一次的快照文件都是完整可用的。但是缺點(diǎn)是,它每隔一段時(shí)間(默認(rèn)最快1分鐘,最慢15分鐘)做一次,所以會(huì)存在一段時(shí)間的數(shù)據(jù)丟失。
AOF方式:
這種方式就是把對(duì)Redis內(nèi)存數(shù)據(jù)的的寫(xiě)指令記錄下來(lái),這些指令會(huì)被記錄在A(yíng)OF文件的末尾,然后每秒做一次fsync操作(默認(rèn)每秒一次),把指令在后臺(tái)在執(zhí)行一次執(zhí)行過(guò)程其實(shí)就是修改磁盤(pán)上的數(shù)據(jù)庫(kù)內(nèi)容。所以如果出現(xiàn)故障也只丟失1秒的數(shù)據(jù)。
上面這種方式就很類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)服務(wù)器的事務(wù)日志。
如果遇到在追加日志的時(shí)候遇到意外,可以使用redis-check-aof工具進(jìn)行日志修復(fù)。
因?yàn)椴捎昧俗芳臃绞?,所以AOF會(huì)越來(lái)越大(這一點(diǎn)又和傳統(tǒng)數(shù)據(jù)庫(kù)不一樣,傳統(tǒng)數(shù)據(jù)庫(kù)事務(wù)日志文件都比較?。?,因此redis有另外一個(gè)機(jī)制就是AOF文件重寫(xiě),當(dāng)AOF文件達(dá)到一個(gè)設(shè)定的閾值后,會(huì)自動(dòng)啟動(dòng)AOF文件壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集。
通過(guò)上面的對(duì)AOF的描述,可以看到AOF是一個(gè)面向過(guò)程的,而RDB是面向?qū)ο蟮摹?/p>
AOF方式的有點(diǎn):
丟失數(shù)據(jù)最小
AOF方式的缺點(diǎn):
同等數(shù)據(jù)量,AOF文件比RDB文件體積大
AOF恢復(fù)速度比RDB方式慢