<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis7系列教程入門-認(rèn)識(shí)Redis

          共 15031字,需瀏覽 31分鐘

           ·

          2023-03-03 18:55

          大家好,我是二條。一位從事服務(wù)端研發(fā)的程序猿。
          從今天開始,我會(huì)不間斷的開始給大家分享Redis7.0版本的知識(shí)。
          從2022年1月31開始,官方就發(fā)布了 Redis7.0-rc1,至今已經(jīng)發(fā)布到 7.0.5 版本。很多的開發(fā)者,還對(duì)Redis認(rèn)識(shí)停留在5.x的版本或者6.x的版本,對(duì)Redis7.0還缺乏較少的認(rèn)識(shí)。本系列教程,將帶領(lǐng)大家完整的學(xué)習(xí)Redis7.0相關(guān)的知識(shí)點(diǎn)。從環(huán)境的搭建、10大數(shù)據(jù)類型、事務(wù)、發(fā)布訂閱、主從復(fù)制、哨兵、集群等等知識(shí)。本教程最大的特點(diǎn)是,不會(huì)單純的總結(jié)一些枯燥乏味的理論知識(shí),而是理論知識(shí)+基礎(chǔ)時(shí)間+場(chǎng)景面試題分析,同時(shí)也會(huì)分享一些Redis相關(guān)技術(shù)棧等等內(nèi)容
          今天給大家分享的是Redis相關(guān)的基礎(chǔ)認(rèn)識(shí),以及它適合在什么場(chǎng)景下使用,如何快速搭建Redis環(huán)境。記得文末有幾道測(cè)試題哦。

          Redis是什么

          Redis是一款基于內(nèi)存,采用 key => vlaue 方式存儲(chǔ)的高性能內(nèi)存型nosql數(shù)據(jù)庫。Redis 提供數(shù)據(jù)結(jié)構(gòu),例如字符串、哈希、列表、集、帶有范圍查詢的排序集、位圖、超日志日志、地理空間索引和流。Redis 具有內(nèi)置復(fù)制、Lua 腳本、LRU 逐出、事務(wù)和不同級(jí)別的磁盤持久性,并通過 Redis Sentinel 和 Redis 集群的自動(dòng)分區(qū)提供高可用性。
          為什么會(huì)出現(xiàn)Redis這樣一款內(nèi)存型數(shù)據(jù)庫呢。這就要從Redis的作者antirezs說起。
          2008年的時(shí)候有一個(gè)意大利西西里島的小伙子,筆名antirez,創(chuàng)建了一個(gè)訪客信息網(wǎng)站LLOOGG.COM。有的時(shí)候我們需要知道網(wǎng)站的訪問情況,比如訪客的IP、操作系統(tǒng)、瀏覽器、使用的搜索關(guān)鍵詞、所在地區(qū)、訪問的網(wǎng)頁地址等等。在國(guó)內(nèi),有很多網(wǎng)站提供了這個(gè)功能,比如CNZZ,百度統(tǒng)計(jì),國(guó)外也有谷歌的GoogleAnalytics。我們不用自己寫代碼去實(shí)現(xiàn)這個(gè)功能,只需要在全局的footer 里面嵌入一段JS 代碼就行了,當(dāng)頁面被訪問的時(shí)候,就會(huì)自動(dòng)把訪客的信息發(fā)送到這些網(wǎng)站統(tǒng)計(jì)的服務(wù)器,然后我們登錄后臺(tái)就可以查看數(shù)據(jù)了。

          LLOOGG.COM 提供的就是這種功能,它可以查看最多10000 條的最新瀏覽記錄。這樣的話,它需要為每一個(gè)網(wǎng)站創(chuàng)建一個(gè)列表(List),不同網(wǎng)站的訪問記錄進(jìn)入到不同的列表。如果列表的長(zhǎng)度超過了用戶指定的長(zhǎng)度,它需要把最早的記錄刪除(先進(jìn)先出)。
          當(dāng)LLOOGG.COM 的用戶越來越多的時(shí)候,它需要維護(hù)的列表數(shù)量也越來越多,這種記錄最新的請(qǐng)求和刪除最早的請(qǐng)求的操作也越來越多。LLOOGG.COM 最初使用的數(shù)據(jù)庫是MySQL,可想而知,因?yàn)槊恳淮斡涗浐蛣h除都要讀寫磁盤,因?yàn)閿?shù)據(jù)量和并發(fā)量 太大,在這種情況下無論怎么去優(yōu)化數(shù)據(jù)庫都不管用了。
          考慮到最終限制數(shù)據(jù)庫性能的瓶頸在于磁盤,所以antirez 打算放棄磁盤,自己去實(shí)現(xiàn)一個(gè)具有列表結(jié)構(gòu)的數(shù)據(jù)庫的原型,把數(shù)據(jù)放在內(nèi)存而不是磁盤,這樣可以大大地提升列表的push 和pop 的效率。antirez 發(fā)現(xiàn)這種思路確實(shí)能解決這個(gè)問題,所以用C 語言重寫了這個(gè)內(nèi)存數(shù)據(jù)庫,并且加上了持久化的功能,09 年,Redis 橫空出世了。從最開始只支持列表的數(shù)據(jù)庫,到現(xiàn)在支持多種數(shù)據(jù)類型,并且提供了一系列的高級(jí)特性,Redis 已經(jīng)成為一個(gè)在全世界被廣泛使用的開源項(xiàng)目。
          Redis的全稱是 REmote DIctionary Server。其默認(rèn)的服務(wù)端口是 6379。關(guān)于Redis的端口號(hào)選擇 6379,有這么一種說法。6379在是手機(jī)按鍵上MERZ對(duì)應(yīng)的號(hào)碼,而MERZ取自意大利歌女Alessia Merz的名字。Alessia Merz 是一位意大利舞女、女演員。Redis 作者 Antirez(意大利人) 早年看電視節(jié)目,覺得 Merz 在節(jié)目中的一些話愚蠢可笑,Antirez 喜歡造“梗”用于平時(shí)和朋友們交流,于是造了一個(gè)詞 "MERZ",形容愚蠢,與 "stupid" 含義相同。后來 Antirez 重新定義了 "MERZ" ,形容”具有很高的技術(shù)價(jià)值,包含技藝、耐心和勞動(dòng),但仍然保持簡(jiǎn)單本質(zhì)“。到了給 Redis 選擇一個(gè)數(shù)字作為默認(rèn)端口號(hào)時(shí),Antirez 沒有多想,把 "MERZ" 在手機(jī)鍵盤上對(duì)應(yīng)的數(shù)字 6379 拿來用了。

          如果你想關(guān)注更多Redis相關(guān)的內(nèi)容,除了官網(wǎng)地址,還可以通過Redis作者的博客,GitHub地址。
          1、官方地址:https://redis.io/ 
          2、GitHub地址:https://github.com/antirez
          3、博客地址:http://antirez.com/latest/0

          Redis使用場(chǎng)景

          Redis是基于內(nèi)存操作,具備高可用、高性能等特點(diǎn),同時(shí)也提供了豐富的數(shù)據(jù)類型。一般可用于如下場(chǎng)景:
          1、數(shù)據(jù)緩存。項(xiàng)目早期一般都是將數(shù)據(jù)存儲(chǔ)到MySQL、oracle等關(guān)系型數(shù)據(jù)庫中,所有的數(shù)據(jù)讀寫都是基于磁盤操作。隨著業(yè)務(wù)的不斷擴(kuò)大,通過傳統(tǒng)的方式進(jìn)行數(shù)據(jù)的讀取,系統(tǒng)在讀寫方面都會(huì)遇到瓶頸。針對(duì)這一情況,將數(shù)據(jù)存放在內(nèi)存中,所有的讀操作都通過內(nèi)存進(jìn)行查詢,提高了系統(tǒng)的數(shù)據(jù)查詢能力。對(duì)于數(shù)據(jù)的讀,在高并發(fā)的業(yè)務(wù)場(chǎng)景下,也可以將數(shù)據(jù)先寫入內(nèi)存中,在通過異步的方式持久化到磁盤中,提高了系統(tǒng)的并發(fā)能力。
          2、存儲(chǔ)用戶登錄token。針對(duì)用戶登錄鑒權(quán),一般可以基于cookie、jwt來實(shí)現(xiàn)。cookie是基于文件存儲(chǔ),并且cookie會(huì)涉及到跨域、分布式架構(gòu)問題,jwt由于是基于客戶端斷存儲(chǔ)方案,服務(wù)端無法直接控制登錄token的狀態(tài)。由于Redis是具備分布式部署架構(gòu),很好的解決了分布式架構(gòu)token鑒權(quán)、用戶登錄狀態(tài)等問題的控制。同時(shí)將登錄token存放在Redis中,每次讀取都采用內(nèi)存讀取,也提高了整個(gè)系統(tǒng)的性能。
          3、秒殺場(chǎng)景。對(duì)于秒殺業(yè)務(wù)場(chǎng)景,對(duì)于系統(tǒng)的并發(fā)能力都是非常高的。在該場(chǎng)景下,將商品數(shù)據(jù)存儲(chǔ)到Redis中,提高了系統(tǒng)的查詢能力,減少了MySQL的壓力。將商品庫存都存儲(chǔ)到Redis中,因Redis采用的是單線程架構(gòu),也可以實(shí)現(xiàn)商品超賣問題。
          4、用戶簽到。可以使用 bitmap 數(shù)據(jù)類型,將用戶簽到存儲(chǔ)在Redis中,然后通過異步線程將數(shù)據(jù)存儲(chǔ)到MySQL中。既節(jié)約了內(nèi)存,也提供了系統(tǒng)的讀寫能力。
          5、消息隊(duì)列。Redis提供 list 數(shù)據(jù)類型,技能用來做消息隊(duì)列,也能用來做棧等場(chǎng)景。在 Redis5.0 開始,也提供了一種 stream 數(shù)據(jù)類型,提高了消息隊(duì)列的可靠性。
          6、社交場(chǎng)景。Redis提供了兩種集合數(shù)據(jù)類型(set sortset),可以用在積分排行、好友推薦等場(chǎng)景。
          7、 就近推薦。Redis中是提供了一種 GEO 的數(shù)據(jù)類型來進(jìn)行位運(yùn)算。可以根據(jù)用戶當(dāng)前的經(jīng)緯度,來計(jì)算附近的酒店、商場(chǎng)等場(chǎng)所的搜索與推薦功能。
          8、分布式鎖。當(dāng)分布式架構(gòu)中,需要對(duì)共享數(shù)據(jù)的讀寫操作(例如商品秒殺)。為了保證數(shù)據(jù)的一致性,一般是采用分布式鎖實(shí)現(xiàn),Redis能夠非常簡(jiǎn)單的實(shí)現(xiàn)分布式鎖功能。可以直接使用 setnx key value + expire time 操作,為了實(shí)現(xiàn)原子性操作,也可以直接使用 lua 實(shí)現(xiàn)。

          Redis有什么優(yōu)勢(shì)

          Redis作為一種內(nèi)存型數(shù)據(jù)庫,其讀寫性能都是非常高的。這里將Redis與memcached進(jìn)行對(duì)比。
          1、線程模型。memcached采用的多線程模式,Redis采用的是單線程模式,雖然Redis6.0版本之后是支持多線程,但這里的多線程也只是對(duì)網(wǎng)絡(luò)IO的處理是多線程,實(shí)際的數(shù)據(jù)操作還是單線程模式。單線程執(zhí)行(減少上下文切換、鎖競(jìng)爭(zhēng)等問題)。
          2、持久化。對(duì)于內(nèi)存型數(shù)據(jù)庫,所有的數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中。當(dāng)服務(wù)出現(xiàn)異常,服務(wù)宕機(jī)都會(huì)導(dǎo)致數(shù)據(jù)的丟失,Redis是支持講數(shù)據(jù)存儲(chǔ)到磁盤中,服務(wù)出現(xiàn)異常之后重啟會(huì)從磁盤中,將數(shù)據(jù)重新加載到內(nèi)存中。Redis對(duì)于數(shù)據(jù)的持久化存儲(chǔ),支持兩種方式。一種是快照方式(RDB),另外一種是日志方式(ROF)。
          3、分布式架構(gòu)。Redis支持主從復(fù)制、哨兵、集群等高可用、高可靠架構(gòu)。同時(shí)具備學(xué)習(xí)成本低特點(diǎn)。
          4、數(shù)據(jù)類型。Redis有基本的五大數(shù)據(jù)類型,還有其他的幾種數(shù)據(jù)類型;Memcached只有單純的字符串類型。

          環(huán)境安裝

          上面對(duì)Redis的認(rèn)識(shí)做了一個(gè)大致的介紹,下面就正式步入學(xué)習(xí)的第一步,搭建Redis環(huán)境。如果你不想搭建環(huán)境,也可以使用官方提供的web 界面的cli工具,不過在使用上也有一定的局限性。
          Redis是支持Linux、Mac和Windows環(huán)境,但官網(wǎng)也不推薦在Windows上使用Redis,這樣無法充分的發(fā)揮Redis的優(yōu)勢(shì)。在本教程中,所有的操作都是使用Mac環(huán)境搭建,Linux環(huán)境和Mac環(huán)境幾乎都是一樣的,也不過多的去關(guān)注這兩者的區(qū)別。

          在Mac操作系統(tǒng)上有 brew 包管理工具,在Linux上有 yum 或者 ap-get 這樣的包管理工具。由于這種方式非常的簡(jiǎn)單,下面就單獨(dú)演示源碼編譯安裝。
          通過Redis官方的GitHub地址,下載Redis7.0.0版本。一般軟件的版本都有奇數(shù)和偶數(shù)之分,我們?cè)谶x擇版本也會(huì)優(yōu)選的選擇偶數(shù)版本,因?yàn)榕紨?shù)版本會(huì)相對(duì)奇數(shù)版本穩(wěn)定一些。
          // 下載
          cd ~ && wget https://github.com/redis/redis/archive/7.0.0.tar.gz
          // 解壓
          tar -zxvf 7.0.0.tar.gz
          解壓之后,我們可以查看一下源碼中大致有哪些文件。
          [root@VM-16-3-centos redis-7.0.0]# ll
          總用量 252
          -rw-rw-r--  1 root root  27744 4月  27 2022 00-RELEASENOTES
          -rw-rw-r--  1 root root     51 4月  27 2022 BUGS
          -rw-rw-r--  1 root root   5026 4月  27 2022 CONDUCT
          -rw-rw-r--  1 root root   2634 4月  27 2022 CONTRIBUTING
          -rw-rw-r--  1 root root   1487 4月  27 2022 COPYING
          drwxrwxr-x  7 root root   4096 4月  27 2022 deps
          -rw-rw-r--  1 root root     11 4月  27 2022 INSTALL
          -rw-rw-r--  1 root root    151 4月  27 2022 Makefile # 編譯文件
          -rw-rw-r--  1 root root   6888 4月  27 2022 MANIFESTO
          -rw-rw-r--  1 root root  22435 4月  27 2022 README.md
          -rw-rw-r--  1 root root 106547 4月  27 2022 redis.conf # 默認(rèn)配置文件
          -rwxrwxr-x  1 root root    279 4月  27 2022 runtest
          -rwxrwxr-x  1 root root    283 4月  27 2022 runtest-cluster # 集群工具
          -rwxrwxr-x  1 root root   1578 4月  27 2022 runtest-moduleapi
          -rwxrwxr-x  1 root root    285 4月  27 2022 runtest-sentinel
          -rw-rw-r--  1 root root   1695 4月  27 2022 SECURITY.md
          -rw-rw-r--  1 root root  13924 4月  27 2022 sentinel.conf # 哨兵默認(rèn)配置文件
          drwxrwxr-x  4 root root   4096 4月  27 2022 src #源碼文件
          drwxrwxr-x 11 root root   4096 4月  27 2022 tests
          -rw-rw-r--  1 root root   3055 4月  27 2022 TLS.md
          drwxrwxr-x  8 root root   4096 4月  27 2022 utils

          接下來,在源碼路徑下執(zhí)行安裝操作。

          make && make install

          在經(jīng)過幾分鐘的等待,出現(xiàn)如下的界面,就表示Redis已經(jīng)被成功的安裝。

          Hint: It's a good idea to run 'make test' ;)

          INSTALL redis-server
          INSTALL redis-benchmark
          INSTALL redis-cli
          默認(rèn)情況下,Redis相關(guān)的客戶端工具、服務(wù)端工具都會(huì)被安裝在 /usr/local/bin 目錄下面。
          [root@VM-16-3-centos bin]# cd /usr/local/bin
          [root@VM-16-3-centos bin]# ll
          總用量 27896
          -rwxr-xr-x 1 root root      383 12月 10 2019 chardetect
          -rwxr-xr-x 1 root root      389 12月 10 2019 cloud-init
          -rwxr-xr-x 1 root root     1781 12月 10 2019 cloud-init-per
          -rwxr-xr-x 1 root root      399 12月 10 2019 easy_install
          -rwxr-xr-x 1 root root      407 12月 10 2019 easy_install-3.6
          -rwxr-xr-x 1 root root     1005 12月 10 2019 jsondiff
          -rwxr-xr-x 1 root root     3663 12月 10 2019 jsonpatch
          -rwxr-xr-x 1 root root     1839 12月 10 2019 jsonpointer
          -rwxr-xr-x 1 root root      392 12月 10 2019 jsonschema
          -rwxr-xr-x 1 root root  6976488 2月  26 15:48 redis-benchmark
          lrwxrwxrwx 1 root root       12 2月  26 15:48 redis-check-aof -> redis-server
          lrwxrwxrwx 1 root root       12 2月  26 15:48 redis-check-rdb -> redis-server
          -rwxr-xr-x 1 root root  7234616 2月  26 15:48 redis-cli
          lrwxrwxrwx 1 root root       12 2月  26 15:48 redis-sentinel -> redis-server
          -rwxr-xr-x 1 root root 14307984 2月  26 15:48 redis-server
          1、redis-server:Redis服務(wù)端工具,啟動(dòng)Redis服務(wù)時(shí),需要使用該工具。
          2、redis-cli:Redis客戶端工具,使用命令操作Redis時(shí),需要使用該工具。
          3、redis-check-rdb:持久化RDB文件檢測(cè),當(dāng)RDB文件存在問題時(shí),可以使用該工具進(jìn)行檢測(cè)與恢復(fù)。
          4、redis-check-aof:持久化AOF文件檢測(cè),當(dāng)AOF文件存在問題時(shí),可以使用該工具進(jìn)行檢測(cè)與恢復(fù)。
          5、redis-sentinel:Redis哨兵工具,在使用哨兵模式下,需要使用該工具啟動(dòng)哨兵。 
          6、redis-benchmark:Redis壓縮工具,通過該工具可以模擬Redis性能。
          安裝成功之后,我們也可以查看當(dāng)前的安裝Redis版本。
          [root@VM-16-3-centos bin]# redis-server -v
          Redis server v=7.0.0 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=34dee89a8e7e24d2

          啟動(dòng)服務(wù)

          啟動(dòng)服務(wù)時(shí),我們可以指定配置文件,也可以不指定配置文件。如果不指定配置,使用 redis-server 時(shí)會(huì)使用默認(rèn)的配置文件。
          1、不使用配置文件啟動(dòng)。直接使用 redis-server 命令即可,看到如下的界面表示Redis服務(wù)已經(jīng)正常啟動(dòng)。但這樣也存在一個(gè)問題,Redis服務(wù)時(shí)處于前臺(tái)運(yùn)行的,當(dāng)我們將該shell窗口關(guān)閉后,服務(wù)就會(huì)被停止。因此推薦使用指定配置文件的方式。
          [root@VM-16-3-centos bin]# redis-server 
                          _._                                                  
                     _.-``__ ''-._                                             
                _.-``    `.  `_.  ''-._           Redis 7.0.0 (00000000/0) 64 bit
            .-`` .-```.  ```\/    _.,_ ''-._                                  
           (    '      ,       .-`  | `,    )     Running in standalone mode
           |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
           |    `-._   `._    /     _.-'    |     PID: 615368
            `-._    `-._  `-./  _.-'    _.-'                                   
           |`-._`-._    `-.__.-'    _.-'_.-'|                                  
           |    `-._`-._        _.-'_.-'    |           https://redis.io       
            `-._    `-._`-.__.-'_.-'    _.-'                                   
           |`-._`-._    `-.__.-'    _.-'_.-'|                                  
           |    `-._`-._        _.-'_.-'    |                                  
            `-._    `-._`-.__.-'_.-'    _.-'                                   
                `-._    `-.__.-'    _.-'                                       
                    `-._        _.-'                                           
                        `-.__.-'                                               

          615368:M 26 Feb 2023 16:02:04.530 * Ready to accept connections
          2、指定配置文件啟動(dòng)。在Redis的源碼目錄中存在一個(gè) redis.conf 文件。可以直接在該文件修改,也可以將文件復(fù)制到指定目錄,在對(duì)其修改。找到文件中的 daemonize 配置項(xiàng),將其值改為 yes
          daemonize yes
          接下來,在執(zhí)行 redis-server ./redis.conf ,執(zhí)行完之后,可能界面沒有任何輸出信息。我們可以使用 redis-cli 命令進(jìn)行連接測(cè)試。
          [root@VM-16-3-centos redis-7.0.0]# redis-cli 
          127.0.0.1:6379> keys *
          (empty array)
          127.0.0.1:6379> 
          通過上圖的演示,我們可以看到Redis已經(jīng)能夠被正常鏈接,此致Redis的環(huán)境安裝、基礎(chǔ)測(cè)試和連接就全部完成了。

          教程回顧

          看完上面的內(nèi)容,做幾個(gè)簡(jiǎn)單的測(cè)試吧,以便回顧一下知識(shí)內(nèi)容。

          1、 Redis是什么?

          2、 項(xiàng)目當(dāng)中,使用MySQL作為數(shù)據(jù)庫存儲(chǔ),為什么還要使用Redis?

          3、 Redis有哪些使用場(chǎng)景?

          4、 Redis默認(rèn)的端口是什么?

          5、 Redis相對(duì)memcached而言,有什么優(yōu)勢(shì)?


          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  漏逼视频免费观看 | 99精品视频综合 | 国产嫩苞又嫩又紧AV在线 | 欧美爆操逼 | 黄色操逼网站 |