<i id="bcuty"><sub id="bcuty"></sub></i>

<b id="bcuty"></b>

您的位置:首頁 >聚焦 >

Redis7系列教程入門-認識Redis_環球熱點

2023-03-03 19:34:26    來源:程序員客棧
大家好,我是二條。一位從事服務端研發的程序猿。從今天開始,我會不間斷的開始給大家分享Redis7.0版本的知識。從2022年1月31開始,官方就發布了 Redis7.0-rc1,至今已經發布到 7.0.5 版本。很多的開發者,還對Redis認識停留在5.x的版本或者6.x的版本,對Redis7.0還缺乏較少的認識。本系列教程,將帶領大家完整的學習Redis7.0相關的知識點。從環境的搭建、10大數據類型、事務、發布訂閱、主從復制、哨兵、集群等等知識。本教程最大的特點是,不會單純的總結一些枯燥乏味的理論知識,而是理論知識+基礎時間+場景面試題分析,同時也會分享一些Redis相關技術棧等等內容。今天給大家分享的是Redis相關的基礎認識,以及它適合在什么場景下使用,如何快速搭建Redis環境。記得文末有幾道測試題哦。Redis是什么Redis是一款基于內存,采用 key => vlaue 方式存儲的高性能內存型nosql數據庫。Redis 提供數據結構,例如字符串、哈希、列表、集、帶有范圍查詢的排序集、位圖、超日志日志、地理空間索引和流。Redis 具有內置復制、Lua 腳本、LRU 逐出、事務和不同級別的磁盤持久性,并通過 Redis Sentinel 和 Redis 集群的自動分區提供高可用性。為什么會出現Redis這樣一款內存型數據庫呢。這就要從Redis的作者antirezs說起。2008年的時候有一個意大利西西里島的小伙子,筆名antirez,創建了一個訪客信息網站LLOOGG.COM。有的時候我們需要知道網站的訪問情況,比如訪客的IP、操作系統、瀏覽器、使用的搜索關鍵詞、所在地區、訪問的網頁地址等等。在國內,有很多網站提供了這個功能,比如CNZZ,百度統計,國外也有谷歌的GoogleAnalytics。我們不用自己寫代碼去實現這個功能,只需要在全局的footer 里面嵌入一段JS 代碼就行了,當頁面被訪問的時候,就會自動把訪客的信息發送到這些網站統計的服務器,然后我們登錄后臺就可以查看數據了。LLOOGG.COM 提供的就是這種功能,它可以查看最多10000 條的最新瀏覽記錄。這樣的話,它需要為每一個網站創建一個列表(List),不同網站的訪問記錄進入到不同的列表。如果列表的長度超過了用戶指定的長度,它需要把最早的記錄刪除(先進先出)。當LLOOGG.COM 的用戶越來越多的時候,它需要維護的列表數量也越來越多,這種記錄最新的請求和刪除最早的請求的操作也越來越多。LLOOGG.COM 最初使用的數據庫是MySQL,可想而知,因為每一次記錄和刪除都要讀寫磁盤,因為數據量和并發量太大,在這種情況下無論怎么去優化數據庫都不管用了??紤]到最終限制數據庫性能的瓶頸在于磁盤,所以antirez 打算放棄磁盤,自己去實現一個具有列表結構的數據庫的原型,把數據放在內存而不是磁盤,這樣可以大大地提升列表的push 和pop 的效率。antirez 發現這種思路確實能解決這個問題,所以用C 語言重寫了這個內存數據庫,并且加上了持久化的功能,09 年,Redis 橫空出世了。從最開始只支持列表的數據庫,到現在支持多種數據類型,并且提供了一系列的高級特性,Redis 已經成為一個在全世界被廣泛使用的開源項目。Redis的全稱是 REmote DIctionary Server。其默認的服務端口是 6379。關于Redis的端口號選擇 6379,有這么一種說法。6379在是手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字。Alessia Merz 是一位意大利舞女、女演員。Redis 作者 Antirez(意大利人) 早年看電視節目,覺得 Merz 在節目中的一些話愚蠢可笑,Antirez 喜歡造“?!庇糜谄綍r和朋友們交流,于是造了一個詞 "MERZ",形容愚蠢,與 "stupid" 含義相同。后來 Antirez 重新定義了 "MERZ" ,形容”具有很高的技術價值,包含技藝、耐心和勞動,但仍然保持簡單本質“。到了給 Redis 選擇一個數字作為默認端口號時,Antirez 沒有多想,把 "MERZ" 在手機鍵盤上對應的數字 6379 拿來用了。如果你想關注更多Redis相關的內容,除了官網地址,還可以通過Redis作者的博客,GitHub地址。1、官方地址:https://redis.io/2、GitHub地址:https://github.com/antirez3、博客地址:http://antirez.com/latest/0Redis使用場景Redis是基于內存操作,具備高可用、高性能等特點,同時也提供了豐富的數據類型。一般可用于如下場景:1、數據緩存。項目早期一般都是將數據存儲到MySQL、oracle等關系型數據庫中,所有的數據讀寫都是基于磁盤操作。隨著業務的不斷擴大,通過傳統的方式進行數據的讀取,系統在讀寫方面都會遇到瓶頸。針對這一情況,將數據存放在內存中,所有的讀操作都通過內存進行查詢,提高了系統的數據查詢能力。對于數據的讀,在高并發的業務場景下,也可以將數據先寫入內存中,在通過異步的方式持久化到磁盤中,提高了系統的并發能力。2、存儲用戶登錄token。針對用戶登錄鑒權,一般可以基于cookie、jwt來實現。cookie是基于文件存儲,并且cookie會涉及到跨域、分布式架構問題,jwt由于是基于客戶端斷存儲方案,服務端無法直接控制登錄token的狀態。由于Redis是具備分布式部署架構,很好的解決了分布式架構token鑒權、用戶登錄狀態等問題的控制。同時將登錄token存放在Redis中,每次讀取都采用內存讀取,也提高了整個系統的性能。3、秒殺場景。對于秒殺業務場景,對于系統的并發能力都是非常高的。在該場景下,將商品數據存儲到Redis中,提高了系統的查詢能力,減少了MySQL的壓力。將商品庫存都存儲到Redis中,因Redis采用的是單線程架構,也可以實現商品超賣問題。4、用戶簽到??梢允褂?bitmap數據類型,將用戶簽到存儲在Redis中,然后通過異步線程將數據存儲到MySQL中。既節約了內存,也提供了系統的讀寫能力。5、消息隊列。Redis提供 list數據類型,技能用來做消息隊列,也能用來做棧等場景。在 Redis5.0 開始,也提供了一種 stream 數據類型,提高了消息隊列的可靠性。6、社交場景。Redis提供了兩種集合數據類型(set sortset),可以用在積分排行、好友推薦等場景。7、 就近推薦。Redis中是提供了一種 GEO的數據類型來進行位運算??梢愿鶕脩舢斍暗慕浘暥?,來計算附近的酒店、商場等場所的搜索與推薦功能。8、分布式鎖。當分布式架構中,需要對共享數據的讀寫操作(例如商品秒殺)。為了保證數據的一致性,一般是采用分布式鎖實現,Redis能夠非常簡單的實現分布式鎖功能??梢灾苯邮褂?setnx key value + expire time操作,為了實現原子性操作,也可以直接使用 lua實現。Redis有什么優勢Redis作為一種內存型數據庫,其讀寫性能都是非常高的。這里將Redis與memcached進行對比。1、線程模型。memcached采用的多線程模式,Redis采用的是單線程模式,雖然Redis6.0版本之后是支持多線程,但這里的多線程也只是對網絡IO的處理是多線程,實際的數據操作還是單線程模式。單線程執行(減少上下文切換、鎖競爭等問題)。2、持久化。對于內存型數據庫,所有的數據都是存儲在內存中。當服務出現異常,服務宕機都會導致數據的丟失,Redis是支持講數據存儲到磁盤中,服務出現異常之后重啟會從磁盤中,將數據重新加載到內存中。Redis對于數據的持久化存儲,支持兩種方式。一種是快照方式(RDB),另外一種是日志方式(ROF)。3、分布式架構。Redis支持主從復制、哨兵、集群等高可用、高可靠架構。同時具備學習成本低特點。4、數據類型。Redis有基本的五大數據類型,還有其他的幾種數據類型;Memcached只有單純的字符串類型。環境安裝上面對Redis的認識做了一個大致的介紹,下面就正式步入學習的第一步,搭建Redis環境。如果你不想搭建環境,也可以使用官方提供的web 界面的cli工具,不過在使用上也有一定的局限性。Redis是支持Linux、Mac和Windows環境,但官網也不推薦在Windows上使用Redis,這樣無法充分的發揮Redis的優勢。在本教程中,所有的操作都是使用Mac環境搭建,Linux環境和Mac環境幾乎都是一樣的,也不過多的去關注這兩者的區別。在Mac操作系統上有 brew包管理工具,在Linux上有 yum或者 ap-get這樣的包管理工具。由于這種方式非常的簡單,下面就單獨演示源碼編譯安裝。通過Redis官方的GitHub地址,下載Redis7.0.0版本。一般軟件的版本都有奇數和偶數之分,我們在選擇版本也會優選的選擇偶數版本,因為偶數版本會相對奇數版本穩定一些。

//下載cd~&&wgethttps://github.com/redis/redis/archive/7.0.0.tar.gz//解壓tar-zxvf7.0.0.tar.gz

解壓之后,我們可以查看一下源碼中大致有哪些文件。

[root@VM-16-3-centosredis-7.0.0]#ll總用量252-rw-rw-r--1rootroot277444月27202200-RELEASENOTES-rw-rw-r--1rootroot514月272022BUGS-rw-rw-r--1rootroot50264月272022CONDUCT-rw-rw-r--1rootroot26344月272022CONTRIBUTING-rw-rw-r--1rootroot14874月272022COPYINGdrwxrwxr-x7rootroot40964月272022deps-rw-rw-r--1rootroot114月272022INSTALL-rw-rw-r--1rootroot1514月272022Makefile#編譯文件-rw-rw-r--1rootroot68884月272022MANIFESTO-rw-rw-r--1rootroot224354月272022README.md-rw-rw-r--1rootroot1065474月272022redis.conf#默認配置文件-rwxrwxr-x1rootroot2794月272022runtest-rwxrwxr-x1rootroot2834月272022runtest-cluster#集群工具-rwxrwxr-x1rootroot15784月272022runtest-moduleapi-rwxrwxr-x1rootroot2854月272022runtest-sentinel-rw-rw-r--1rootroot16954月272022SECURITY.md-rw-rw-r--1rootroot139244月272022sentinel.conf#哨兵默認配置文件drwxrwxr-x4rootroot40964月272022src#源碼文件drwxrwxr-x11rootroot40964月272022tests-rw-rw-r--1rootroot30554月272022TLS.mddrwxrwxr-x8rootroot40964月272022utils

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


(資料圖片)

make&&makeinstall

在經過幾分鐘的等待,出現如下的界面,就表示Redis已經被成功的安裝。

Hint:It"sagoodideatorun"maketest";)INSTALLredis-serverINSTALLredis-benchmarkINSTALLredis-cli

默認情況下,Redis相關的客戶端工具、服務端工具都會被安裝在 /usr/local/bin目錄下面。

[root@VM-16-3-centosbin]#cd/usr/local/bin[root@VM-16-3-centosbin]#ll總用量27896-rwxr-xr-x1rootroot38312月102019chardetect-rwxr-xr-x1rootroot38912月102019cloud-init-rwxr-xr-x1rootroot178112月102019cloud-init-per-rwxr-xr-x1rootroot39912月102019easy_install-rwxr-xr-x1rootroot40712月102019easy_install-3.6-rwxr-xr-x1rootroot100512月102019jsondiff-rwxr-xr-x1rootroot366312月102019jsonpatch-rwxr-xr-x1rootroot183912月102019jsonpointer-rwxr-xr-x1rootroot39212月102019jsonschema-rwxr-xr-x1rootroot69764882月2615:48redis-benchmarklrwxrwxrwx1rootroot122月2615:48redis-check-aof->redis-serverlrwxrwxrwx1rootroot122月2615:48redis-check-rdb->redis-server-rwxr-xr-x1rootroot72346162月2615:48redis-clilrwxrwxrwx1rootroot122月2615:48redis-sentinel->redis-server-rwxr-xr-x1rootroot143079842月2615:48redis-server

1、redis-server:Redis服務端工具,啟動Redis服務時,需要使用該工具。2、redis-cli:Redis客戶端工具,使用命令操作Redis時,需要使用該工具。3、redis-check-rdb:持久化RDB文件檢測,當RDB文件存在問題時,可以使用該工具進行檢測與恢復。4、redis-check-aof:持久化AOF文件檢測,當AOF文件存在問題時,可以使用該工具進行檢測與恢復。5、redis-sentinel:Redis哨兵工具,在使用哨兵模式下,需要使用該工具啟動哨兵。6、redis-benchmark:Redis壓縮工具,通過該工具可以模擬Redis性能。安裝成功之后,我們也可以查看當前的安裝Redis版本。

[root@VM-16-3-centosbin]#redis-server-vRedisserverv=7.0.0sha=00000000:0malloc=jemalloc-5.2.1bits=64build=34dee89a8e7e24d2

啟動服務啟動服務時,我們可以指定配置文件,也可以不指定配置文件。如果不指定配置,使用 redis-server時會使用默認的配置文件。1、不使用配置文件啟動。直接使用 redis-server命令即可,看到如下的界面表示Redis服務已經正常啟動。但這樣也存在一個問題,Redis服務時處于前臺運行的,當我們將該shell窗口關閉后,服務就會被停止。因此推薦使用指定配置文件的方式。

[root@VM-16-3-centosbin]#redis-server_.__.-``__""-.__.-```.`_.""-._Redis7.0.0(00000000/0)64bit.-``.-```.```\/_.,_""-._(",.-`|`,)Runninginstandalonemode|`-._`-...-`__...-.``-._|"`_.-"|Port:6379|`-._`._/_.-"|PID:615368`-._`-._`-./_.-"_.-"|`-._`-._`-.__.-"_.-"_.-"||`-._`-.__.-"_.-"|https://redis.io`-._`-._`-.__.-"_.-"_.-"|`-._`-._`-.__.-"_.-"_.-"||`-._`-.__.-"_.-"|`-._`-._`-.__.-"_.-"_.-"`-._`-.__.-"_.-"`-.__.-"`-.__.-"615368:M26Feb202316:02:04.530*Readytoacceptconnections

2、指定配置文件啟動。在Redis的源碼目錄中存在一個 redis.conf文件??梢灾苯釉谠撐募薷?,也可以將文件復制到指定目錄,在對其修改。找到文件中的 daemonize配置項,將其值改為 yes。

daemonizeyes

接下來,在執行 redis-server ./redis.conf,執行完之后,可能界面沒有任何輸出信息。我們可以使用 redis-cli命令進行連接測試。

[root@VM-16-3-centosredis-7.0.0]#redis-cli127.0.0.1:6379>keys*(emptyarray)127.0.0.1:6379>

通過上圖的演示,我們可以看到Redis已經能夠被正常鏈接,此致Redis的環境安裝、基礎測試和連接就全部完成了。教程回顧

看完上面的內容,做幾個簡單的測試吧,以便回顧一下知識內容。

1、 Redis是什么?

2、 項目當中,使用MySQL作為數據庫存儲,為什么還要使用Redis?

3、 Redis有哪些使用場景?

4、 Redis默認的端口是什么?

5、 Redis相對memcached而言,有什么優勢?

關鍵詞: 數據類型 配置文件 可以使用

相關閱讀

巨胸护士在线播放视频二区

<i id="bcuty"><sub id="bcuty"></sub></i>

<b id="bcuty"></b>