內(nèi)容要點(diǎn):
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)河池,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575一、Redis 簡(jiǎn)介:
二、安裝部署 Redis:
三、Redis 配置文件:
四、Redis 數(shù)據(jù)庫(kù)常用命令:
五、Redis 持久化:
六、Redis 性能管理:
補(bǔ)充:
一、關(guān)系數(shù)據(jù)庫(kù)(SQL)和非關(guān)系數(shù)據(jù)庫(kù)(NoSQL)簡(jiǎn)要分析:
二、Redis 和 Memcache 的比較
一、Redis 簡(jiǎn)介:
Redis 基于內(nèi)存運(yùn)行并支持持久化;
采用 key-value (鍵值對(duì)) 的存儲(chǔ)形式;
優(yōu)點(diǎn):
具有極高的數(shù)據(jù)讀寫速度;
支持豐富的數(shù)據(jù)類型;
支持?jǐn)?shù)據(jù)的持久化;
原子性;
支持?jǐn)?shù)據(jù)備份
二、安裝部署 Redis:
(1)安裝 redis:
安裝包:redis-5.0.7.tar.gz
系統(tǒng):Linux
操作步驟總覽:
第一步:通過遠(yuǎn)程掛載的辦法將 windows上的安裝包下載到 Linux本地。
第二步:安裝編譯工具
?yum?install?gcc?gcc-c++?make?-y第三步:解壓
tar?zxvf?redis-5.0.7.tar.gz?-C?/opt/第四步:安裝
cd?redis-5.0.7/ make make?PREFIX=/usr/local/redis?install第五步:創(chuàng)建軟連接
ln?-s?/usr/local/redis/bin/*?/usr/local/bin/第五步:?jiǎn)?dòng)安裝腳本,查看端口狀態(tài)
cd??/redis-5.0.7/utils/ ./install_server.sh??//啟動(dòng)腳本,注意:這步一路回車到底就行了 netstat?-natp?|?grep?6379除此之外,還可以用 redis_6379 控制其開啟關(guān)閉:
/etc/init.d/redis_6379?stop???????//關(guān)閉 /etc/init.d/redis_6379?start??????//開啟 /etc/init.d/redis_6379?restart????//重啟(2)redis-cli 遠(yuǎn)程連接:
1、先修改配置文件,添加主機(jī)的IP地址
vim?/etc/redis/6379.conf bind?127.0.0.1?192.168.220.131 //添加主機(jī)的IP地址2、重啟服務(wù)
3、遠(yuǎn)程連接
redis-cli?-h?192.168.220.131?-p?6379 //-h:指定主機(jī)IP地址,-p:指定端口三、Redis 配置文件:
配置參數(shù) vim?/etc/redis/6379.conf bind:監(jiān)聽的主機(jī)地址 port:端口 daemonize?yes:?jiǎn)⒂檬刈o(hù)進(jìn)程 pidfile:指定PID文件 loglevel?notice:日志級(jí)別 logfile:指定日志文件四、Redis 數(shù)據(jù)庫(kù)常用命令:
(一)常用命令:
(1)redis-cli 命令行工具:
1、連接本地?cái)?shù)據(jù)庫(kù):
/usr/local/redis/bin/redis-cli2、連接遠(yuǎn)程數(shù)據(jù)庫(kù):
redis-cli?-h?192.168.220.131?-p?63793、存放數(shù)據(jù)(set):
4、獲取數(shù)據(jù)(get):
(2)key 相關(guān)命令:
1、keys :獲取符合規(guī)則的鍵值列表
>keys?*????????//查看當(dāng)前數(shù)據(jù)庫(kù)中所有的鍵 >keys?v*???????//查看當(dāng)前數(shù)據(jù)庫(kù)中以v開頭的鍵 >keys?v????????//查看當(dāng)前數(shù)據(jù)庫(kù)中以v開頭后面包含任意一個(gè)字符的鍵 >keys?v????????//查看當(dāng)前數(shù)據(jù)庫(kù)中以v開頭后面包含任意二個(gè)字符的鍵2、exists:判斷鍵值是否存在
3、del :刪除當(dāng)前數(shù)據(jù)庫(kù)的指定 key
4、type :獲取 key 對(duì)應(yīng)的 value 值類型
5、rename(覆蓋)/ renamenx(不覆蓋):對(duì)已有的 key 進(jìn)行重命名:
6、dbsize :查看當(dāng)前數(shù)據(jù)庫(kù)中 key 的數(shù)目
(3)redis-benchmark 測(cè)試工具:
-h:指定服務(wù)器主機(jī)名 -p:指定服務(wù)器端口 -c:指定并發(fā)連接數(shù) -n:?指定請(qǐng)求數(shù) -d:以字節(jié)的形式指定SET/GET值的數(shù)據(jù)大小 -q:強(qiáng)制推出redis。僅顯示query/sec值redis-benchmark?-h?192.168.220.131?-p?6379?-c?100?-n?100000 //向IP地址為192.168.220.131、端口為6379的redis服務(wù)器發(fā)送?100個(gè)并發(fā)連接與?100000個(gè)請(qǐng)求測(cè)試性能redis-benchmark?-h?192.168.220.131?-p?6379?-q?-d?100 //測(cè)試存取大小為100字節(jié)的數(shù)據(jù)包的性能(二)Redis 多數(shù)據(jù)操作:
(1)Redis 支持多數(shù)據(jù)庫(kù),默認(rèn)支持16個(gè)數(shù)據(jù)庫(kù),0-15 命名;
(2)多數(shù)據(jù)相互獨(dú)立,互不干擾;
(3)多數(shù)據(jù)常用命令;
1、select:多數(shù)據(jù)庫(kù)間的切換(默認(rèn)是在數(shù)據(jù)庫(kù)0中)
2、move:多數(shù)據(jù)庫(kù)間移動(dòng)數(shù)據(jù)
3、flushdb:清除數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)
五、Redis 持久化:
(1)持久化概述:
Redis 是運(yùn)行在內(nèi)存中,內(nèi)存中的數(shù)據(jù)斷電就會(huì)丟失;
為了能重用 Redis 數(shù)據(jù),或者防止系統(tǒng)故障,需要將 Redis 中的數(shù)據(jù)寫入到磁盤空間中,即持久化。
(2)持久化分類:
1、RDB 方式:創(chuàng)建快照的方式獲取某一時(shí)刻 Redis 中所有數(shù)據(jù)的副本。
2、AOF 方式:將執(zhí)行的寫命令寫到文件的末尾,以日志的方式來記錄數(shù)據(jù)的變化。
(3)RDB持久化:
1、它是 Redis的默認(rèn)持久化方式,默認(rèn)文件名為 dump.rdb
2、觸發(fā)條件:
在指定的時(shí)間間隔內(nèi),執(zhí)行指定次數(shù)的寫操作(配置文件控制);
執(zhí)行 save 或者是 bgsave (異步)命令;
執(zhí)行 flushall 命令,清除數(shù)據(jù)庫(kù)所有數(shù)據(jù);
執(zhí)行 shutdown 命令,保證服務(wù)器正常關(guān)閉且不丟失任何數(shù)據(jù)。
3、優(yōu)缺點(diǎn):
適合大規(guī)模的數(shù)據(jù)恢復(fù);
如果業(yè)務(wù)對(duì)數(shù)據(jù)完整性和一致性要求不高,RDB 是很好的選擇;
數(shù)據(jù)的完整性和一致性不高;
備份時(shí)占用內(nèi)存。
4、通過 RDB 文件恢復(fù)數(shù)據(jù):
將 dump.rdb 文件拷貝到 redis 的安裝目錄的 bin 目錄下,重啟 redis 服務(wù)即可。
5、配置文件選項(xiàng):
vim /etc/redis/6379.conf
save?900?1?????????????? save?300?10 save?60?10000 //900秒之內(nèi)至少一次寫操作、300秒之內(nèi)至少發(fā)生10次寫操作、60秒之內(nèi)發(fā)生至少10000次寫操作,只要滿足其一都會(huì)觸發(fā)快照操作,注釋所有的save項(xiàng)表示關(guān)閉?RDB dbfilename?dump.rdb?????????//?RDB文件名稱 dir?/var/lib/redis/6379?????//?RDB文件路徑 rdbcompression?yes??????????//?是否進(jìn)行壓縮(4)AOF 持久化:
Redis 默認(rèn)是不開啟的;
彌補(bǔ) RDB 的不足(數(shù)據(jù)的不一致性);
采用日志的形式來記錄每個(gè)寫操作,并追加到文件中;
Redis 重啟會(huì)根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作。
1、根據(jù) AOF 文件恢復(fù)數(shù)據(jù):
將 appendonly.aof 文件拷貝到 redis 的安裝目錄的 bin 目錄下,重啟 redis 訪問即可。
2、配置文件選項(xiàng):
vim?/etc/redis/6379.conf appendonly?yes?????????????????????//開啟AOF持久化 appendfilename?"appendonly.aof"????//AOF文件名稱 appendfsync?always???? appendfsync?everysec appendfsync?no //解釋:always:同步持久化,每次發(fā)生數(shù)據(jù)變化會(huì)立刻寫入磁盤; ???????everysec:默認(rèn)推薦,每秒異步記錄一次(默認(rèn)值); ???????no:不同步,交給操作系統(tǒng)決定如何同步。 ???????aof-load-truncated?yes?????????//忽略最后一條可能存在問題的指令3、AOF 的重寫機(jī)制:
AOF 的工作原理是將寫操作追加到文件中,文件的冗余會(huì)越來越多;
當(dāng) AOF 文件的大小超過所設(shè)定的閾值時(shí),Redis 就會(huì)對(duì) AOF 文件的內(nèi)容壓縮;
4、AOF 的重寫原理:
Redis 會(huì) fork 出一條新進(jìn)程,讀取內(nèi)存中的數(shù)據(jù)(并沒有讀取舊文件),并重新到一個(gè)臨時(shí)文件中,最后替換舊的 aof 文件。
5、AOF 的重寫配置:
vim?/etc/redis/6379.conf 在日志進(jìn)行?BGREWRITEAOF?時(shí),如果設(shè)置為?yes?表示新寫操作不進(jìn)行同步?fsync,只是暫存在緩沖區(qū)里,避免造成磁盤?IO?操作沖突,等重寫完成后在寫入。redis?中默認(rèn)為?no no-appendfsync-on-rewrite?no //當(dāng)前?AOF文件大小是上次日志重寫時(shí)?AOF?文件大小兩倍時(shí),發(fā)生?BGREWRITEAOF操作 auto-aof-rewrite-percentage?100 //當(dāng)前?AOF文件執(zhí)行?BGREWRITEAOF命令的最小值,避免剛開始啟動(dòng)?redis?時(shí)由于文件尺寸較小導(dǎo)致頻繁的?BGREWRITEAOF auto-aof-rewrite-min-szie?64mb六、Redis 性能管理:
(1)內(nèi)存碎片率:
1、操作系統(tǒng)分配的內(nèi)存值 used_memory_rss 除以 redis 使用的內(nèi)存值 used_memory 計(jì)算得出的;
2、內(nèi)存碎片是由操作系統(tǒng)低效的分配/回收物理內(nèi)存導(dǎo)致的;
不連續(xù)的物理內(nèi)存分配
3、跟蹤內(nèi)存碎片率對(duì)理解 redis 實(shí)例的資源性能是非常重要的;
內(nèi)存碎片率稍大于 1 是合理的,這個(gè)值表示內(nèi)存碎片率比較低;
內(nèi)存碎片率超過 1.5 ,說明 redis 消耗了實(shí)際需要物理內(nèi)存的 150% ,其中 50% 是內(nèi)存碎片率;
內(nèi)存碎片率低于 1 的,說明 Redis 內(nèi)存分配超出了物理內(nèi)存,操作系統(tǒng)正在進(jìn)行內(nèi)存交換。
(2)內(nèi)存使用率:
1、 redis 實(shí)例的內(nèi)存使用率超過可用大內(nèi)存,操作系統(tǒng)開始進(jìn)行內(nèi)存與 swqp 空間交換;
2、避免內(nèi)存交換:
針對(duì)緩存數(shù)據(jù)大小選擇;
盡可能的使用 Hash 數(shù)據(jù)結(jié)構(gòu);
設(shè)置 key 的過期時(shí)間
(3)回收 Key:
1、保證合理分配 redis 有限的內(nèi)存資源;
2、當(dāng)內(nèi)存使用達(dá)到設(shè)置的大閾值時(shí),需要選擇一種 key 的回收策略:
默認(rèn)情況下回收策略是禁止刪除的;
redis.conf 配置文件中修改 maxmemory-policy 屬性值
補(bǔ)充:
一、關(guān)系數(shù)據(jù)庫(kù)(SQL)和非關(guān)系數(shù)據(jù)庫(kù)(NoSQL)簡(jiǎn)要介紹:
(1)關(guān)系型數(shù)據(jù)庫(kù)(SQL):
1、一個(gè)結(jié)構(gòu)化的數(shù)據(jù)庫(kù),創(chuàng)建在關(guān)系模型基礎(chǔ)上,一般面向于記錄;
2、包括 Oracle 、Mysql 、 SQL Server 、Microsoft Access 、DB2 等。
優(yōu)點(diǎn):
1、易于維護(hù):都是使用表結(jié)構(gòu),格式一致;
2、使用方便:SQL語(yǔ)言通用,可用于復(fù)雜查詢;
3、復(fù)雜操作:支持SQL,可用于一個(gè)表以及多個(gè)表之間非常復(fù)雜的查詢。
缺點(diǎn):
1、讀寫性能比較差,尤其是海量數(shù)據(jù)的高效率讀寫;
2、固定的表結(jié)構(gòu),靈活度稍欠;
3、對(duì)于高并發(fā)讀寫需求,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)來說,硬盤I/O是一個(gè)很大的瓶頸。
(2)非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL):
1、除了主流的關(guān)系型數(shù)據(jù)庫(kù)以外的數(shù)據(jù)庫(kù),都認(rèn)為是非關(guān)系型的;
2、包括 Redis 、 MongBD 、 Hbase 、 CouhDB 、Memcache 等;
3、非關(guān)系型數(shù)據(jù)庫(kù)嚴(yán)格上不是一種數(shù)據(jù)庫(kù),應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的集合,可以是文檔或者鍵值對(duì)等。
優(yōu)點(diǎn):
1、格式靈活:存儲(chǔ)數(shù)據(jù)的格式可以是 key-value(鍵-值)形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應(yīng)用場(chǎng)景廣泛,而關(guān)系型數(shù)據(jù)庫(kù)則只支持基礎(chǔ)類型;
2、速度快:nosql可以使用硬盤或者隨機(jī)存儲(chǔ)器作為載體,而關(guān)系型數(shù)據(jù)庫(kù)只能使用硬盤;
3、高擴(kuò)展性;
4、成本低:nosql數(shù)據(jù)庫(kù)部署簡(jiǎn)單,基本都是開源軟件。
缺點(diǎn):
1、不提供sql支持,學(xué)習(xí)和使用成本較高;
2、不支持事務(wù),容錯(cuò)率低;
3、數(shù)據(jù)結(jié)構(gòu)相對(duì)復(fù)雜,復(fù)雜查詢方面稍欠。
(3)非關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)生的背景:
High performance :對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫需求;
Huge Storage:對(duì)海量數(shù)據(jù)高效存儲(chǔ)與訪問需求;
High Scalability && High Availability:對(duì)數(shù)據(jù)庫(kù)高可擴(kuò)展性與高可用性需求。
如本文主角redis便為非關(guān)系型數(shù)據(jù)庫(kù)。
二、Redis 和 Memcache 的比較:
1、存儲(chǔ)方式:
Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過內(nèi)存大?。?/p>
Redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。
2、數(shù)據(jù)支持類型:
Memcache對(duì)數(shù)據(jù)類型支持相對(duì)簡(jiǎn)單;
Redis有復(fù)雜的數(shù)據(jù)類型。
3、使用底層模型不同:
它們之間底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣;
Redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求。
4、value大?。?/strong>
redis大可以達(dá)到1GB,而memcache只有1MB。
5、使用redis有哪些好處?
1、速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢(shì)就是查找和操作的時(shí)間復(fù)雜度都是O(1)
2、支持豐富數(shù)據(jù)類型,支持string,list,set,sorted set,hash
3、支持事務(wù),操作都是原子性,所謂的原子性就是對(duì)數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行。
4、豐富的特性:可用于緩存,消息,按key設(shè)置過期時(shí)間,過期后將會(huì)自動(dòng)刪除。
redis 相比 memcached 的優(yōu)勢(shì):
memcached所有的值均是簡(jiǎn)單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型;
redis的速度比memcached快很多;
redis可以持久化其數(shù)據(jù);
Memcache 支持結(jié)構(gòu)化,但是 Redis支持結(jié)構(gòu)化和非結(jié)構(gòu)化。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。