目錄
前言
Redis 中文網(wǎng)站:http://redis.cn/
Redis 是一個(gè)開源(BSD 許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件
它支持多種類型的數(shù)據(jù)結(jié)構(gòu),如字符串(strings)散列(hashes)列表(lists),集合(sets),有序集合(sorted sets)與范圍查詢,位圖(bitmaps),基數(shù)計(jì)算算法(hyperloglogs) 地理空間(geospatial) 索引半徑查詢
Redis 內(nèi)置了 復(fù)制(replication),LUA腳本(Lua scripting),LRU 驅(qū)動(dòng)事件(LRU eviction),事務(wù)(transactions)和不同級(jí)別的磁盤持久化(persistence),并通過 Redis 哨兵(Sentinel)和自動(dòng)分區(qū)(Cluster)提供高可用性(high availability)
為什么會(huì)出現(xiàn) Redis?
磁盤、內(nèi)存
磁盤在尋址上花費(fèi)的時(shí)長是毫秒 ms 級(jí)別的,帶寬是 G/M 級(jí)別
內(nèi)存在尋址上花費(fèi)的時(shí)長是納秒 ns 級(jí)別的,帶寬比較大,按 T 級(jí)別來算的
基于以上,內(nèi)存在尋址上比磁盤快了 10W 倍
I/O buffer
成本問題:
1、磁盤、磁道、扇區(qū),一個(gè)扇區(qū):512 字節(jié)帶來成本很大問題
2、操作系統(tǒng)索引以 4K 為單位,無論你讀取多少數(shù)據(jù),都至少是 4K 為單位從磁盤中拿
數(shù)據(jù)庫
表數(shù)據(jù)量很大,會(huì)導(dǎo)致性能極速下降
若表中有索引,增刪改很慢,查詢速度緩慢會(huì)有以下兩個(gè)維度影響
1、1 個(gè)或少量的查詢語句依然很快,查詢的數(shù)據(jù)量較少或頻次很低
2、當(dāng)查詢的并發(fā)量大時(shí)會(huì)受到磁盤帶寬影響,從而就會(huì)影響到查詢的速度
數(shù)據(jù)庫對(duì)比
官網(wǎng):https://db-engines.com/en/ranking,可以在該網(wǎng)站上看看每年各個(gè)數(shù)據(jù)庫之間的排名以及使用頻率情況
基于企業(yè)級(jí)開發(fā),經(jīng)常會(huì)使用 MySQL 關(guān)系型數(shù)據(jù)庫,它是基于磁盤的,若并發(fā)量或數(shù)據(jù)量上來時(shí),它會(huì)極其影響 DML 語句操作速度;在這種情況發(fā)展到極端只有使用 SAP HANA 內(nèi)存級(jí)別的關(guān)系型數(shù)據(jù)庫才能扛住,原本在磁盤 2T 數(shù)據(jù)量而它的內(nèi)存數(shù)據(jù)庫中會(huì)被優(yōu)化后壓縮成 1T 多數(shù)據(jù)量進(jìn)行處理,但這種內(nèi)存級(jí)別數(shù)據(jù)庫并不是一般的公司能用得起,一般公司都是想成本越低越好
基于此,也就有了一個(gè)折中的方案,數(shù)據(jù)持久化在庫中,數(shù)據(jù)的可視化交由給緩存處理,最開始出現(xiàn)的緩存中間件 > Memcached
緩存中間件
一般都會(huì)用 Memcached、Redis 這兩種緩存中間件來進(jìn)行比較,它們都是基于 Key-Value 鍵值對(duì)方式存儲(chǔ)的
MongoDB 就與它們區(qū)分開了,它是基于 Document 存儲(chǔ)的,它主要用來作文章內(nèi)容、文本存儲(chǔ)的
Memcached、Redis
- Memcached Value 沒有類型的概念,而 Redis Value 有多種數(shù)據(jù)類型,string(內(nèi)置:bitmap、字符類型、數(shù)值類型)、hashes、lists、sets、sorted sets
- Memcached 不支持持久化,而 Redis 支持多種持久化方式,AOF、RDB、兩者混合模式
- Memcached Value 支持 1MB 大小,而 Redis 支持 1GB 大小
安裝
在上面簡單介紹了 Redis 是什么,以及 Redis 由來,從不同層面上介紹 Redis 的好處,即使說 Redis 已經(jīng)這么好用了,但它內(nèi)部還不斷在優(yōu)化,比如:Redis6 在 Redis5 基礎(chǔ)上引入了多線程模型,我們先來說說它在這方面優(yōu)化后會(huì)帶來哪些好處?
- 并發(fā)處理能力:Redis6 多線程模型在處理 I/O 操作時(shí)可以利用多個(gè)線程,提高了并發(fā)處理的能力;而 Redis 單線程模型下,在處理客戶端請求時(shí)只使用了單線程,因此在并發(fā)處理能力上相對(duì)較低
Redis 多線程模型只涉及到 I/O 操作的處理,核心的數(shù)據(jù)處理仍然是單線程的
- 多核利用:Redis6 多線程模型下能更好地利用多核處理器性能;通過使用多個(gè)線程,可以同時(shí)處理多個(gè)客戶端請求,提高系統(tǒng)的整體吞吐量;而 Redis 單線程模型下只能使用單個(gè)核心,無法充分利用多核處理器的優(yōu)勢
- 響應(yīng)時(shí)間:由于 Redis6 多線程模型能夠并發(fā)處理多個(gè)請求,因此在高并發(fā)的負(fù)載之下,它能夠提供更低的響應(yīng)時(shí)間;而 Redis 單線程模型下在高并發(fā)情況下可能會(huì)出現(xiàn)較高的響應(yīng)時(shí)間,因?yàn)樗械目蛻舳苏埱蠖急仨氃趩蝹€(gè)線程上依此之下
簡單介紹過后,我們在本文中會(huì)同時(shí)告知如何在 Linux 機(jī)器上安裝 Redis5、Redis6,因?yàn)樵诎惭b時(shí),兩者會(huì)出現(xiàn)不同的問題
提前準(zhǔn)備一臺(tái)本地虛擬機(jī)或云服務(wù)器,安裝包所在目錄:/home/software
虛擬機(jī)版本(cat /etc/redhat-release):CentOS Linux release 7.9.2009 (AltArch)
Redis 安裝包下載地址
redis-5.0.8.tar.gz、redis-6.0.6.tar.gz
Redis5
安裝 wget 命令 > yum install wget
1、下載 5.0.8 安裝包:wget http://download.redis.io/releases/redis-5.0.8.tar.gz
2、解壓安裝包:tar xf redis-5.0.8.tar.gz(v 參數(shù)會(huì)觸發(fā) IO,故不寫)
3、可仔細(xì)閱讀 redis-5.0.8 目錄下 > README.md 文件
4、編譯安裝>生成可執(zhí)行程序:cd redis-5.0.8 && make install && cd src
1、安裝時(shí)會(huì)提示編譯失敗:缺少 gcc 依賴,C 語言環(huán)境(GUN C 是 Linux 中規(guī)定的 C 語言標(biāo)準(zhǔn))
yum-config-manager --save --setopt=mysql57-community.skip_if_unavailable=true
yum install gcc
2、然后再執(zhí)行:make distclean 后再 make install && cd src
3、編譯的最后會(huì)出現(xiàn):cannot find -latomic 錯(cuò)誤
,因?yàn)槲沂褂?Mac M1 系統(tǒng) > aarch64 架構(gòu),它會(huì)在 Makefile 文件中去校驗(yàn),故編輯該文件,將這部分內(nèi)容注釋掉,若你非該架構(gòu),可無須關(guān)注這步操作
4、然后再執(zhí)行:make distclean 后再 make install && cd src ,最終,安裝成功了,生成了可執(zhí)行的程序
make install 只會(huì)在你的系統(tǒng)中安裝二進(jìn)制文件,但不會(huì)配置 init 腳本和配置文件放在適當(dāng)?shù)奈恢蒙?br> 1、一個(gè)物理機(jī)器中可以有多個(gè) Redis 實(shí)例(進(jìn)程)通過 port 區(qū)分
2、可執(zhí)行程序只存在一份,但內(nèi)存中未來的多個(gè)實(shí)例中需要各自的配置文件,持久化目錄等
3、腳本會(huì)幫你啟動(dòng)、開機(jī)自啟動(dòng)?。?/p>
5、編譯安裝到指定位置:make PREFIX=/usr/local/redis5 install,將 redis-cli 更名為 redis5-cli,主要是為了作版本區(qū)分
6、配置系統(tǒng)變量:vim /etc/profile
REDIS5_HOME=/usr/local/redis5
PATH=$PATH:$REDIS5_HOME/bin
7、安裝 Redis5,cd /home/software/redis-5.0.8/utils 后執(zhí)行 ./install_server.sh,它會(huì)一步步提示你如何設(shè)置端口、配置文件、日志文件、數(shù)據(jù)文件
8、最后,查看 Redis5 當(dāng)前占用進(jìn)程
ps -ef | grep redis5
Redis6
安裝 wget 命令 > yum install wget
1、下載 6.0.6 安裝包:wget http://download.redis.io/releases/redis-6.0.6.tar.gz
2、解壓安裝包:tar xf redis-6.0.6.tar.gz(v 參數(shù)會(huì)觸發(fā) IO,故不寫)
3、可仔細(xì)閱讀 redis-6.0.6 目錄下 > README.md 文件
4、編譯安裝>生成可執(zhí)行程序:cd redis-6.0.6 && make install && cd src
5、編譯安裝到指定位置:make PREFIX=/usr/local/redis6 install,將 redis-cli 更名為 redis6-cli,主要是為了作版本區(qū)分
6、配置系統(tǒng)變量:vim /etc/profile
REDIS6_HOME=/usr/local/redis6
PATH=$PATH:$REDIS6_HOME/bin
7、安裝 Redis6,cd /home/software/redis-6.0.6/utils 后執(zhí)行 ./install_server.sh,在 Redis6 會(huì)報(bào)如下錯(cuò)誤:This systems seems to use systemd. Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!
編輯 vi install_server.sh 文件,將如下內(nèi)容進(jìn)行注釋后保存,再執(zhí)行腳本:
它會(huì)一步步提示你如何設(shè)置端口、配置文件、日志文件、數(shù)據(jù)文件,以 Redis5 port:56379 為例,那么 Redis6 port 自然而然會(huì)設(shè)置為 66369 了,錯(cuò)誤?:端口數(shù)量是有限制的,最多 65535 個(gè),如下報(bào)錯(cuò)所示:
因此,將 Redis6 端口設(shè)置為 60379,最終:Redis6 安裝成功?。?!
8、最后,查看 Redis6 當(dāng)前占用進(jìn)程
ps -ef | grep redis6
使用
到此為止,Redis5、Redis6 都已經(jīng)在 Linux 上安裝成功了!?。?/p>
查看 redis5-cli、redis6-cli 幫助文檔:
redis5-cli --help
redis6-cli --help
下面來介紹一下常用的 Redis 客戶端操作命令吧!
- 連接主機(jī)名:redis5-cli -h、redis6-cli -h(未指定時(shí),默認(rèn)為 127.0.0.1)
- 連接端口:redis5-cli -p 56379、redis6-cli -p 60379(未指定時(shí),默認(rèn)為 6379)
- 連接時(shí)認(rèn)證密碼登錄或登錄后通過 auth 命令:redis5-cli -a(連接密碼,默認(rèn)不會(huì)指定)
- 連接指定庫:在 Redis 分為 16 個(gè)庫,0~15 > redis5-cli -n、redis6-cli -n
若你不知道進(jìn)入到 Redis 客戶端以后,該如何操作 get、set 命令,又或者是不知道 Redis 中提供的多種數(shù)據(jù)類型如何應(yīng)用,請看如下:
- 連接:redis6-cli -p 60379 以后,輸入 help 命令,打印如下:
127.0.0.1:60379> help
redis-cli 6.0.6
To get help about Redis commands type:
“help @<group>
” to get a list of commands in<group>
“help<command>
” for help on<command>
“help<tab>
” to get a list of possible help topics
“quit” to exit
-
help @group:指的就是以數(shù)據(jù)類型分組的意思,當(dāng)你
help @string
它就把 string 數(shù)據(jù)類型相關(guān)的操作命令以及描述給你展示出來
127.0.0.1:60379> help @string
APPEND key value
summary: Append a value to a key
since: 2.0.0
BITCOUNT key [start end]
summary: Count set bits in a string
since: 2.6.0
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
summary: Perform arbitrary bitfield integer operations on strings
since: 3.2.0
BITOP operation destkey key [key ...]
summary: Perform bitwise operations between strings
since: 2.6.0
BITPOS key bit [start] [end]
summary: Find first bit set or clear in a string
since: 2.8.7
DECR key
summary: Decrement the integer value of a key by one
since: 1.0.0
# ....... 更多內(nèi)容
- help `command:指的就是具體的某一個(gè)具體的命令是要如何操作的,比如說怎么設(shè)置位圖 > setbit
127.0.0.1:60379> help setbit
SETBIT key offset value
summary: Sets or clears the bit at offset in the string value stored at key
since: 2.2.0
group: string
這下有了幫助文檔,你該知道如何去巧妙應(yīng)用好 Redis 了吧?。?!
Redis 數(shù)據(jù)類型以 group 分組存在,每種數(shù)據(jù)結(jié)構(gòu)下的不同操作都是一條 command 命令
總結(jié)
該篇博文是 Redis 專欄的開篇,不作過多的實(shí)踐以及應(yīng)用場景的描述,主要是介紹了 Redis 前生今世,為什么要出現(xiàn) Redis?Redis6 比 Redis5 擴(kuò)充了多線程模型好處在哪里,在生產(chǎn)環(huán)境中我們?nèi)绾巫约喝グ惭b Redis5、Redis6;最后,簡單介紹了一些連接 Redis 客戶端時(shí)使用的命令以及在操作 Redis 客戶端命令時(shí)如何使用幫助文檔讓我們快速掌握 Redis 命令操作!
有小伙伴可能會(huì)說到為什么不使用容器化部署的方式來構(gòu)建 Redis,當(dāng)然,使用容器化部署方便了我們不需要太多去專注這方面的知識(shí);但是 Redis 單獨(dú)使用服務(wù)器部署,它的好處就是降低了其他微服務(wù)對(duì)其使用及性能的影響,而且單獨(dú)使用服務(wù)部署更方便我們可以掌握 Redis 內(nèi)存以及其他持久化配置相關(guān)的東西,也不會(huì)因?yàn)?Redis 內(nèi)存限制的大小影響到其他微服務(wù)的運(yùn)行?
內(nèi)存不作任何設(shè)置時(shí),它會(huì)動(dòng)態(tài)的去進(jìn)行擴(kuò)容或壓縮,這對(duì)我們的 Redis 服務(wù)極其不可靠實(shí)屬個(gè)人見解,有不同見地的小伙伴,可以在底下留言,大家一起討論,互相進(jìn)步哈!!
后續(xù) Redis 專欄,會(huì)有更多理論+實(shí)戰(zhàn)+圖文的博文出來,敬請期待!?。?/p>
如果覺得博文不錯(cuò),關(guān)注我 vnjohn,后續(xù)會(huì)有更多實(shí)戰(zhàn)、源碼、架構(gòu)干貨分享!
推薦專欄:Spring、MySQL,訂閱一波不再迷路文章來源:http://www.zghlxwxcb.cn/news/detail-500752.html
大家的「關(guān)注?? + 點(diǎn)贊?? + 收藏?」就是我創(chuàng)作的最大動(dòng)力!謝謝大家的支持,我們下文見!文章來源地址http://www.zghlxwxcb.cn/news/detail-500752.html
到了這里,關(guān)于Redis 實(shí)戰(zhàn):逐步指南,讓你輕松在 Linux 上安裝與部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!