最全Redis基礎知識

来源:https://www.cnblogs.com/zcr3108346262/archive/2020/03/14/12491175.html
-Advertisement-
Play Games

NoSQL概述 什麼是NoSQL NoSQL不僅僅是SQL,它是Not Only SQL 的縮寫,也是眾多非關係型資料庫的統稱NoSQL和關係型資料庫一樣,也是用來存儲數據的倉庫。 為什麼需要NoSQL? 隨著互聯網的高速發展,數據量、訪問量呈爆髮式式增長。比如12306中國鐵路票務系統。 一年售出 ...


NoSQL概述

什麼是NoSQL

NoSQL不僅僅是SQL,它是Not Only SQL 的縮寫,也是眾多非關係型資料庫的統稱NoSQL和關係型資料庫一樣,也是用來存儲數據的倉庫。

為什麼需要NoSQL?

隨著互聯網的高速發展,數據量、訪問量呈爆髮式式增長。比如12306中國鐵路票務系統。
一年售出車票有30多億張;
網上售票比例超過了80%;
互聯網高峰日售出車票達到了1282多萬張;
高峰時每秒售票超出1000張;
網站高峰日訪問量超過了1600億次……
12306售票系統
已成為全球最大的票務交易系統
中國人民徹夜排隊買票已成為歷史

這麼多的數據都是需要存儲的,然而傳統的關係型資料庫面對這些海量數據的存儲,以及實現高訪問量、高併發讀/寫,就會顯的力不從心,尤其是當面對超大規模、高併發、高吞吐量的大型動態網站的時候,就會暴露出很多難以剋服的問題,影響用戶體驗。為了滿足對海量數據的高速存儲需求,實現高併發、高吞吐量,NoSQL應運而生。NoSQL的出現可以解決傳統關係型資料庫所不能解決的問題。

NoSQL特點

  1. 容易擴展,方便使用,數據之間沒有關係。
  2. 數據模型非常靈活,無需提前為要存儲的數據建立欄位類型,隨時可以存儲自定義的數據格式。
  3. 適合大數據量、高性能的存儲。
  4. 具有高併發讀/寫、高可用性。

Redis概述

Redis由來

2008年,義大利的一家創業公司Merzia推出了一款基於MySQL的網站實時統計系統LLOOGG,沒多久該公司的創始人Sanfilippo對MySQL的性能感到失望,於是他決定親自為LLOOGG量身定做一個資料庫,並於2009年開發完成,這個資料庫就是Redis。

什麼是Redis

Redis(全稱:Remote Dictionary Server 遠程字典服務)是一個開源的、使用C語言編寫、支持網路、可基於記憶體亦可持久化的Key-Value資料庫,並提供多種語言的API。
Redis能讀的速度是110000次/s,寫的速度是81000次/s 。

Redis為什麼快

  1. 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。
  2. 數據結構簡單,對數據操作也簡單,Redis中的數據結構是專門進行設計的;
  3. 採用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗;
  4. 使用多路I/O復用模型,非阻塞IO;

Redis的安裝和使用

Windows下安裝

下載地址:https://github.com/MSOpenTech/redis/releases
Redis 支持 32 位和 64 位。這個需要根據你系統平臺的實際情況選擇,這裡我們下載 Redis-x64-xxx.zip解壓後,將文件夾重新命名為 redis。

打開文件夾,內容如下:

雙擊redis-server.exe,啟動服務端,輸入之後,會顯示如下界面:

這時候啟動一個 cmd 視窗,原來的不要關閉,不然就無法訪問服務端了。
切換到 redis 目錄下運行:

redis-cli.exe -h 127.0.0.1 -p 6379

Linux 下安裝

下載地址:http://redis.io/download,下載最新穩定版本。
本教程使用的最新文檔版本為 2.8.17,下載並安裝:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完後 redis-2.8.17目錄下會出現編譯後的redis服務程式redis-server,還有用於測試的客戶端程式redis-cli,兩個程式位於安裝目錄 src 目錄下:
下麵啟動redis服務.

$ cd src
$ ./redis-server

註意這種方式啟動redis 使用的是預設配置。也可以通過啟動參數告訴redis使用指定配置文件使用下麵命令啟動。

$ cd src
$ ./redis-server ../redis.conf

redis.conf 是一個預設的配置文件。我們可以根據需要使用自己的配置文件。
啟動redis服務進程後,就可以使用測試客戶端程式redis-cli和redis服務交互了。 比如:

$ cd src
$ ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

Ubuntu 下安裝

在 Ubuntu 系統安裝 Redis 可以使用以下命令:

$sudo apt-get update
$sudo apt-get install redis-server

啟動 Redis

$ redis-server

查看 redis 是否啟動?

$ redis-cli

以上命令將打開以下終端:

redis 127.0.0.1:6379>

127.0.0.1 是本機 IP ,6379 是 redis 服務埠。現在我們輸入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上說明我們已經成功安裝了redis。

Redis的數據結構

Redis 字元串(String)

概述

字元串類型是Redis中最為基礎的數據存儲類型。在Redis中字元串類型的Value最多可以容納的數據長度是512M。

常用命令

  • 賦值
  • 取值
  • 刪除

del key:刪除指定的key

  • 數值增減

Redis 哈希(Hash)

概述

Hash類型可以看出具有String key 和String value 的map容器。所以該類型非常適合於存儲值為對象的信息。如username、password和age等。每一個hash可以存儲4294967295個鍵值對

常用命令

  • 賦值
  • 取值

  • 刪除
  • 其他

    Redis 列表(List)

概述

List類型是按照插入順序排序的雙向鏈表。從元素插入和刪除的效率視角來看,如果我們在鏈表的兩頭插入或刪除元素,這將會是非常高效的操作,即使鏈表中已經存儲了大量的數據,該操作也可以在常量時間內完成。

常用命令

  • 兩端添加
  • 查看列表
  • 兩端彈出

  • 獲取列表中元素的個數

Redis 集合(Set)

概述

Set類型為沒有排序的字元集合。Set集合中不允許出現重覆的元素。Set類型在功能上還存在一個非常重要的特性,即集合的聚合操作效率極高。

常用命令

  • 添加/刪除元素

  • 獲得集合中的元素
  • 集合的差集運算 A-B
  • 集合的交集運算 A∩B
  • 集合中的並集運算 A∪B

Redis 有序集合(sorted set)

概述

有序集合和Set類型即為相似,都不允許重覆的成員出現在一個Set中。它們之間的主要差別是有序集合中的每一個成員都會有一個score與之關聯,通過score來為集合中的成員進行從小到大的排序。

常用命令

  • 添加元素
  • 獲得元素

  • 刪除元素
  • 範圍查詢

Redis特性

多資料庫

一個Redis實例最多可提供16個資料庫,下標從0到15,客戶端預設連接第0號。

消息訂閱與發佈

  1. subscribe channel:訂閱頻道。例如subscribe mychat,訂閱mychat這個頻道
  2. psubscribe channel:批量訂閱頻道。例如psubscribe s,訂閱以s開頭的頻道。
  3. publish channel content:在指定的頻道中發佈消息,如punlish mychat ‘today is a newday’

Redis事務

Redis作為NoSQL資料庫也提供了事務機制。
特點:

  1. 在事務中的所有命令都將會被串列化的順序執行,事務執行期間,Redis不會再為其他客戶端請求提供任何服務,從而保證了事務中的所有命令被原子的執行。
  2. 和關係型資料庫中的事務相比,在Redis事務中如果有某一條命令執行失敗,其後的命令仍然被繼續執行。

Redis持久化

Redis的高性能是由於其將所有的數據都存儲在了記憶體中,為了使Redis在重啟之後仍能保證不丟失,需要將數據從記憶體中同步到硬碟中,這一過程就是持久化。
Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式。可以單獨使用,也可以結合使用。

  1. RDB持久化(預設)
    在指定的時間間隔內將記憶體中的數據集快照寫入磁碟。
  2. AOF持久化
    以日誌的形式記錄伺服器所處理的每一個寫操作,在Redis伺服器啟動之初會讀取該文件來重新構建資料庫,以保證啟動後資料庫中的數據是完整的。

Key值過期

Redis的應用場景

  1. 緩存(最多使用)
  2. 聊天室的線上好友列表 發佈/訂閱
  3. 任務隊列(秒殺、搶購) 消息隊列、(先進先出、後進先出) (List)
  4. 應用排行榜(有序集合)
  5. 網站訪問統計(Set)
  6. 數據過期處理(可以精確到毫秒)
  7. 分散式集群框架中的session分離。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IdentityServer4可以通過自定義授權模式進行擴展。這樣授權中心可以擴展多套授權方式,比如今天所分享的 自定義微信openId 授權、簡訊驗證碼授權等其他自定義授權,一套Api資源可以兼併多套授權模式,靈活擴展,靈活升級 ...
  • 背景 By 魯迅 By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器,Contex A53,雙核 3. 使用工具:Source Insight 3.5, Visio 1. 概述 ,完全公平調度器,用於Linux系統中普通進程的調度。 採用了紅黑樹演算法來管理所有的調度實體 ...
  • 我們知道,要連接一個資料庫需要知道四個參數: 1. 登陸用戶名:user; 2. 登錄密碼:password; 3. 存放資料庫的伺服器地址(server_ip)和埠(server_port); 4. 資料庫名(db_name); 我們如果要連接db_name這個數據,除了用戶名密碼以外,還需要輸 ...
  • 1. 進程合作 多個進程共同完成一個任務 每個進程有自己執行的一套方案,但不是每個程式都是可以隨便執行的,有時候需要等待,有的進程會給它發一些信號,根據這些信號來決定是否繼續執行 2. 生產者 消費者實例 那個地方需要停?那個地方需要走? 3. 只發信號還不能解決全部問題 問題的關鍵在於消費者僅僅是 ...
  • 1:雙擊安裝包進行安裝。點擊“next”。2:點擊“w accept the termis...”同意條款,並點擊“next”,進行下一步。3:點擊“enthr license information”,點擊“next”。4:在註冊框中分別填入下載的信息product code: 4vkjwhfeh ...
  • 1、簡單文字說明,關鍵位置截圖補充,Samba配置文件中的關鍵參數,使用註釋標明。 2、實驗過程中,出現任何錯誤,詳細描述排錯的過程。 3、實驗完成後,當場演示實驗結果。 ...
  • linux修改root@後面的別名 通過終端登錄伺服器後預設顯示的主機名有的時候是隨機數或者太長 [root@ecs-x-large-9-linux-20221387234818 ~]# 修改方法一: vi /etc/hostname 然後輸入新的主機名,但需重啟才能生效。 方法二: vi ~/.b ...
  • 本文主要介紹Oracle11g,client及PLSQL的安裝過程 一,oracle安裝 安裝環境:虛擬機win7 64 1.點擊目錄中 setup.exe文件 2.配置安全更新中,取消通過my oracle support接收安全更新,點擊下一步按鈕 3.oracle會彈出提示,點擊是按鈕 4.安 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...