Redis框架詳解

目錄

1. redis是什么

主要特點

2. redis中存儲的數據類型

2.1 String類型

2.2 List類型

2.3 Hash類型

2.4 Set類型

2.5 Zset類型

2.6 其它類型

3.redis高可用框架

1. redis是什么

Redis 是一個開源的、基于內存的數據結構存儲系統,是 Remote Dictionary Server(遠程字典服務器)的縮寫。可用作:

  • 數據庫
  • 緩存
  • 消息中間件

主要特點

  • 基于內存操作,性能極高
  • 支持豐富的數據結構(字符串、哈希表、列表、集合等)
  • 支持數據持久化
  • 支持主從復制和集群
  • 單線程模型(核心操作)

2. redis中存儲的數據類型

常見的5種數據類型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)。

2.1 String類型

String 是最基本的 key-value 結構,key 是唯一標識,value 是具體的值,value其實不僅是字符串, 也可以是數字(整數或浮點數),value 最多可以容納的數據長度是512M。

常見指令:

操作常用指令value類型
查詢GET key字符串
增加SET key value
刪除DEL key
判斷key是否存在EXISTS key
判斷key中value長度STRLEN key
value值+1INCR key整數
value值-1DECR key
value值+10INCR key 10
設置過期時間60秒EXPIRE key 60
查看數據還有多久過期TTL keytime to live
設置值和過期時間

SETEX key 60 value

SET key value EX 60

不存在插入SETNX key value

應用場景:

  • 緩存對象數據
  • 計數(單線程原子操作):INCR key
  • 分布式鎖:SETNX key value PX?1000,若key不存在,則插入成功即加鎖成功,若key存在,加鎖失敗,同時給該key鎖設置過期時間1秒。
  • 共享session信息:分布式系統,服務器共享redis中存儲的session信息。

擴展:SETEX 是較早引入的命令,當時Redis主要使用作為時間單位;SET 命令的選項是后來添加的,增加了更精細的毫秒級控制,PX =?Precise eXpire (in milliseconds)

2.2 List類型

簡單的字符串列表,底層采用雙鏈表,列表的最大長度為?2^32 - 1,也即每個列表支持超過?40 億個元素。

常用指令:

操作常用指令
在value列表left左側插入數據LPUSH key value
在value列表右側right插入數據RPUSH key value
列表左側彈出頭元素LPOP key
列表右側彈出尾元素RPOP key
返回指定區間內的元素LRANGE key start stop

應用場景:

  • 消息隊列:

2.3 Hash類型

Hash 是一個鍵值對(key - value)集合,其中 value 的形式如: value=[{field1,value1},...{fieldN,valueN}]。Hash 特別適合用于存儲對象

常用指令:

操作常用指令
增加HSET key field value(HMSET key field1 value1 field2 value2 )
獲取HGET key field
刪除HDEL key field
field的數量HLEN key

2.4 Set類型

無序并唯一的鍵值集合,一個集合最多可以存儲?2^32-1?個元素。

常見指令:

操作指令備注
增加元素SADD key value
刪除元素SREM key value
獲取所有元素SMEMBERS key

應用場景:數據去重,數據唯一性,集合之間交集、并集、錯集。

點贊:文章下點贊的用戶數據

共同關注:不同的用戶關注的相同的公眾號數據

2.5 Zset類型

有序集合類型:元素依然是唯一的,不允許重復,但是每個元素是有順序的。每個元素存儲兩個值,一個是順序號,一個是元素值。

常用指令

操作指令備注
增加ZADD key score value
刪除ZREM key value
返回元素的分值ZSCORE key value
某個元素的score增加ZINCRBY key score value

應用場景:排行榜、排序

2.6 其它類型

  • BitMap(2.2 版新增):二值狀態統計的場景,比如簽到、判斷用戶登陸狀態、連續簽到用戶總數等;
  • HyperLogLog(2.8 版新增):海量數據基數統計的場景,比如百萬級網頁 UV 計數等;
  • GEO(3.2 版新增):存儲地理位置信息的場景,比如滴滴叫車;
  • Stream(5.0 版新增):消息隊列,相比于基于 List 類型實現的消息隊列,有這兩個特有的特性:自動生成全局唯一消息ID,支持以消費組形式消費數據。

3.redis高可用框架

框架:主從模式,數據修改只在主服務器上,然后將最新的數據同步給從服務器。

如果主服務器掛了,如何選擇新的主服務器呢,引入哨兵機制,它會檢測主節點是否存活,哨兵的作用:監控、選主、通知。

為了減少一個哨兵節點對主服務器判斷的失誤,所以,為了減少誤判的情況,哨兵在部署的時候不會只部署一個節點,而是用多個節點部署成哨兵集群(最少需要三臺機器來部署哨兵集群),通過多個哨兵節點一起判斷,就可以就可以避免單個哨兵因為自身網絡狀況不好,而誤判主節點下線的情況。同時,多個哨兵的網絡同時不穩定的概率較小,由它們一起做決策,誤判率也能降低。

這張圖展示的是Redis哨兵(Sentinel)模式的架構相關邏輯。 在Redis哨兵模式中,存在主節點(Master)、從節點(Slave)和哨兵節點(Sentinel)。主節點負責處理寫操作,從節點通過“寫同步”從主節點同步數據,主要處理讀操作。

哨兵節點的作用是監控主節點的狀態。圖中的哨兵A、B、C會對主節點是否下線進行判斷與協商。比如哨兵B和C判定主節點“主觀下線”(即自身認為主節點可能下線)后,會相互詢問對方是否也認為主節點下線,哨兵C表示認同,而哨兵A則判定主節點在線且不認同其他哨兵的觀點。當多數哨兵(通常是超過半數)判定主節點真正下線(客觀下線)后,會觸發故障轉移流程,從從節點中選舉出新的主節點,保證Redis服務的高可用性。

參考:https://www.xiaolincoding.com/redis/cluster/master_slave_replication.html

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

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

相關文章

每日隨機展示10個wordpress置頂文章

WordPress 置頂文章是博主根據自己的需要設置的&#xff0c;通常用于展示重要或熱門的文章。 以下是一個示例代碼&#xff0c;用于在 WordPress 主題中展示 10 個置頂文章&#xff1a; <?php // 查詢置頂文章 $sticky get_option(sticky_posts); $args array(post__in …

金融工程vs金融數學:誰更貼近量化交易?

在金融行業邁向高度數字化的今天&#xff0c;量化交易已成為頂尖金融機構的核心競爭力之一。它以數學模型為基礎&#xff0c;借助編程技術實現策略自動化&#xff0c;在高頻、中低頻、套利、因子投資等多個領域展現出強大生命力。對于有志于此的大學生而言&#xff0c;選擇一個…

實測AI Ping,一個大模型服務選型的實用工具

作為一名長期奮戰在一線的AI應用工程師&#xff0c;我在技術選型中最頭疼的問題就是&#xff1a;“這個模型服務的真實性能到底如何&#xff1f;” 官方的基準測試總是在理想環境下進行&#xff0c;而一旦投入使用&#xff0c;延遲波動、吞吐下降、高峰期服務不可用等問題就接踵…

深信服軟件:aTrustAgent異常占用問題處理

問題&#xff1a;aTrustAgent占用CPU 大早上開電腦&#xff0c;風扇轉的飛起&#xff0c;任務管理器看&#xff0c;發現是有幾個 aTrustAgent 進程搞得鬼。 印象中&#xff0c;好像沒有裝過這個軟件&#xff0c;搜了下&#xff0c;是深信服的軟件&#xff0c;不知道是不是裝哪…

基于國產銀河麒麟服務器SP3項目實戰(Nginx+Keepalive)實現高可用負載均衡

一、環境準備 192.168.113.11NginxKeepalive(Master)192.168.113.22Nginxkeepalive(Backup)192.168.113.33Nginx(web服務器)192.168.113.44 Nginx(服務器&#xff09; 二、環境搭建準備 2.1 Nginx源碼編譯安裝 參考作責之前發布《Nginx源碼編譯安裝》https://blog.csdn.net…

K近鄰:從理論到實踐

K近鄰&#xff1a;從理論到實踐 文章目錄K近鄰&#xff1a;從理論到實踐1. 核心思想2. 距離度量3. k的選擇與誤差分析3.1 近似誤差3.2 估計誤差3.3 總誤差4. kd樹的構造與搜索4.1 kd樹的構造4.2 kd樹的搜索5. 總結6. K近鄰用于iris數據集分類6.1加載數據6.2加載模型并可視化1. …

Dokcer的安裝(ubuntu-20.04.6):

Dokcer的安裝(ubuntu-20.04.6)&#xff1a; 1.添加Docker倉庫 #更新本地軟件包索引&#xff0c;獲取最新的軟件包信息 sudo apt-get update #安裝依賴包 sudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release #創建密鑰存儲目錄 sudo mkdir -p /etc/apt/…

CT圖像重建原理

一、CT到底測了什么&#xff1f;硬件動作X 射線源與探測器陣列對置&#xff0c;圍著物體旋轉。每轉到一個角度 θ&#xff08;也叫一個視角 / view&#xff09;&#xff0c;源發射扇形/平行的射線束&#xff0c;探測器陣列上有很多“通道/像素/bin”&#xff08;記作索引 n&…

【pycharm】 ubuntu24.04 搭建uv環境

通過uv配置python環境 一直是conda環境 現在有個開源項目說用uv更快更好 所以在pycharm搞起。 一開始在在一個conda項目的里面某個項目里搞 發現會被conda 環境影響。 導致deepseed 安裝不了。 python 環境不對 # NOTE: We must explicitly request them as `dependencies` abo…

從軟件工程角度談企業管理

從軟件工程角度談企業管理企業管理&#xff0c;本質上是人與人之間的博弈。 管理的最大難題&#xff0c;不是定目標、不是寫流程&#xff0c;而是&#xff1a;如何讓個體的利益最大化路徑&#xff0c;與組織的整體目標一致&#xff1f; 這就是經濟學里的“激勵相容”。 在互聯網…

vue3 實現前端生成水印效果

vue3 實現前端生成水印效果首先一點哈&#xff0c;就是單純web前端生成水印只能作為警示使用&#xff0c;如果享徹底防住幾乎是不可能的&#xff0c;有無數種方式去掉web前端生成的水印&#xff0c;所以這種方式只當是一個君子協議吧。編寫水印組件 首先直接把這部分封裝成一個…

Armonia Mall超級數字生態WEB3商城的引領者

Armonia Mall是一個基于Web3技術的超級數字生態商城&#xff0c;旨在打造全球首家Web3數字普惠商城&#xff0c;幫助千萬行銷人實現數字生態創業&#xff0c;讓全球一億家庭共享數字經濟紅利。 Armonia Mall商城創始人&#xff1a;石玉華Armonia Mall七大超級機制&#xff08;模…

Axios與Java Spring構建RESTful API服務集成指南

1 前后端分離時代的技術選擇 現在的Web開發&#xff0c;前后端分離已經不是什么新鮮事了。前端用什么&#xff1f;很多團隊選擇Axios。后端呢&#xff1f;Java Spring依然是企業級應用的首選。 Axios這個JavaScript庫確實好用&#xff0c;Promise-based的設計讓異步請求變得簡單…

Django ORM多對多關系實戰指南

一、Django 多對多關系的原理 在關系型數據庫中&#xff0c;多對多關系通常需要 第三張中間表 來維護兩張表之間的對應關系。 在 Django 中&#xff0c;你只需要定義 ManyToManyField&#xff0c;Django 會自動幫你創建這張中間表。 特點&#xff1a; 可以雙向查詢&#xff08;…

STM32 單片機開發 - TIM 定時器(PWM)

一、硬件定時器高級控制定時器 Advanced Control Timers (TIM1/TIM8)通用定時器 General Purpose Timers (TIM2/TIM3/TIM4/TIM5)通用定時器 General Purpose Timers (TIM15/TIM16/TIM17)基本定時器 Basic Timers (TIM6/TIM7)表 1 定時器種類二、TIM 中 PWM 概念PWM 的基本原理就…

OpenCV內置分類器實現簡單的人臉識別

引言 人臉檢測是計算機視覺領域的基礎任務之一&#xff0c;廣泛應用于安防監控、人機交互、圖像美化等場景。今天我們將通過一段簡潔的Python代碼&#xff0c;使用OpenCV庫實現實時攝像頭人臉檢測功能。無論你是計算機視覺新手還是有經驗的開發者&#xff0c;這篇文章都能幫你理…

Tomcat 性能優化與高并發調優

Tomcat 性能優化與高并發調優1. 引言 經過前幾篇文章的學習&#xff0c;我們已經掌握了 Tomcat 的核心原理&#xff1a; Connector 連接器容器體系&#xff08;Engine → Host → Context → Wrapper&#xff09;Servlet 執行鏈路線程模型&#xff08;Executor Worker&#xf…

MacOS M1安裝face_recognition

MacOS M1安裝face_recognition一致失敗&#xff0c;嘗試網上各種方法還是失敗&#xff0c;遂分享自己安裝成功的經歷。 conda虛擬環境python版本&#xff1a;3.9.23準備工作確保 Homebrew 已安裝 Homebrew 是 macOS 的包管理器&#xff0c;用于安裝依賴項。如果尚未安裝&#x…

動態庫和靜態庫的鏈接加載

靜態庫的鏈接與加載靜態庫&#xff08;如.a或.lib文件&#xff09;在編譯時直接鏈接到可執行文件中。編譯器會將靜態庫中實際用到的代碼復制到最終的可執行文件&#xff0c;生成獨立的二進制文件。優點是不依賴外部庫文件&#xff0c;但會導致可執行文件體積較大。生成靜態庫的…

如何處理在pytorch環境中已經安裝的matplotlib無法使用的問題

1 問題已經安裝好的matplotlib包無法在pytorch環境中使用。2 方法方法一&#xff1a;用命令安裝matplotlib &#xff1a;方法二&#xff1a;打開cmd&#xff0c;使用conda install matplotlib命令安裝matplotlib庫#輸入以下代碼段&#xff0c;查詢當前執行路徑import osos.sys.…