3.3日學習打卡----初學Redis(一)

3.3日學習打卡

目錄:

  • 3.3日學習打卡
  • NoSQL
    • 為什么要用NoSQL
    • 什么是NoSQL?
    • NoSQL的四大分類
    • 關系型數據庫和非關系型數據及其區別
    • NoSQL經典應用
  • Redis
    • Redis是什么?
    • Linux下安裝Redis
    • Docker下安裝Redis
    • 基本知識

NoSQL

在這里插入圖片描述

為什么要用NoSQL

單機Mysql的美好年代
在90年代,一個網站的訪問量一般都不大,用單個數據庫完全可以輕松應付。在那個時候,更多的都是靜態網頁,動態交互類型的網站不多。
在這里插入圖片描述

遇到問題:
隨著用戶數的增長,Tomcat和數據庫之間競爭資源,單機性能不足以支撐業務。

Tomcat與數據庫分開部署

Tomcat和數據庫分別獨占服務器資源,顯著提高兩者各自性能。
在這里插入圖片描述

新的問題:
隨著用戶數的增長,并發讀寫數據庫成為瓶頸。

引入本地緩存和分布式緩存

通過緩存能把絕大多數請求在讀寫數據庫前攔截掉,大大降低數據庫壓力。其中涉及的技術包括:使用memcached作為本地緩存,使用Redis作為分布式緩存。
在這里插入圖片描述

注意:
緩存抗住了大部分的訪問請求,隨著用戶數的增長,并發壓力主要落在單機的Tomcat上,響應逐漸變慢。

引入反向代理實現負載均衡

在多臺服務器上分別部署Tomcat,使用反向代理軟件(Nginx)把請求均勻分發到每個Tomcat中。
在這里插入圖片描述

新的挑戰:
反向代理使應用服務器可支持的并發量大大增加,但并發量的增長也意味著更多請求穿透到數據庫,單機的數據庫最終成為瓶頸。

數據庫讀寫分離

由于數據庫的寫入壓力增加,Memcached只能緩解數據庫的讀取壓力。讀寫集中在一個數據庫上讓數據庫不堪重負,大部分網站開始使用主從復制技術來達到讀寫分離,以提高讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成為這個時候的網站標配了
在這里插入圖片描述

新的挑戰:
業務逐漸變多,不同業務之間的訪問量差距較大,不同業務直接競爭數據庫,相互影響性能。

數據庫按業務分庫

把不同業務的數據保存到不同的數據庫中,使業務之間的資源競爭降低,對于訪問量大的業務,可以部署更多的服務器來支撐。
在這里插入圖片描述
為什么用NoSQL

用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日志已經成倍的增加。我們如果要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。
在這里插入圖片描述

什么是NoSQL?

在這里插入圖片描述

NoSQL(NoSQL = Not Only SQL),意即“不僅僅是SQL”,泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付特別是超大規模和高并發類型純動態網站已經顯得力不從心,暴露了很多難以克服的問題。

結構化數據和非結構化數據
在這里插入圖片描述

  • 結構化數據指的是由二維表結構來邏輯表達和實現的數據,嚴格遵循數據格式與長度規范,也稱作為行數據。
  • 非結構化數據,指的是數據結構不規則或不完整,沒有任何預定義的數據模型,不方便用二維邏輯表來表現的數據,例如辦公文檔(Word)、文本、圖片、HTML、各類報表、視頻音頻等。

NoSQL的四大分類

KV型NoSql(代表----Redis)

KV型NoSql顧名思義就是以鍵值對形式存儲的非關系型數據庫,是最簡單、最容易理解也是大家最熟悉的一種NoSql,因此比較快地帶過。

特點:

  • 數據基于內存,讀寫效率高
  • KV型數據,時間復雜度為O(1),查詢速度快

注意
KV型NoSql最大的優點就是高性能,利用Redis自帶的BenchMark做基準測試,TPS可達到10萬的級別,性能非常強勁。

列式NoSql(代表----HBase)
列式NoSql,大數據時代最具代表性的技術之一了,以HBase為代表。

關系行數據庫數據在這里插入圖片描述

注意
看到每行有name、phone、address三個字段,這是行式存儲的方式,且可以觀察id = 2的這條數據,即使phone字段沒有,它也是占空間的。

列式數據庫數據
在這里插入圖片描述

注意
查詢時只有指定的列會被讀取,不會讀取所有列
列數據被組織到一起,一次磁盤IO可以將一列數據一次性讀取到內存中

文檔型NoSql(代表----MongoDB)

什么是文檔型NoSql呢,文檔型NoSql指的是將半結構化數據存儲為文檔的一種NoSql,文檔型NoSql通常以JSON或者XML格式存儲數據。
在這里插入圖片描述

注意
關系型數據庫是按部就班地每個字段一列存,在MongDB里面就是一個JSON字符串存儲。

搜索型NoSql(代表----ElasticSearch)
在這里插入圖片描述

傳統關系型數據庫主要通過索引來達到快速查詢的目的,但是在全文搜索的場景下,索引是無能為力的,like查詢一來無法滿足所有模糊匹配需求,二來使用限制太大且使用不當容易造成慢查詢,搜索型NoSql的誕生正是為了解決關系型數據庫全文搜索能力較弱的問題,ElasticSearch是搜索型NoSql的代表產品。
在這里插入圖片描述

關系型數據庫和非關系型數據及其區別

關系型數據庫
在這里插入圖片描述
關系型數據庫最典型的數據結構是表,由二維表及其之間的聯系所組成的一個數據組織
優點

  • 易于維護:都是使用表結構,格式一致;
  • 使用方便:SQL語言通用,可用于復雜查詢;
  • 復雜操作:支持SQL,可用于一個表以及多個表之間非常復雜的查詢。

缺點

  • 讀寫性能比較差,尤其是海量數據的高效率讀寫;
  • 固定的表結構,靈活度稍欠;

非關系型數據庫
在這里插入圖片描述
優點:

  • 格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型。
  • 速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤;
  • 高擴展性;
  • 成本低:nosql數據庫部署簡單,基本都是開源軟件。

缺點:

  • 不提供sql支持,學習和使用成本較高;

  • 無事務處理;

  • 數據結構相對復雜,復雜查詢方面稍欠。

NoSQL經典應用

在這里插入圖片描述

當下應用是SQL和NoSQL一起使用
在這里插入圖片描述
淘寶商品信息如何存放
在這里插入圖片描述
商品基本信息

名稱、價格、出廠信息、生產廠商,商家信息等, 關系型數據庫就可以解決。

注意
注意,淘寶內部用的Mysql是里面的大牛自己改造過的。

商品描述、詳情、評論
在這里插入圖片描述
多文件信息描述類,IO讀寫性能變差不能使用Mysql數據庫,使用MongDB。

商品的圖片
在這里插入圖片描述
分布式文件系統:

  • 淘寶自己的TFS
  • Google的GFS
  • Hadoop的HDFS
  • 阿里云的OSS

商品熱門的波段信息

內存數據庫 Redis Tair Memache

遇到的問題
數據類型太多
數據源繁多
數據要改造

Redis

在這里插入圖片描述

Redis是什么?

Redis是一個使用ANSI C編寫的開源、包含多種數據結構、支持網絡、基于內存、可選持久性的鍵值對存儲數據庫。

特性:

  • 基于內存運行,性能高效
  • 支持分布式,理論上可以無限擴展
  • key-value存儲系統
  • 開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基于內存亦可持久化* 的日志型、Key-Value數據庫,并提供多種語言的API

誰在用Redis

  • Github

  • 京東

  • 微博

  • 阿里巴巴

  • 百度

  • 美團

  • 搜狐

Linux下安裝Redis

官網地址

Redis官方網址:https://redis.io/

下載Redis

可以直接使用我提供的 Redis

redis-6.2.4.tar.gz上傳至CentOS并解壓,解壓后得到redis-6.2.4目錄

解壓命令

tar -zxvf redis-6.2.4.tar.gz

安裝GCC

安裝C語言編譯環境

yum install -y gcc

通過使用gcc --version命令打印 GCC 版本,來驗證 GCC 編譯器是否被成功安裝:

gcc --version

安裝Redis
編譯Redis
在redis-6.2.4目錄下執行:

make

在這里插入圖片描述
安裝Redis

在redis-6.2.4目錄下執行:

make install

在這里插入圖片描述

安裝目錄: /usr/local/bin

在這里插入圖片描述

注意
redis-benchmark:Redis自帶的基準性能測試工具
redis-check-aof:對有問題的 AOF 文件進行修復,AOF和RDB文件后面會說明
redis-check-rdb:對有問題的 RDB文件進行修復
redis-sentinel:Redis集群使用
redis-cli:客戶端
redis-server:服務器啟動

服務啟動

前臺啟動:/usr/local/bin下執行

./redis-server

后臺啟動

修改redis.conf文件

daemonize  yes   #由no改為yes

啟動服務

./redis-server ../redis.conf

客戶端啟動
/usr/local/bin下執行

./redis-cli

ping命令可以檢測服務器是否正常(服務器返回PONG)

127.0.0.1:6379>  ping
PONG

Docker下安裝Redis

在這里插入圖片描述
下載最新Redis鏡像

docker pull redis

注意:
可以用docker pull redis命令下載最新版本的Redis鏡像,也可 以用“docker pull redis:標簽”命令下載指定版本的Redis。

啟動Redis容器

docker run -itd --name myFirstRedis -p 6379:6379
redis:latest

觀察Redis啟動效果

docker logs myFirstRedis

注意
如果直接在Linux等環境上啟動Redis服務器,就能直接看到啟動后的效果。

查看Redis的版本

先確保myFirstRedis容器處于Up狀態。進入容器的命令行交互窗口。

docker exec -it myFirstRedis /bin/bash
redis-server --version

Redis服務器和客戶端

Redis是基于鍵值對存儲的NoSQL數據庫,其中的數據是存儲在 Redis服務器里的。和傳統的MySQL數據庫服務器相似,一個Redis服務器可以同多個客戶端創建連接。

docker exec -it myFirstRedis /bin/bash
redis-cli

基本知識

默認16數據庫
Redis是一個字典結構的存儲服務器,一個Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。

這與在一個關系數據庫實例中可以創建多個數據庫類似(如下圖所示),所以可以將其中的每個字典都理解成一個獨立的數據庫。
在這里插入圖片描述
Redis默認支持16個數據庫,可以通過調整Redis的配置文件redis/redis.conf中的databases來修改這一個值,設置完畢后重啟Redis便完成配置。
在這里插入圖片描述
Redis 使用的到底是多線程還是單線程?
因為Redis是基于內存的操作,CPU不是Redis的瓶頸,Redis的瓶頸最有可能是機器內存的大小或者網絡帶寬。既然單線程容易實現,而且CPU不會成為瓶頸,那就順理成章地采用單線程的方案了。

IO多路復用技術
在這里插入圖片描述
redis 采用網絡IO多路復用技術來保證在多連接的時候, 系統的高吞吐量。

大白話解釋

假設你是一個機場的空管, 你需要管理到你機場的所有的航線, 包括進港,出港, 有些航班需要放到停機坪等待,有些航班需要去登機口接乘客。

最簡單的做法,就是你去招一大批空管員,然后每人盯一架飛機, 從進港,接客,排位,出港,航線監控,直至交接給下一個空港,全程監控。

遇到的問題
很快你就發現空管塔里面聚集起來一大票的空管員,交通稍微繁忙一點,新的空管員就已經擠不進來了。
空管員之間需要協調,屋子里面就1, 2個人的時候還好,幾十號人以后 ,基本上就成菜市場了。
空管員經常需要更新一些公用的東西,比如起飛顯示屏,比如下一個小時后的出港排期,最后你會很驚奇的發現,每個人的時間最后都花在了搶這些資源上。

怎么解決
這個東西叫flight progress strip. 每一個塊代表一個航班,不同的槽代表不同的狀態,然后一個空管員可以管理一組這樣的塊(一組航班),而他的工作,就是在航班信息有新的更新的時候,把對應的塊放到不同的槽子里面。

結論
在這里插入圖片描述

這里“多路”指的是多個網絡連接,“復用”指的是復用同一個線程。采用多路 I/O 復用技術可以讓單個線程高效的處理多個連接請求(盡量減少網絡IO的時間消耗),且Redis在內存中操作數據的速度非常快(內存內的操作不會成為這里的性能瓶頸),主要以上兩點造就了Redis具有很高的吞吐量。

切換數據庫
語法結構:

select number

示例

# 默認使用 0 號數據庫
redis 127.0.0.1:6379> SET db_number 0 
OK
# 使用 1 號數據庫
redis 127.0.0.1:6379> SELECT 1   
OK

清空當前庫
Redis Flushdb 命令用于清空當前數據庫中的所有 key。

語法結構

127.0.0.1:6379> FLUSHDB 

示例

127.0.0.1:6379> FLUSHDB 

通殺全部庫
Redis Flushall 命令用于清空整個 Redis 服務器的數據(刪除所有數據庫的所有 key )。

語法結構

redis 127.0.0.1:6379> FLUSHALL 

示例

 # 清空所有數據庫的所有 key
redis 127.0.0.1:6379>flushall   
OK

如果我的內容對你有幫助,請點贊,評論,收藏。創作不易,大家的支持就是我堅持下去的動力
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717337.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sqlmap進行http頭注入及流量分析

環境準備:構建完善的安全滲透測試環境:推薦工具、資源和下載鏈接_滲透測試靶機下載-CSDN博客 利用 SQLMap 進行 HTTP 頭注入的方式對于 Less-19 注入點的注入 SQLMap 工具我使用kali中自帶的 注入準備 先使用bp將Less-19靶場的包抓下來保存到 txt 文件中,輸入賬號 admin…

Ubuntu23.10禁用Wayland

禁用前 編輯custom.conf文件 sudo vim /etc/gdm3/custom.conf 去掉WaylandEnablefalse前的#號 保存退出 重啟系統 生效: 成功轉換為X11

【LeetCode題解】2809. 使數組和小于等于 x 的最少時間+2788. 按分隔符拆分字符串+410. 分割數組的最大值

文章目錄 [2809. 使數組和小于等于 x 的最少時間](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路: [2788. 按分隔符拆分字符串](https://leetcode.cn/problems/split-strings-by-separator/)思路: [410. 分割數組的最大…

Leetcoder Day36| 動態規劃part03

343. 整數拆分 給定一個正整數 n,將其拆分為至少兩個正整數的和,并使這些整數的乘積最大化。 返回你可以獲得的最大乘積。 示例 1: 輸入: 2輸出: 1解釋: 2 1 1, 1 1 1。 示例 2: 輸入: 10輸出: 36解釋: 10 3 3 4, 3 3 4 36。說明: 你可以假設 …

如何提取圖片中某個位置顏色的RGB值,RGB十進制值與十六進制的轉換

打開本地的畫圖工具,把圖片復制或截圖粘進去,用顏色提取器點對應的位置就可以提取了。 獲取到的 RGB 值為 (66,133,244) 轉化后的值為 #4285F4。 【內容拓展一】:RGB 十進制值與十六進制的轉換 當我們從 RGB 十進制值轉換為十六進制值時&a…

Yapi部署

【GO開發工程師】Yapi部署 推薦個人主頁:席萬里的個人空間 文章目錄 【GO開發工程師】Yapi部署1、Yapi部署 1、Yapi部署 初始化yapi: git clone https://github.com/Ryan-Miao/docker-yapi.git cd docker-yapi docker-compose upyapi啟動失敗 1.cd進入…

粉絲福利-純凈Windows系統安裝鏡像下載網站

?Windows操作系統鏡像文件是從微軟或其他經過驗證的來源下載正版操作系統安裝介質的關鍵所在。以下是詳細闡述從不同渠道獲取Windows系統鏡像的說明,尤其強調官方和安全的下載途徑。Windows系統鏡像可以從多個可靠來源下載,以下是幾個推薦的選擇: 微軟官方網站 微軟官方網…

對于《幻獸帕魯》這樣的游戲,如何優化服務器性能以提高游戲體驗?

對于《幻獸帕魯》這樣的游戲,如何評估和優化服務器性能以提高游戲體驗? 硬件配置優化:選擇高性能的服務器,如4核16G的幻獸帕魯服務器,這樣可以保證有足夠的計算性能和內存容量來支持游戲的運行。同時,考慮到…

Node.js(六)-數據庫與身份認證

一 、學習目標 ◆ 能夠知道如何配置MySQL數據庫環境 ◆ 能夠認識并使用常見的 SQL語操作數據庫 ◆ 能夠在Express中操作MySQL數據庫 ◆ 能夠了解 Session的實現原理 ◆ 能夠了解JWT的實現原理 二、數據庫的基本概念 1.1 什么是數據庫 數據庫(database)…

邊緣計算網關的重要作用-天拓四方

隨著物聯網技術的迅猛發展,數據量的爆炸式增長對數據處理和分析提出了更高的要求。邊緣計算網關作為連接物理世界和數字世界的橋梁,正逐漸受到各行業的重視。本文將從行業背景、功能特點以及帶來的效益等方面,探討邊緣計算網關在當前及未來的…

備戰藍橋杯---狀態壓縮DP基礎2之TSP問題

先來一個題銜接一下: 與上一題的思路差不多,不過這里有幾點需要注意: 1.因為某一列的狀態還與上上一行有關,因此我們令f[i][j][k]表示第i行狀態為j,第i-1行狀態為k的最大炮兵數。 因此,我們可以得到狀態轉移方程&…

2024/03/01

控制機械臂 #include<myhead.h> #define SER_IP "192.168.126.2" #define SER_PORT 8888#define CLI_IP "192.168.252.165" #define CLI_PORT 9999int main(int argc, const char *argv[]) {int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror…

成功解決git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解決git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 問題描述解決方案 問題描述 用git的時候可能會遇到這個問題&#xff1a; (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…

Windows服務器:通過nginx反向代理配置HTTPS、安裝SSL證書

先看下效果&#xff1a; 原來的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且顯示為安全鏈接。 首先需要 SSL證書 。 SSL 證書是跟域名綁定的&#xff0c;還有有效期。 windows 下雙擊可以查看相關信息。 下載的證書是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

【leetcode】圓圈中最后剩下的數字

目錄 1. 問題 2. 思路 3. 代碼 4. 運行 1. 問題 本題即為典型的約瑟夫問題&#xff0c;通過遞推公式倒推出問題的解。原始問題是從n個人中每隔m個數踢出一個人&#xff0c;原始問題變成從n-1個人中每隔m個數踢出一個人…… 示例 1&#xff1a; 輸入: n 5, m 3 輸出: 3…

Unity TMP文字移動效果

前言 看見很多游戲有很特殊的波浪形文字效果&#xff0c;于是來嘗試一下控制TMP文字頂點的方式達到類似效果。 原理 掛載tmp text&#xff0c;在里面隨便放入非空格字符。 tmp text組件開放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…

兩天學會微服務網關Gateway-Gateway簡介

鋒哥原創的微服務網關Gateway視頻教程&#xff1a; Gateway微服務網關視頻教程&#xff08;無廢話版&#xff09;_嗶哩嗶哩_bilibiliGateway微服務網關視頻教程&#xff08;無廢話版&#xff09;共計17條視頻&#xff0c;包括&#xff1a;1_Gateway簡介、2_Gateway工作原理、3…

使用.NET開發VSTO工具快速將PPT導出為圖片

本文主要介紹如何使用.NET開發 PowerPoint VSTO 外接程序&#xff0c;并實現快速的將當前頁PPT導出為圖片的功能。可以幫助你了解如何使用 VSTO 開發 Office 外接程序&#xff0c;以及如何操作 PowerPoint 的對象模型。 1. 背景 在日常的文章寫作中&#xff0c;我經常使用 PPT…

Vue 3 中的 watchEffect 和 watch 有什么區別?

Vue 3 中的 watchEffect 和 watch 有什么區別&#xff1f; Vue 3 引入了 Composition API&#xff0c;為開發者提供了更加靈活和組織化的方式來組合和復用代碼邏輯。在響應式系統中&#xff0c;watch 和 watchEffect 是兩個重要的函數&#xff0c;用于觀察和響應 Vue 組件中狀…

JUC并發編程 深入學習Java并發編程【上】

JUC并發編程&#xff0c;深入學習Java并發編程&#xff0c;與視頻每一P對應&#xff0c;全系列6w字。 P1-5 為什么學特色預備知識 進程線程概念 進程&#xff1a; 一個程序被運行&#xff0c;從磁盤加載這個程序的代碼到內存&#xff0c;就開起了一個進程。 進程可以視為程…