【Redis/2】核心特性、應用場景與安裝配置

文章目錄

  • 一、初識 Redis
    • 1.1 Redis 概述
      • 1. Redis 簡介
      • 2. Redis 的發展歷程
    • 1.2 Redis 核心特性
      • 1. 高性能
      • 2. 豐富的數據類型
      • 3. 持久化
      • 4. 原子操作
      • 5. 主從復制
      • 6. 高可用性與分布式
      • 7. 內存存儲與低延遲
      • 8. 靈活的過期策略
      • 9. 事務支持
      • 10. 簡單的 API
      • 總結
    • 1.3 Redis 應用場景
      • Redis 適用場景
      • Redis 不適用場景
    • 1.4 Redis 版本
  • 二、Redis 安裝與基礎操作
    • 2.1 安裝 Redis
    • 2.2 支持遠程連接
    • 2.3 Redis 基礎控制
  • 三、Redis 重要文件 & 作用
    • 3.1 工具 & 腳本
    • 3.2 配置文件
    • 3.3 持久化文件存儲目錄
    • 3.4 日志文件目錄
  • 四、Redis 命令行客戶端
    • 4.1 連接Redis服務器的兩種模式
      • 1. 交互式連接(推薦用于日常操作)
      • 2. 命令行模式(適合腳本調用)
    • 4.2 連接參數簡化技巧
    • 4.3 高級連接技巧
    • 4.4 連接問題排查

一、初識 Redis

1.1 Redis 概述

1. Redis 簡介

Redis(Remote Dictionary Server) 是一款高性能的 鍵值存儲(Key-Value Store) 數據庫,屬于 NoSQL 數據庫的一種。相較于傳統鍵值數據庫,Redis 的核心優勢在于其支持 多種數據結構,包括:

  • String(字符串)
  • Hash(哈希表)
  • List(列表)
  • Set(集合)
  • Sorted Set(有序集合)
  • Bitmaps(位圖)
  • HyperLogLog(基數統計)
  • GEO(地理空間索引)

由于 Redis 數據主要存儲在內存中,其讀寫性能極高(可達 10萬+ QPS)。同時,Redis 提供 持久化機制(RDB 快照和 AOF 日志),確保數據在宕機或故障時不會丟失。

此外,Redis 還支持:

  • 鍵過期(Key Expiration)
  • 發布訂閱(Pub/Sub)
  • 事務(Transactions)
  • 流水線(Pipeline)
  • Lua 腳本(Lua Scripting)

2. Redis 的發展歷程

  • 2008 年:Redis 由 Salvatore Sanfilippo(@antirez) 開發,最初用于優化其項目 LLOOGG 的隊列性能(替代 MySQL)。
  • 2009 年:Redis 1.0 開源發布,迅速獲得廣泛關注。
  • 至今:Redis 已成為全球最受歡迎的 內存數據庫 之一,被眾多 大型互聯網公司 采用。

1.2 Redis 核心特性

  • MySQL 主要通過 存儲數據,“關系型數據庫”
  • Redis 通過 鍵值對 存儲數據,“非關系型數據庫”

根據官方的介紹,Redis 具有以下特性和優點:

1. 高性能

  • Redis 提供極高的讀寫性能,能在毫秒級的時間內完成數據操作。
  • 支持單線程架構,利用事件循環處理多個客戶端請求,避免了上下文切換的開銷。
  • 從網絡角度上,Redis 使用了IO多路復用的機制(epoll)
  • Redis是C語言開發的,從某種程度上也減少了延遲以及提高了處理速度

2. 豐富的數據類型

  • 除了傳統的鍵值對數據存儲,Redis 支持多種復雜的數據類型,如:
    • 字符串(String)
    • 哈希(Hash)
    • 列表(List)
    • 集合(Set)
    • 有序集合(Sorted Set)
    • 位圖(Bitmap)
    • HyperLogLog(用于基數統計)
    • 地理空間(Geospatial)

3. 持久化

  • Redis 提供了兩種持久化機制:
    • RDB(Redis 數據庫快照):通過定期將數據保存到磁盤中來持久化數據。
    • AOF(追加文件):每次對 Redis 進行寫操作時,將操作命令追加到日志文件中。
  • 這兩種方式可以結合使用,以確保數據的持久性和高可用性。

4. 原子操作

  • Redis 提供對數據的原子操作支持,確保在并發情況下,數據的修改不會發生沖突或不一致。

5. 主從復制

  • Redis 支持主從復制機制,可以通過復制將數據同步到多個從節點,從而提高數據的可用性與讀取性能。

6. 高可用性與分布式

  • Redis 通過 Redis Sentinel 實現高可用性,能夠自動故障轉移(failover),保證系統的持續可用性。
  • Redis Cluster 支持分布式部署,可以自動分片(sharding),以支持大規模的數據存儲。

7. 內存存儲與低延遲

  • Redis 完全基于內存(RAM)操作,具有極低的延遲。
  • 適用于高頻的讀寫操作,如實時應用程序、緩存等。

8. 靈活的過期策略

  • Redis 支持鍵值對的過期時間設置,可以自動刪除過期的數據。
  • 支持 LRU(Least Recently Used)算法來清除最少使用的鍵,幫助控制內存使用。

9. 事務支持

  • Redis 提供了事務機制,支持 MULTIEXECWATCH 等命令來實現一組操作的原子執行。

10. 簡單的 API

  • Redis 提供了非常簡單直觀的 API,易于集成和使用,支持多種編程語言,如 Python、Java、C、Go 等。

總結

下圖是總結了Redis的核心功能:

在這里插入圖片描述

  • 速度快:由于是內存數據庫,讀取速度極快。
  • 數據結構豐富:支持多種數據結構,能夠滿足不同場景的需求。
  • 高可用性:通過復制和故障轉移機制確保系統的高可用性。
  • 易于擴展:支持分片和分布式架構,能輕松擴展為大規模分布式系統。
  • 靈活性強:支持多種持久化方案和過期策略。

1.3 Redis 應用場景

Redis 適用場景

  1. 緩存

    • Web緩存:Redis 常被用作緩存系統,以提高Web應用的響應速度和減輕數據庫的負載。它通過存儲熱數據,避免重復查詢數據庫。
    • 頁面緩存:可以將渲染過的頁面存儲在 Redis 中,從而快速返回給用戶,減少服務器端渲染負擔。
    • 數據庫查詢結果緩存:將數據庫查詢結果緩存在 Redis 中,避免對數據庫的重復查詢,減少數據庫負載。
  2. 會話存儲(Session Store)

    • Redis 常被用作會話存儲,尤其是在處理大量用戶會話時。由于 Redis 支持鍵值對存儲和高效的過期策略,非常適合存儲用戶會話數據。
    • 它能支持高并發的讀寫,并且提供自動過期功能,確保會話數據能在合理時間后自動清理。
  3. 實時數據分析

    • Redis 的快速讀寫能力使它非常適合做實時數據分析。例如,使用 Redis 存儲網站的實時訪問數據、用戶活動數據等。
    • 計數器:利用 Redis 的自增操作,可以很方便地實現點擊計數、PV(頁面瀏覽量)和 UV(獨立訪客數)等功能。
    • 實時流數據處理:借助 Redis 的 列表集合 等數據結構,可以實時處理和分析大量流數據。
  4. 排行榜/計分系統

    • 有序集合(Sorted Set) 是 Redis 的一項強大功能,非常適合實現排行榜和計分系統。通過有序集合,可以高效地存儲并排序用戶分數。
    • 常見應用如在線游戲的排行榜、社交平臺的用戶積分等。
  5. 消息隊列(Message Queue)

    • Redis 可以作為高效的消息隊列系統,支持 發布/訂閱(Pub/Sub) 模式以及 列表 結構作為隊列實現。
    • 它可以用來在分布式系統中進行異步任務處理、事件通知等場景。其快速的生產者/消費者模型能夠實現低延遲的消息傳遞。
  6. 實時聊天系統

    • Redis 的發布/訂閱模型(Pub/Sub)常常用于實現實時消息推送系統。通過 Redis,用戶可以在不同的聊天室中實時交換消息。
    • 該功能非常適合社交應用、即時通訊工具、在線客服等場景。
  7. 隊列任務系統

    • Redis 的列表(List)數據結構非常適合用來實現任務隊列,支持 LPUSHRPOP 等原子操作,可以高效地進行任務的推送和消費。
    • 例如,后臺任務處理、異步任務分發等場景。
  8. 分布式鎖

    • 在分布式系統中,Redis 可以作為分布式鎖的實現方式。通過 Redis 提供的 SETNX 命令,多個進程可以競爭獲取鎖,確保資源在同一時刻只被一個進程訪問。
    • 這種鎖的機制可廣泛應用于分布式系統中的資源控制、事務管理等場景。

Redis 不適用場景

站在數據規模的角度看,數據可以分為大規模數據和小規模數據;我們知道 Redis 的數據是存在內存中的,如果數據量過于大的情況下,使用Redis經濟成分很高(內存的價格遠高于磁盤)

站在數據冷熱的角度看,數據分為熱數據與冷數據;熱數據通常指需要頻繁操作的數據,反之為冷數據,對于一個視頻網站來說,視頻的基本信息就屬于熱數據,用戶觀看記錄一般情況下不會經常訪問,屬于冷數據。
如果將這些冷數據放在Redis中,就浪費了其內存空間。這些冷數據就不適合放在Redis中。
即將那些要經常被訪問的數據放到內存中,而不經常被訪問的放在磁盤中存儲。


1.4 Redis 版本

Redis 借鑒了 Linux 操作系統的版本號命名規則:如果版本號的第二位是奇數,則表示該版本為非穩定版本(例如 2.7、2.9、3.1);如果是偶數,則為穩定版本(例如 2.6、2.8、3.0、3.2)。當前的奇數版本是下一個穩定版本的開發版本,例如 2.9 是 3.0 版本的開發版本。因此,生產環境通常選擇偶數版本的 Redis。如果希望提前體驗新的特性,可以選擇最新的奇數版本。


二、Redis 安裝與基礎操作

下面相關的安裝與操作部分主要以Ubuntu系統為主進行介紹:

2.1 安裝 Redis

  1. 在 Ubuntu 系統中,直接使用 apt 安裝即可:
apt install redis -y # -y 自動確認安裝過程中的提示
  1. Windows 系統安裝reids:
    • https://github.com/tporadowski/redis/releases
    • 進入github對應的目錄下,直接下載壓縮包或安裝包msi 在這里插入圖片描述
    • 安裝后reids目錄內容如下:在這里插入圖片描述

2.2 支持遠程連接

  1. Ubuntu 系統 修改 /etc/redis/redis.conf
  • 修改 bind 127.0.0.1bind 0.0.0.0
  • 修改 protected-mode yes 改為 protected-mode no
    在這里插入圖片描述
  1. Windows 系統修改下載目錄下的 redis.windows-service.conf
    在這里插入圖片描述

2.3 Redis 基礎控制

  1. 啟動 Redis 服務

    service redis-server start
    
  2. 停止 Redis 服務

    service redis-server stop
    
  3. 重啟 Redis 服務

    service redis-server restart
    

三、Redis 重要文件 & 作用

3.1 工具 & 腳本

下面是一些Redis中重要的工具與腳本,用于服務器的管理、性能測試、監控、數據文件的檢查與修復等功能:

文件路徑解釋作用
/usr/bin/redis-benchmarkRedis 基準測試工具用于測試 Redis 服務器性能。可以模擬大量并發操作來評估 Redis 的性能表現。
/usr/bin/redis-check-aofAOF 文件檢查工具用于檢查和修復 Redis 的 AOF(追加文件)日志。如果 Redis 崩潰或數據不一致,可以使用它來檢查和修復 AOF 文件。
/usr/bin/redis-check-rdbRDB 文件檢查工具用于檢查和修復 Redis 的 RDB(數據庫快照)文件。如果 RDB 文件損壞或不完整,可以使用該工具進行修復。
/usr/bin/redis-cliRedis 命令行客戶端通過命令行連接到 Redis 服務器,允許用戶發送 Redis 命令進行交互、管理 Redis 實例。
/usr/bin/redis-sentinelRedis Sentinel 監控工具用于管理 Redis 集群的高可用性。它監控主服務器的健康狀態,并在主服務器發生故障時,自動切換到備用服務器。
/usr/bin/redis-serverRedis 服務器啟動程序啟動 Redis 服務器實例,處理所有客戶端的請求并執行數據存儲和查詢操作。
/usr/libexec/redis-shutdownRedis 關閉服務腳本用于優關閉 Redis 服務器,確保數據被正確保存并釋放資源。

3.2 配置文件

/etc/redis-sentinel.conf
/etc/redis.conf
  • /etc/redis.conf 是 Redis 服務器的配置文件。
  • /etc/redis-sentinel.conf 是 Redis Sentinel 的配置文件。

3.3 持久化文件存儲目錄

/var/lib/redis/

Redis 持久化生產的 RDB 和 AOF ?件都默認生成于該目錄下。

3.4 日志文件目錄

/var/log/redis/

該目錄下會保存 Redis 運行期間 產生的日志文件,默認按照天數進行分割,并會將一定日期的日期文件使用gzip格式壓縮保存。

四、Redis 命令行客戶端

Redis客戶端與服務端的交互過程如下圖:
在這里插入圖片描述

4.1 連接Redis服務器的兩種模式

1. 交互式連接(推薦用于日常操作)

連接命令格式

redis-cli -h {host} -p {port}

典型使用場景

  • 需要連續執行多個命令
  • 調試和開發環境
  • 需要查看命令返回值的場景

操作示例

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping  # 測試連接
PONG
127.0.0.1:6379> set user:1001 "張三"  # 設置鍵值
OK
127.0.0.1:6379> get user:1001  # 獲取值
"張三"
127.0.0.1:6379> info memory  # 查看內存信息

2. 命令行模式(適合腳本調用)

命令格式

redis-cli -h {host} -p {port} {command}

適用場景

  • Shell腳本中調用Redis命令
  • 需要直接獲取命令結果的場景
  • 自動化任務執行

使用示例

$ redis-cli ping  # 測試連接
PONG
$ redis-cli set counter 100  # 設置值
OK
$ redis-cli incr counter  # 原子遞增
(integer) 101
$ redis-cli --raw get counter  # 原始格式輸出
101

4.2 連接參數簡化技巧

默認連接配置

  • 當連接本地服務器(127.0.0.1)和默認端口(6379)時,可省略參數:
redis-cli  # 等同于 redis-cli -h 127.0.0.1 -p 6379

常用連接選項

參數說明示例
-a認證密碼redis-cli -a password
-n選擇數據庫redis-cli -n 1
–raw原始格式輸出redis-cli --raw get key
–stat實時監控redis-cli --stat

4.3 高級連接技巧

1. 批量命令執行

$ redis-cli <<EOF
SET user:1002 "李四"
EXPIRE user:1002 3600
GET user:1002
EOF

2. 管道操作(提升批量操作性能)

$ echo -e "SET key1 value1\nGET key1" | redis-cli --pipe

3. TLS安全連接(Redis 6.0+)

redis-cli --tls --cert ./redis.crt --key ./redis.key

4.4 連接問題排查

常見錯誤處理

  1. 連接拒絕:

    $ redis-cli
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    

    解決方案

    • 確認Redis服務已啟動:ps aux | grep redis
    • 檢查防火墻設置
  2. 認證失敗:

    (error) NOAUTH Authentication required
    

    解決方案

    redis-cli -a yourpassword
    
  3. 連接超時:
    解決方案

    redis-cli -h remote_host --timeout 5
    

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

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

相關文章

AI大模型在測試領域應用案例拆解:AI賦能的軟件測試效能躍遷的四大核心引擎(順豐科技)

導語 5月份QECon深圳大會已經結束&#xff0c;繼續更新一下案例拆解&#xff0c;本期是來自順豐科技。 文末附完整版材料獲取方式。 首先來看一下這個案例的核心內容&#xff0c;涵蓋了測四用例設計、CI/CD輔助、測試執行、監控預警四大方面&#xff0c;也是算大家比較熟悉的…

【HTML】HTML 與 CSS 基礎教程

作為 Java 工程師&#xff0c;掌握 HTML 和 CSS 也是需要的&#xff0c;它能讓你高效與前端團隊協作、調試頁面元素&#xff0c;甚至獨立完成簡單頁面開發。本文將用最簡潔的方式帶你掌握核心概念。 一、HTML&#xff0c;網頁骨架搭建 核心概念&#xff1a;HTML通過標簽定義內…

Redis 集群批量刪除key報錯 CROSSSLOT Keys in request don‘t hash to the same slot

Redis 集群報錯 CROSSSLOT Keys in request dont hash to the same slot 的原因及解決方案 1. 錯誤原因 在 Redis 集群模式下&#xff0c;數據根據 哈希槽&#xff08;Slot&#xff09; 分散存儲在不同的節點上&#xff08;默認 16384 個槽&#xff09;。當執行涉及多個 key …

.Net Framework 4/C# LINQ*

一、什么是 LINQ LINQ 是一種在 C# 等編程語言中集成的查詢功能&#xff0c;它允許開發者使用編程語言本身的語法進行數據查詢&#xff0c;而不是嵌入式的字符串 SQL 語句。LINQ 查詢可以應用于對象、XML 和數據庫等多種數據源。 二、LINQ 查詢的基本構成 LINQ 查詢通常包含以…

【docker】容器技術如何改變軟件開發與部署格局

在當今數字化時代&#xff0c;軟件開發與部署的效率和靈活性至關重要。就像古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。”Docker 作為一款強大的容器技術&#xff0c;正如同軟件開發領域的一把利器&#xff0c;極大地改變了應用的開發、交付和運行方式。本文將深入…

MySQL的優化部分介紹

1、定期維護表&#xff1a; ANALYZE TABLE t_order_package; OPTIMIZE TABLE t_order_package; -- 每月在低峰期執行 2、數據歸檔&#xff08;如果create_time較舊&#xff09;&#xff1a; -- 歸檔舊數據到歷史表 INSERT INTO t_order_package_archive SELECT * FROM t_or…

Go基本語法——go語言中的四種變量定義方法

前言 在go語言中&#xff0c;定義一個變量有四種方式&#xff0c;本文單從語法的層面來介紹這幾種方式 單變量定義方法 1.var 變量名 類型&#xff0c;不進行初始化 例如&#xff0c;定義一個變量a后為其賦值&#xff0c;并且打印其值&#xff0c;運行結果如下 //1.不進行…

C++ 對 C 的兼容性

C 對 C 語言的兼容性是有限且有條件的&#xff0c;并非完全無縫兼容。這種兼容性主要體現在語法、標準庫和運行時特性上&#xff0c;但存在一些關鍵差異和不兼容點。以下是詳細分析&#xff1a; 一、C 對 C 的兼容性表現 1. 語法兼容&#xff1a;大部分 C 代碼可直接編譯 基…

ES6 核心語法手冊

ES6 核心語法手冊 一、變量聲明 關鍵字作用域是否可重定義是否可修改特性let塊級作用域??替代 var 的首選const塊級作用域??聲明常量&#xff08;對象屬性可修改&#xff09; // 示例 let name "Alice"; name "Bob"; // ?const PI 3.14; // PI …

react菜單,動態綁定點擊事件,菜單分離出去單獨的js文件,Ant框架

1、菜單文件treeTop.js // 頂部菜單 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定義菜單項數據 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 權限管理,key: 2,icon:…

gRPC協議

目錄 1. gRPC協議介紹及構成 協議分層 協議關鍵字段 2. 示例&#xff1a;Greeter 服務 步驟1&#xff1a;定義 .proto 文件 步驟2&#xff1a;生成代碼 3. Java代碼示例 依賴配置&#xff08;Maven pom.xml&#xff09; 服務端實現 客戶端實現 運行流程 關鍵機制 …

深度學習 w b

在深度學習中&#xff0c;權重 w 和 偏置 b 是神經網絡的核心參數&#xff0c;它們的形態&#xff08;shape&#xff09;取決于網絡結構和數據維度。以下是關于 w 和 b 的詳細解析&#xff1a; 1. 數學表示與物理意義 權重 w&#xff1a; 連接神經元之間的強度&#xff0c;決定…

el-table 樹形數據,子行數據可以異步加載

1、 <el-tableborder:header-cell-style"tableStyle?.headerCellStyle"ref"tableRef":data"tableData"row-key"id":default-expand-all"false" // 默認不展開所有樹形節點:tree-props"{ children: children, hasC…

Vue中渲染函數的使用

Vue中渲染函數的使用 1. render函數2. h()的使用3. render函數和h函數的區分 vue中的渲染函數&#xff1a; 1.template2.render函數3.jsx -> js extension(jsx也是編譯成render函數&#xff0c;可編程能力更強) 1. render函數 1.1. 認識h函數 1.1.1. Vue推薦在絕大多數情況…

【氮化鎵】GaN HMETs器件物理失效分析進展

2021 年 5 月,南京大學的蔡曉龍等人在《Journal of Semiconductors》期刊發表了題為《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多種物理表征技術及大量研究成果,對 GaN HEMTs 的常見失效機制進行了系統分析。文中先介紹失效分析流程,包括使…

每日Prompt:治愈動漫插畫

提示詞 現代都市治愈動漫插畫風格&#xff0c;現代女子&#xff0c;漂亮&#xff0c;長直發&#xff0c;20歲&#xff0c;豆沙唇&#xff0c;白皙&#xff0c;氣質&#xff0c;清純現代都市背景下&#xff0c;夕陽西下&#xff0c;一位穿著白色露臍短袖&#xff0c;粉色工裝褲…

2025年牛客網秋招/社招高質量 Java 面試八股文整理

Java 面試 不論是校招還是社招都避免不了各種面試。筆試&#xff0c;如何去準備這些東西就顯得格外重要。不論是筆試還是面試都是有章可循的。關鍵在于理解企業的需求&#xff0c;明確自己的定位&#xff0c;以及掌握一定的應試技巧。 筆試部分&#xff0c;通常是對基礎知識、…

在UI界面內修改了對象名,在#include “ui_mainwindow.h“沒更新

?原因?&#xff1a;未重新編譯UI文件?? Qt的UI文件&#xff08;.ui&#xff09;需要通過??uic工具&#xff08;Qt的UI編譯器&#xff09;??生成對應的ui_*.h頭文件。如果你在Qt Designer中修改了對象名&#xff0c;但沒有??重新構建&#xff08;Rebuild&#xff09;…

前端獲取接口數據流程

一、Free-Table組件分析 <free-table v-show"showTable" v-model:page"params.pageNum" 雙向綁定當前頁大小&#xff0c;支持動態更新 v-model:limit"params.pageSize" 雙向綁定每頁大小&#xff0c;支持動態更新 v-loading&…

Linux系統防火墻之iptables

防火墻在一個系統中就好像是一個國家的軍隊&#xff0c;所謂國無軍不安&#xff0c;在系統中也是這樣&#xff0c;防火墻可以保護系統被別人攻擊&#xff0c;過濾垃圾流量等&#xff0c;那么今天我們就來了解一下Linux系統中的一種防火墻iptables。 目錄 iptables概述 規則 …