redis詳情-----介紹、優(yōu)化。。。。

一、SQL和NOSQL

1、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è)很大的瓶頸。

公司主營(yíng)業(yè)務(wù):網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出略陽(yáng)免費(fèi)做網(wǎng)站回饋大家。

2、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、NoSQL產(chǎn)生的背景介紹

(1)High performance :對(duì)數(shù)據(jù)庫(kù)高并發(fā)讀寫需求;
(2)Huge Storage:對(duì)海量數(shù)據(jù)高效存儲(chǔ)與訪問需求;
(3)High Scalability && High Availability:對(duì)數(shù)據(jù)庫(kù)高可擴(kuò)展性與高可用性需求。

二、redis

(1)Redis 基于內(nèi)存運(yùn)行并支持持久化;
(2)采用 key-value (鍵值對(duì)) 的存儲(chǔ)形式;
(3)優(yōu)點(diǎn):

具有極高的數(shù)據(jù)讀寫速度;
支持豐富的數(shù)據(jù)類型;
支持?jǐn)?shù)據(jù)的持久化;
原子性;
支持?jǐn)?shù)據(jù)備份

(4)Redis 和 Memcache 的比較:
1、存儲(chǔ)方式:
Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過內(nèi)存大??;
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大?。?br/>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)化。

三、安裝部署redis

1、安裝redis環(huán)境
最新安裝包:redis-5.0.7.tar.gz
系統(tǒng):Linux
2、操作步驟
redis詳情-----介紹、優(yōu)化。。。。
第一步:通過遠(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)腳本,注意:這步一路回車到底就行了
將最后一個(gè)文件路徑改為: /usr/local/redis/bin/redis-server

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    //重啟

redis-cli遠(yuǎn)程連接操作:

1、先修改配置文件,添加主機(jī)的IP地址

vim /etc/redis/6379.conf

bind 127.0.0.1 192.168.220.131
###添加主機(jī)的IP地址,不添加監(jiān)聽地址則無法連接

如圖所示:
redis詳情-----介紹、優(yōu)化。。。。
2、重啟服務(wù)
3、遠(yuǎn)程連接:

redis-cli -h 192.168.220.131 -p 6379
//-h:指定主機(jī)IP地址,-p:指定端口

redis詳情-----介紹、優(yōu)化。。。。

四、redis配置文件

配置參數(shù) ( /etc/redis/6379.conf ):
redis詳情-----介紹、優(yōu)化。。。。

五、redis數(shù)據(jù)庫(kù)常用命令

1、常用命令
(1)來連接本地?cái)?shù)據(jù)庫(kù)

/usr/local/redis/bin/redis-cli

(2)連接遠(yuǎn)程數(shù)據(jù)庫(kù)

redis-cli  -h  192.168.220.131  -p  6379

(3)存放數(shù)據(jù):set
(4)獲取數(shù)據(jù):get
redis詳情-----介紹、優(yōu)化。。。。
2、key命令
(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:判斷鍵值是否存在
redis詳情-----介紹、優(yōu)化。。。。
(3)del :刪除當(dāng)前數(shù)據(jù)庫(kù)的指定 key
redis詳情-----介紹、優(yōu)化。。。。
(4)type :獲取 key 對(duì)應(yīng)的 value 值類型
redis詳情-----介紹、優(yōu)化。。。。
(5)rename(覆蓋)/ renamenx(不覆蓋):對(duì)已有的 key 進(jìn)行重命名:
redis詳情-----介紹、優(yōu)化。。。。
(6)dbsize :查看當(dāng)前數(shù)據(jù)庫(kù)中 key 的數(shù)目
redis詳情-----介紹、優(yōu)化。。。。
(7)redis-benchmark 測(cè)試工具:
redis詳情-----介紹、優(yōu)化。。。。

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ù)包的性能

3、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中)
redis詳情-----介紹、優(yōu)化。。。。
2、move:多數(shù)據(jù)庫(kù)間移動(dòng)數(shù)據(jù)
redis詳情-----介紹、優(yōu)化。。。。
3、flushdb:清除數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)
redis詳情-----介紹、優(yōu)化。。。。

六、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         //忽略最后一條可能存在問題的指令

redis詳情-----介紹、優(yōu)化。。。。
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-size 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)存交換。

redis詳情-----介紹、優(yōu)化。。。。
redis詳情-----介紹、優(yōu)化。。。。
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 屬性值
redis詳情-----介紹、優(yōu)化。。。。

分享文章:redis詳情-----介紹、優(yōu)化。。。。
文章出自:http://bm7419.com/article42/jcihec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站改版、標(biāo)簽優(yōu)化、網(wǎng)站收錄、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名