Redis概述及基本數據結構

来源:https://www.cnblogs.com/lcha-coding/archive/2022/05/30/16306038.html
-Advertisement-
Play Games

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交... ...


SQL vs NoSQL

  1. 結構化

    • SQL 是結構化的,一旦定義了表結構,以後在維護數據的時候必須嚴格遵守定義的結構。
    • NoSQL 是非結構化的,常見的形式有 Redis 的 Key-Value 存儲形式、Document 文檔型存儲形式、Graph 圖類型存儲形式
  2. 關聯的

    • SQL 資料庫可以通過如外鍵的方式去維護數據與數據之間的關聯

    • NoSQL 是非關係型的,如果想要維護數據與數據之間的關係,通常通過 json 格式的數據進行維護

      例如:

      {
          id: 1,
          name: "張三",
          orders: [
              {
                  id: 1,
                  item: {
                      id: 10,
                      title: "榮耀6",
                      price: 4999
                  }
              },
              {
                  id: 2,
                  item: {
                      id: 20,
                      title: "小米11",
                      price: 3999
                  }
              }
          ]
      }
      
  3. SQL查詢

    • SQL 的查詢有自己的語法,格式固定,語法固定,相容性起強
    • NoSQL 的查詢語句不同意,沒有固定的形式
  4. 事務

    • SQL 的所有資料庫都是可以實現 ACID 的
    • NoSQL 資料庫要麼沒有事務,要麼只能滿足事務最基本的一些一致性

認識 Redis

Redis 是一個基於記憶體的鍵值型 NoSQL 資料庫

特征:

  • 鍵值型:value 支持多種不同數據類型,功能豐富
  • 單線程:每個命令具備原子性
  • 延遲低、速度快:基於記憶體、IO多路復用、良好的編碼
  • 支持數據持久化
  • 支持主從集群、分片集群
  • 支持多語言客戶端:Java、C等等

Redis 數據結構

Redis是一個 key-value 的資料庫,key 一般是 String 類型,不過 value 的類型多種多樣:

名稱 示例
String hello world
Hash {name: “Jack”, age: 21}
List [A -> B -> C]
Set {A,B,C}
SortedSet {A: 1, B: 2, C: 3}

[問題]:Redis 沒有類似 MySql 中的 Table 的概念,要怎麼區分不同類型的 key 呢?

[解決方法]:Redis 的 key 支持有多個單詞形成層次結構,多個單詞之間用“ :”隔開。例如 myproduct:user:1 myproduct:product:1

KEY VALUE
myproduct:user:1 {"id": 1, "name": "Jack", "age": 21}
myproduct:product:1 {"id": 1,"name": "小米11", "price": 4999}

Redis 通用命令

  • KEYS:查看符合模板的所有 key。不建議在生產環境上使用
  • DEL:刪除一個指定的 key
  • EXISTS:判斷 key 是否存在
  • EXPIRE:給一個 key 設置有效期,有效期到期時該 key 會被自動刪除
  • TTL:查看一個 key 剩餘的有效期

String 類型

String 類型介紹

String 類型是 Redis 中最簡單的存儲類型,其 value 是字元串。不過根據字元串格式不同,又具體分為三類:

  • string:普通字元串
  • int:整數類型,可以做自增自減操作
  • float:浮點類型,可以做自增自減操作

String 類型常見命令

  • SET:添加或者修改已經存在的一個String類型的鍵值對
  • GET:根據key獲取String類型的value
  • MSET:批量添加多個String類型的鍵值對
  • MGET:根據多個key獲取多個String類型的value
  • INCR:讓一個整型的key自增1
  • INCRBY:讓一個整型的key自增並指定步長,例如:incrby num 2 讓num值自增2
  • INCRBYFLOAT:讓一個浮點類型的數字自增並指定步長
  • SETNX:添加一個String類型的鍵值對,前提是這個key不存在,否則不執行
  • SETEX:添加一個String類型的鍵值對,並且指定有效期

Hash 類型

Hash 類型介紹

Hash 類型,也叫散列,其 value 是一個無序字典,類似於 Java 中的 HashMap 結構。Hash 結構可以將對象中的每個欄位獨立存儲,可以針對單個欄位做 CRUD。

Hash 類型常用命令

  • HSET key field value:添加或者修改hash類型key的field的值
  • HGET key field:獲取一個hash類型key的field的值
  • HMSET:批量添加多個hash類型key的field的值
  • HMGET:批量獲取多個hash類型key的field的值
  • HGETALL:獲取一個hash類型的key中的所有的field和value
  • HKEYS:獲取一個hash類型的key中的所有的field
  • HVALS:獲取一個hash類型的key中的所有的value
  • HINCRBY:讓一個hash類型key的欄位值自增並指定步長
  • HSETNX:添加一個hash類型的key的field值,前提是這個field不存在,否則不執行

List 類型

List 類型介紹

Redis 中的 List 類型與 Java 中的 LinkedList 類似,可以看做是一個雙向鏈表結構。既可以支持正向檢索和也可以支持反向檢索。其特征也與 LinkedList 類似。

List 類型常用命令

  • LPUSH key element ... :向列表左側插入一個或多個元素
  • LPOP key:移除並返回列表左側的第一個元素,沒有則返回nil
  • RPUSH key element ... :向列表右側插入一個或多個元素
  • RPOP key:移除並返回列表右側的第一個元素
  • LRANGE key star end:返回一段角標範圍內的所有元素
  • BLPOP和BRPOP:與LPOP和RPOP類似,只不過在沒有元素時等待指定時間,而不是直接返回nil

Set 類型

Set 類型介紹

Redis的Set結構與Java中的HashSet類似,可以看做是一個value為null的HashMap。因為也是一個hash表,因此具備與HashSet類似的特征。

Set 類型常用命令

  • SADD key member ... :向set中添加一個或多個元素
  • SREM key member ... : 移除set中的指定元素
  • SCARD key: 返回set中元素的個數
  • SISMEMBER key member:判斷一個元素是否存在於set中
  • SMEMBERS:獲取set中的所有元素
  • SINTER key1 key2 ... :求key1與key2的交集
  • SDIFF key1 key2 ... :求key1與key2的差集
  • SUNION key1 key2 ..:求key1和key2的並集

SortedSet 類型

SortedSet 類型介紹

Redis的SortedSet是一個可排序的set集合,與Java中的TreeSet有些類似,但底層數據結構卻差別很大。SortedSet中的每一個元素都帶有一個score屬性,可以基於score屬性對元素排序,底層的實現是一個跳錶(SkipList)加 hash表。

其具備以下特征:

  • 可排序
  • 元素不重覆
  • 查詢速度快

因為SortedSet的可排序特性,經常被用來實現排行榜這樣的功能。

SortedSet 類型常用命令

  • ZADD key score member:添加一個或多個元素到sorted set ,如果已經存在則更新其score值
  • ZREM key member:刪除sorted set中的一個指定元素
  • ZSCORE key member : 獲取sorted set中的指定元素的score值
  • ZRANK key member:獲取sorted set 中的指定元素的排名
  • ZCARD key:獲取sorted set中的元素個數
  • ZCOUNT key min max:統計score值在給定範圍內的所有元素的個數
  • ZINCRBY key increment member:讓sorted set中的指定元素自增,步長為指定的increment值
  • ZRANGE key min max:按照score排序後,獲取指定排名範圍內的元素
  • ZRANGEBYSCORE key min max:按照score排序後,獲取指定score範圍內的元素
  • ZDIFF、ZINTER、ZUNION:求差集、交集、並集

註意:所有的排名預設都是升序,如果要降序則在命令的Z後面添加REV即可


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

-Advertisement-
Play Games
更多相關文章
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 由於AI_Station 是使用容器構建環境的,而且只提供鏡像上傳下載功能,不為容易提供網路功能,因此需要在平臺上把鏡像拉取到本地,並安裝一些必備軟體然後再打包成鏡像上傳回去,因此需要在本地構建docker環境,於是如下: 安裝GPG證書 cur ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 掌握SPI匯流排通信規則,使用單片機每隔1s讀取一次溫度感測器TC72的溫度值,並通過串口將讀取的溫度值發送出去。 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 概述 VMware Workstation Pro 是行業標準桌面 Hypervisor(虛擬化技術),使用它可在 Windows 或 Linux 桌面上運行 Windows、Linux 和 BSD 虛擬機。 什麼意思呢? VMware Work ...
  • firewalld 1、firewalld firewalld防火牆是centos7系統預設的防火牆管理工具取代了之前的iptables防火牆 工作在網路層、屬於包括過濾防火牆 firewalld和iptables都是用來管理防火牆的工具(屬於用戶狀態)來定義防火牆的各種規則功能 內部結構都指向ne ...
  • 痞子衡嵌入式半月刊: 第 55 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 一、PL/SQL簡介 1)SQL是一種標準化的結構化查詢語言,在資料庫領域有著廣泛的應用和重大影響。但是SQL並不能完成一個過程所能完成的任務,如某一個條件成立進行數據插入,否則不進行數據插入。 2)PL/SQL是Oracle公司對SQL語言的擴展,全面支持所有的SQL操作與數據類型。 3)PL/S ...
  • ClickHouse的由來 ClickHouse是什麼資料庫?ClickHouse速度有多快?應用場景是怎麼樣的?ClickHouse是關係型資料庫嗎?ClickHouse目前是很火爆的一款面向OLAP的數據,可以提供秒級的大數據查詢。 Google於2003~2006年相繼發表了三篇論文“Goog ...
  • - Jedis - 優點:以 Redis 命令作為方法名稱,學習成本低廉,簡單且實用 - 缺點:Jedis 的實例是線程不安全的,在多線程的環境下需要基於線程池來使用 - lettuce(spring 官方預設) - 基於 Netty 實現的,支持同步、非同步和響應式編程方式,並且是線程安... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...