溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

五分鐘了解Redis

發(fā)布時間:2020-07-21 15:00:33 來源:網(wǎng)絡(luò) 閱讀:300 作者:wx5d3fd1efe40e3 欄目:系統(tǒng)運(yùn)維

內(nèi)容要點(diǎn):

一、Redis 簡介:

二、安裝部署 Redis:

三、Redis 配置文件:

四、Redis 數(shù)據(jù)庫常用命令:

五、Redis 持久化:

六、Redis 性能管理:

補(bǔ)充:

一、關(guān)系數(shù)據(jù)庫(SQL)和非關(guān)系數(shù)據(jù)庫(NoSQL)簡要分析:

二、Redis 和 Memcache 的比較


一、Redis 簡介:

  • Redis 基于內(nèi)存運(yùn)行支持持久化;

  • 采用 key-value (鍵值對) 的存儲形式;

  • 優(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


操作步驟總覽:

五分鐘了解Redis


第一步:通過遠(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/


第五步:啟動安裝腳本,查看端口狀態(tài)


cd??/redis-5.0.7/utils/

./install_server.sh??//啟動腳本,注意:這步一路回車到底就行了

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:啟用守護(hù)進(jìn)程
pidfile:指定PID文件
loglevel?notice:日志級別
logfile:指定日志文件



四、Redis 數(shù)據(jù)庫常用命令:

(一)常用命令:

(1)redis-cli 命令行工具:


1、連接本地數(shù)據(jù)庫:

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



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

redis-cli?-h?192.168.220.131?-p?6379


3、存放數(shù)據(jù)(set):

五分鐘了解Redis

4、獲取數(shù)據(jù)(get):

五分鐘了解Redis


(2)key 相關(guān)命令:


1、keys :獲取符合規(guī)則的鍵值列表


>keys?*????????//查看當(dāng)前數(shù)據(jù)庫中所有的鍵

>keys?v*???????//查看當(dāng)前數(shù)據(jù)庫中以v開頭的鍵

>keys?v????????//查看當(dāng)前數(shù)據(jù)庫中以v開頭后面包含任意一個字符的鍵

>keys?v????????//查看當(dāng)前數(shù)據(jù)庫中以v開頭后面包含任意二個字符的鍵


2、exists:判斷鍵值是否存在

五分鐘了解Redis

3、del :刪除當(dāng)前數(shù)據(jù)庫的指定 key

五分鐘了解Redis

4、type :獲取 key 對應(yīng)的 value 值類型

五分鐘了解Redis

5、rename(覆蓋)/ renamenx(不覆蓋):對已有的 key 進(jìn)行重命名:

五分鐘了解Redis

6、dbsize :查看當(dāng)前數(shù)據(jù)庫中 key 的數(shù)目

五分鐘了解Redis

(3)redis-benchmark 測試工具:

-h:指定服務(wù)器主機(jī)名
-p:指定服務(wù)器端口
-c:指定并發(fā)連接數(shù)
-n:?指定請求數(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個并發(fā)連接與?100000個請求測試性能


redis-benchmark?-h?192.168.220.131?-p?6379?-q?-d?100
//測試存取大小為100字節(jié)的數(shù)據(jù)包的性能


(二)Redis 多數(shù)據(jù)操作:

(1)Redis 支持多數(shù)據(jù)庫,默認(rèn)支持16個數(shù)據(jù)庫,0-15 命名;


(2)多數(shù)據(jù)相互獨(dú)立,互不干擾;


(3)多數(shù)據(jù)常用命令;


1、select:多數(shù)據(jù)庫間的切換(默認(rèn)是在數(shù)據(jù)庫0中)

五分鐘了解Redis

2、move:多數(shù)據(jù)庫間移動數(shù)據(jù)

五分鐘了解Redis

3、flushdb:清除數(shù)據(jù)庫內(nèi)數(shù)據(jù)

五分鐘了解Redis


五、Redis 持久化:

(1)持久化概述:

  • Redis 是運(yùn)行在內(nèi)存中,內(nèi)存中的數(shù)據(jù)斷電就會丟失;

  • 為了能重用 Redis 數(shù)據(jù),或者防止系統(tǒng)故障,需要將 Redis 中的數(shù)據(jù)寫入到磁盤空間中,即持久化。

(2)持久化分類:

1、RDB 方式:創(chuàng)建快照的方式獲取某一時刻 Redis 中所有數(shù)據(jù)的副本。


2、AOF 方式:將執(zhí)行的寫命令寫到文件的末尾,以日志的方式來記錄數(shù)據(jù)的變化。


(3)RDB持久化:

1、它是 Redis的默認(rèn)持久化方式,默認(rèn)文件名為 dump.rdb


2、觸發(fā)條件:


  • 在指定的時間間隔內(nèi),執(zhí)行指定次數(shù)的寫操作(配置文件控制);

  • 執(zhí)行 save 或者是 bgsave (異步)命令;

  • 執(zhí)行 flushall 命令,清除數(shù)據(jù)庫所有數(shù)據(jù);

  • 執(zhí)行 shutdown 命令,保證服務(wù)器正常關(guān)閉且不丟失任何數(shù)據(jù)。

3、優(yōu)缺點(diǎn):


  • 適合大規(guī)模的數(shù)據(jù)恢復(fù);

  • 如果業(yè)務(wù)對數(shù)據(jù)完整性和一致性要求不高,RDB 是很好的選擇;

  • 數(shù)據(jù)的完整性和一致性不高;

  • 備份時占用內(nèi)存。

4、通過 RDB 文件恢復(fù)數(shù)據(jù):


  • 將 dump.rdb 文件拷貝到 redis 的安裝目錄的 bin 目錄下,重啟 redis 服務(wù)即可。

5、配置文件選項:


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次寫操作,只要滿足其一都會觸發(fā)快照操作,注釋所有的save項表示關(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ù)的不一致性);

  • 采用日志的形式來記錄每個寫操作,并追加到文件中;

  • Redis 重啟會根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作。

1、根據(jù) AOF 文件恢復(fù)數(shù)據(jù):

  • 將 appendonly.aof 文件拷貝到 redis 的安裝目錄的 bin 目錄下,重啟 redis 訪問即可。

2、配置文件選項:


vim?/etc/redis/6379.conf

appendonly?yes?????????????????????//開啟AOF持久化
appendfilename?"appendonly.aof"????//AOF文件名稱
appendfsync?always????
appendfsync?everysec
appendfsync?no
//解釋:always:同步持久化,每次發(fā)生數(shù)據(jù)變化會立刻寫入磁盤;
???????everysec:默認(rèn)推薦,每秒異步記錄一次(默認(rèn)值);
???????no:不同步,交給操作系統(tǒng)決定如何同步。

???????aof-load-truncated?yes?????????//忽略最后一條可能存在問題的指令



3、AOF 的重寫機(jī)制:


  • AOF 的工作原理是將寫操作追加到文件中,文件的冗余會越來越多;

  • 當(dāng) AOF 文件的大小超過所設(shè)定的閾值時,Redis 就會對 AOF 文件的內(nèi)容壓縮;

4、AOF 的重寫原理:


  • Redis 會 fork 出一條新進(jìn)程,讀取內(nèi)存中的數(shù)據(jù)(并沒有讀取舊文件),并重新到一個臨時文件中,最后替換舊的 aof 文件。

5、AOF 的重寫配置:


vim?/etc/redis/6379.conf

在日志進(jìn)行?BGREWRITEAOF?時,如果設(shè)置為?yes?表示新寫操作不進(jìn)行同步?fsync,只是暫存在緩沖區(qū)里,避免造成磁盤?IO?操作沖突,等重寫完成后在寫入。redis?中默認(rèn)為?no
no-appendfsync-on-rewrite?no

//當(dāng)前?AOF文件大小是上次日志重寫時?AOF?文件大小兩倍時,發(fā)生?BGREWRITEAOF操作
auto-aof-rewrite-percentage?100

//當(dāng)前?AOF文件執(zhí)行?BGREWRITEAOF命令的最小值,避免剛開始啟動?redis?時由于文件尺寸較小導(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 計算得出的;


2、內(nèi)存碎片是由操作系統(tǒng)低效的分配/回收物理內(nèi)存導(dǎo)致的;


  • 不連續(xù)的物理內(nèi)存分配

3、跟蹤內(nèi)存碎片率對理解 redis 實(shí)例的資源性能是非常重要的;


  • 內(nèi)存碎片率稍大于 1 是合理的,這個值表示內(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


五分鐘了解Redis

(2)內(nèi)存使用率:

1、 redis 實(shí)例的內(nèi)存使用率超過可用最大內(nèi)存,操作系統(tǒng)開始進(jìn)行內(nèi)存與 swqp 空間交換;


2、避免內(nèi)存交換:


  • 針對緩存數(shù)據(jù)大小選擇;

  • 盡可能的使用 Hash 數(shù)據(jù)結(jié)構(gòu);

  • 設(shè)置 key 的過期時間

(3)回收 Key:

1、保證合理分配 redis 有限的內(nèi)存資源;


2、當(dāng)內(nèi)存使用達(dá)到設(shè)置的最大閾值時,需要選擇一種 key 的回收策略:


  • 默認(rèn)情況下回收策略是禁止刪除的;

  • redis.conf 配置文件中修改 maxmemory-policy 屬性值

--volatile-lru:使用L?.RU算法從已設(shè)置過期時間的數(shù)據(jù)集合中淘汰數(shù)據(jù)
--voltil-tt:從已設(shè)置過期時間的數(shù)據(jù)集合中挑選即將過期的數(shù)據(jù)淘汰
--volatile-random:從已設(shè)置過期時間的數(shù)據(jù)集合中隨機(jī)挑選數(shù)據(jù)淘汰
--allkeys-lru:使用LRU算法從所有數(shù)據(jù)集合中淘汰數(shù)據(jù)
--allkeys-random:從數(shù)據(jù)集合中任意選擇數(shù)據(jù)淘汰
--no-enviction:禁止淘汰數(shù)據(jù)



補(bǔ)充:

一、關(guān)系數(shù)據(jù)庫(SQL)和非關(guān)系數(shù)據(jù)庫(NoSQL)簡要介紹:

(1)關(guān)系型數(shù)據(jù)庫(SQL):

1、一個結(jié)構(gòu)化的數(shù)據(jù)庫,創(chuàng)建在關(guān)系模型基礎(chǔ)上,一般面向于記錄;


2、包括 Oracle 、Mysql 、 SQL Server 、Microsoft Access 、DB2 等。


優(yōu)點(diǎn):

1、易于維護(hù):都是使用表結(jié)構(gòu),格式一致;

2、使用方便:SQL語言通用,可用于復(fù)雜查詢;

3、復(fù)雜操作:支持SQL,可用于一個表以及多個表之間非常復(fù)雜的查詢。


缺點(diǎn):


1、讀寫性能比較差,尤其是海量數(shù)據(jù)的高效率讀寫;

2、固定的表結(jié)構(gòu),靈活度稍欠;

3、對于高并發(fā)讀寫需求,傳統(tǒng)關(guān)系型數(shù)據(jù)庫來說,硬盤I/O是一個很大的瓶頸。


(2)非關(guān)系型數(shù)據(jù)庫(NoSQL):

1、除了主流的關(guān)系型數(shù)據(jù)庫以外的數(shù)據(jù)庫,都認(rèn)為是非關(guān)系型的;

2、包括 Redis 、 MongBD 、 Hbase 、 CouhDB 、Memcache 等;

3、非關(guān)系型數(shù)據(jù)庫嚴(yán)格上不是一種數(shù)據(jù)庫,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合,可以是文檔或者鍵值對等。


優(yōu)點(diǎn):


1、格式靈活:存儲數(shù)據(jù)的格式可以是 key-value(鍵-值)形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應(yīng)用場景廣泛,而關(guān)系型數(shù)據(jù)庫則只支持基礎(chǔ)類型;

2、速度快:nosql可以使用硬盤或者隨機(jī)存儲器作為載體,而關(guān)系型數(shù)據(jù)庫只能使用硬盤;

3、高擴(kuò)展性;

4、成本低:nosql數(shù)據(jù)庫部署簡單,基本都是開源軟件。


缺點(diǎn):


1、不提供sql支持,學(xué)習(xí)和使用成本較高;

2、不支持事務(wù),容錯率低;

3、數(shù)據(jù)結(jié)構(gòu)相對復(fù)雜,復(fù)雜查詢方面稍欠。


(3)非關(guān)系型數(shù)據(jù)庫產(chǎn)生的背景:

High performance :對數(shù)據(jù)庫高并發(fā)讀寫需求;

Huge Storage:對海量數(shù)據(jù)高效存儲與訪問需求;

High Scalability && High Availability:對數(shù)據(jù)庫高可擴(kuò)展性與高可用性需求。

如本文主角redis便為非關(guān)系型數(shù)據(jù)庫。


二、Redis 和 Memcache 的比較:


1、存儲方式:


Memecache把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大?。?/p>


Redis有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。


2、數(shù)據(jù)支持類型:


Memcache對數(shù)據(jù)類型支持相對簡單;


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ù)的話,會浪費(fèi)一定的時間去移動和請求。


4、value大小:


redis最大可以達(dá)到1GB,而memcache只有1MB。


5、使用redis有哪些好處?


1、速度快,因?yàn)閿?shù)據(jù)存在內(nèi)存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復(fù)雜度都是O(1)


2、支持豐富數(shù)據(jù)類型,支持string,list,set,sorted set,hash


3、支持事務(wù),操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行。


4、豐富的特性:可用于緩存,消息,按key設(shè)置過期時間,過期后將會自動刪除。


redis 相比 memcached 的優(yōu)勢:


  • memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型;

  • redis的速度比memcached快很多;

  • redis可以持久化其數(shù)據(jù);

  • Memcache 支持結(jié)構(gòu)化,但是 Redis支持結(jié)構(gòu)化和非結(jié)構(gòu)化。


向AI問一下細(xì)節(jié)
推薦閱讀:
  1. 了解Linux
  2. 了解DataTables

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI