redis一篇入門

一、Redis 安裝

Linux 系統安裝

  1. 通過包管理器安裝 (以 Ubuntu 為例):

    sudo apt update
    sudo apt install redis-server
    
  2. 從源碼編譯安裝:

    wget https://download.redis.io/redis-stable.tar.gz
    tar -xzvf redis-stable.tar.gz
    cd redis-stable
    make
    sudo make install
    

Windows 安裝

Windows 官方不支持 Redis,但可以使用:

  1. Microsoft 維護的 Windows 版本: https://github.com/microsoftarchive/redis
  2. 使用 WSL (Windows Subsystem for Linux)
  3. 使用 Docker 容器

二、Redis 配置

主要配置文件

Redis 配置文件通常位于 /etc/redis/redis.conf (Linux) 或安裝目錄中。

常用配置項

# 綁定IP地址,默認只允許本地訪問
bind 127.0.0.1# 端口號
port 6379# 是否以守護進程運行
daemonize yes# 數據持久化設置
save 900 1      # 900秒內有1次修改就保存
save 300 10     # 300秒內有10次修改就保存
save 60 10000   # 60秒內有10000次修改就保存# 數據文件存儲位置
dir /var/lib/redis# 日志文件位置
logfile /var/log/redis/redis-server.log# 設置密碼
requirepass yourpassword# 最大內存限制
maxmemory 100mb# 內存滿時的策略
maxmemory-policy allkeys-lru

配置生效

修改配置后需要重啟 Redis 服務:

sudo systemctl restart redis-server  # 系統服務方式
或
redis-server /path/to/redis.conf     # 直接指定配置文件啟動

三、Redis 基本使用

啟動 Redis

redis-server          # 使用默認配置啟動
redis-server /path/to/redis.conf  # 指定配置文件啟動

連接 Redis

redis-cli             # 本地連接
redis-cli -h host -p port -a password  # 遠程連接

基本命令示例

# 字符串操作
SET key value
GET key# 哈希操作
HSET user:1000 name "John Doe" age 30
HGETALL user:1000# 列表操作
LPUSH mylist a
RPUSH mylist b
LRANGE mylist 0 -1# 集合操作
SADD myset a b c
SMEMBERS myset# 有序集合操作
ZADD leaderboard 100 "player1" 200 "player2"
ZRANGE leaderboard 0 -1 WITHSCORES# 鍵操作
KEYS *
DEL key
EXPIRE key 60  # 設置60秒過期
TTL key        # 查看剩余生存時間

持久化操作

SAVE          # 同步保存數據到磁盤
BGSAVE        # 異步保存數據到磁盤

四、Redis 高級特性

事務

MULTI
SET key1 value1
SET key2 value2
EXEC

發布/訂閱

# 終端1: 訂閱頻道
SUBSCRIBE news# 終端2: 發布消息
PUBLISH news "Hello World"

Lua 腳本

EVAL "return redis.call('GET', KEYS[1])" 1 mykey

五、Redis 管理

查看服務器信息

INFO        # 查看所有信息
INFO memory # 查看內存相關信息
INFO stats  # 查看統計信息

性能測試

redis-benchmark -n 100000 -c 100

安全建議

  1. 設置密碼 (requirepass)
  2. 重命名或禁用危險命令 (如 FLUSHALL, CONFIG)
    rename-command FLUSHALL ""
    rename-command CONFIG "CONFIG-9b7d4e5f"
    
  3. 綁定特定IP,不要使用 0.0.0.0
  4. 使用防火墻限制訪問

六、Redis 集群

主從復制

# 從服務器配置
replicaof 192.168.1.100 6379
masterauth yourpassword

Redis Cluster

  1. 創建集群:
    redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
    127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
    --cluster-replicas 1
    
  2. 連接集群:
    redis-cli -c -p 7000
    

七、常見問題解決

  1. 內存不足:

    • 設置 maxmemory 和 maxmemory-policy
    • 使用適當的數據類型減少內存占用
  2. 性能問題:

    • 避免使用 KEYS 命令,用 SCAN 代替
    • 使用管道(pipeline)減少網絡往返
  3. 持久化問題:

    • 確保有足夠的磁盤空間
    • 根據業務需求調整 save 配置

八、Redis 的主要特點

Redis 是一個高性能的內存鍵值數據庫,支持多種數據結構,廣泛應用于緩存、消息隊列、實時分析等場景。以下是 Redis 的主要特點、使用場景以及性能指標數據:

  1. 高性能

    • 單實例 QPS(每秒查詢數)可達 18萬(騰訊云 Redis 8.0),讀寫延遲低于 100μs
    • 相比傳統數據庫,Redis 能處理 110,000 次讀取/秒81,000 次寫入/秒
  2. 支持多種數據結構

    • 字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)。
    • 高級數據結構:位圖(Bitmap)、HyperLogLog(基數統計)、地理空間索引(Geo)、流(Stream)。
  3. 持久化機制

    • RDB(快照):定時保存數據到磁盤。
    • AOF(日志):記錄所有寫操作,保證數據安全。
  4. 高可用與分布式

    • 主從復制(Replication)實現數據備份。
    • Redis Sentinel 提供自動故障轉移。
    • Redis Cluster 支持數據分片,適用于大規模數據存儲。
  5. 原子性操作

    • 所有 Redis 操作都是原子性的,適合計數器、排行榜等場景。

九、Redis 的使用場景

  1. 緩存

    • 減輕數據庫壓力,提高響應速度(如電商商品詳情緩存)。
    • 騰訊云 Redis 8.0 在電商熱詞統計場景下,延遲 <5ms,QPS >18萬
  2. 會話存儲(Session Storage)

    • 存儲用戶登錄狀態,支持分布式 Web 應用。
  3. 排行榜/計數器

    • 使用 Sorted Set 實現游戲排行榜、商品銷量排行等。
  4. 消息隊列

    • 利用 ListStream 實現異步任務處理(如訂單隊列)。
  5. 實時數據分析

    • 使用 HyperLogLog 統計 UV(獨立訪客),或 BitMap 記錄用戶簽到。
  6. 分布式鎖

    • 通過 SETNX 實現分布式環境下的資源互斥訪問。
  7. 地理位置服務

    • 使用 Geo 數據結構存儲經緯度,支持附近的人查詢。
  8. AI 與向量搜索

    • Redis 8.2 支持 SVS-VAMANA 向量索引,適用于 AI 推理和高維數據檢索。

十、Redis 性能指標對比

指標騰訊云 Redis 8.0阿里云 Redis 7.0華為云 GaussDB Cache
隨機讀延遲<100μs150μs180μs
單實例 QPS18萬12萬10萬
主從故障恢復(RTO)<10秒30秒<30秒
冷數據存儲成本0.024元/GB/月0.034元/GB/月-

十一、編程開發(1):使用 hiredis(官方 C 客戶端)

安裝 hiredis

sudo apt-get install libhiredis-dev  # Ubuntu
brew install hiredis                 # macOS

示例代碼

#include <hiredis/hiredis.h>
#include <iostream>int main() {// 1. 連接 RedisredisContext *c = redisConnect("127.0.0.1", 6379);if (c == nullptr || c->err) {if (c) {std::cerr << "Connection error: " << c->errstr << std::endl;redisFree(c);} else {std::cerr << "Can't allocate redis context" << std::endl;}return 1;}// 2. 執行 SET 命令redisReply *reply = (redisReply *)redisCommand(c, "SET foo bar");freeReplyObject(reply);// 3. 執行 GET 命令reply = (redisReply *)redisCommand(c, "GET foo");if (reply->type == REDIS_REPLY_STRING) {std::cout << "GET foo: " << reply->str << std::endl;}freeReplyObject(reply);// 4. 執行 HSET/HGET (哈希操作)redisCommand(c, "HSET user:1000 name John age 30");reply = (redisReply *)redisCommand(c, "HGET user:1000 name");std::cout << "HGET name: " << reply->str << std::endl;freeReplyObject(reply);// 5. 關閉連接redisFree(c);return 0;
}

編譯運行

g++ -std=c++11 redis_demo.cpp -lhiredis -o redis_demo
./redis_demo

十二、編程開發(2):使用 redis-plus-plus(推薦,現代 C++ 封裝)

安裝 redis-plus-plus

git clone https://github.com/sewenew/redis-plus-plus.git
cd redis-plus-plus
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
sudo make install

示例代碼

#include <sw/redis++/redis++.h>
#include <iostream>int main() {try {// 1. 創建 Redis 連接sw::redis::Redis redis("tcp://127.0.0.1:6379");// 2. 字符串操作redis.set("foo", "bar");auto val = redis.get("foo");if (val) {std::cout << "GET foo: " << *val << std::endl;}// 3. 哈希操作redis.hset("user:1000", { {"name", "John"}, {"age", "30"} });auto name = redis.hget("user:1000", "name");if (name) {std::cout << "HGET name: " << *name << std::endl;}// 4. 列表操作redis.rpush("mylist", {"a", "b", "c"});auto list = redis.lrange("mylist", 0, -1);for (const auto &item : list) {std::cout << "List item: " << item << std::endl;}// 5. 發布/訂閱auto sub = redis.subscriber();sub.on_message([](std::string channel, std::string msg) {std::cout << "Received message: " << msg << " from channel: " << channel << std::endl;});sub.subscribe("news");sub.consume();  // 需要在另一個線程運行} catch (const sw::redis::Error &e) {std::cerr << "Redis error: " << e.what() << std::endl;}return 0;
}

編譯運行

g++ -std=c++11 redis_plus_plus_demo.cpp -lredis++ -lhiredis -pthread -o redis_plus_plus_demo
./redis_plus_plus_demo

2個SDK功能對比

功能hiredisredis-plus-plus
易用性低(C 風格)高(C++ 封裝)
線程安全
支持數據結構基礎全量(STL 風格)
性能最高接近 hiredis
推薦場景極致性能需求一般 C++ 項目

常見問題

  1. 連接超時:檢查 Redis 服務器是否運行 (redis-cli ping)。
  2. 內存泄漏hiredis 需手動釋放 redisReply
  3. 線程安全hiredis 非線程安全,redis-plus-plus 是線程安全的。

推薦優先使用 redis-plus-plus,除非你需要極致的性能控制。

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

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

相關文章

【JAVAFX】webview導入本地html并傳入參數

java側String num"234234";URL url1 getClass().getResource("/html/imGroupVar.html");webview.getEngine().load(url1.toExternalForm() "?cc" num);本地html <!DOCTYPE html> <html lang"en"> <head><met…

Playfun即將開啟大型Web3線上活動,打造沉浸式GameFi體驗生態

作為致力于構建健康游戲生態與優質用戶體驗的領先游戲平臺&#xff0c;Playfun始終以“讓游戲更有價值”為理念&#xff0c;持續探索Web3與GameFi融合的新可能。憑借其開放、公平與共創的核心價值觀&#xff0c;Playfun正逐步成為連接玩家、開發者與數字資產生態的重要橋梁。為…

WSL2配置freesurfer

Windows 11 安裝 WSL2 Ubuntu 22.04 并遷移到 E 盤 前言 本文詳細記錄了在 Windows 11 上通過 Microsoft Store 安裝 WSL2 Ubuntu 22.04&#xff0c;并將其從默認的 C 盤遷移到 E 盤的完整過程。適合想要節省 C 盤空間或需要將 WSL2 安裝到其他磁盤的用戶。 環境信息 操作系…

論客郵箱導出發信信息腳本

#!/bin/bash# 檢查是否提供了CSV文件名if [ $# -ne 1 ]; thenecho "用法: $0 <csv文件>"exit 1ficsv_file"$1"# 暫存用戶和midoutput_csv"user_mid.csv"# 抄送人優化extract_value() {[[ "$1" *,* ]] || return # 無逗號直接返…

Windows 本地安裝部署 Apache Druid

在 Windows 本地安裝部署 Apache Druid 可以按照以下步驟進行。由于 Druid 是基于 Java 的應用&#xff0c;需要先準備好 Java 環境&#xff0c;然后下載配置 Druid。 一、環境準備 1. 安裝 Java 確保已安裝 Java 8 或以上版本&#xff08;推薦 Java 11&#xff09;&#xf…

PY32F002A單片機 低成本控制器解決方案,提供多種封裝

PY32F002A 是一款32 位 ARM Cortex-M0 內核的高性價比單片機。PY32F002A單片機提供了多種封裝類型&#xff0c;最大有18個IO&#xff0c;芯片采用32位ARM內核&#xff0c;M0架構&#xff0c;最高工作頻率24MHz。flash 存儲器20KByte,SRAM 3K。最大支持9路12位ADC&#xff0c;5個…

區塊鏈技術在物聯網(IoT)中的核心應用場景

以下是區塊鏈技術在物聯網&#xff08;IoT&#xff09;中的核心應用場景及具體實例&#xff0c;涵蓋技術原理、實施架構和實際價值&#xff1a;一、區塊鏈解決物聯網的四大核心問題痛點區塊鏈方案技術實現設備身份偽造唯一數字身份鏈上注冊非對稱加密生成設備DID&#xff08;去…

PostgreSQL DELETE 語句詳解

PostgreSQL DELETE 語句詳解 在數據庫管理中,刪除數據是日常操作中不可或缺的一環。PostgreSQL 是一款功能強大的開源關系型數據庫管理系統,其 DELETE 語句在數據刪除方面表現出色。本文將詳細解析 PostgreSQL 的 DELETE 語句,包括其語法、使用場景和注意事項。 1. DELETE…

傳統報警難題頻現,安全運行隱患重重

在企業生產運營與安全管理過程中&#xff0c;報警系統作為保障安全運行的重要防線&#xff0c;其作用不言而喻。然而&#xff0c;傳統報警系統在實際應用中卻難題頻現&#xff0c;不僅無法及時、準確地預警潛在風險&#xff0c;還為企業的安全運行埋下了重重隱患。青島國瑞信息…

WPF學習筆記(23)Window、Page與Frame、ViewBox

Window、Page與Frame一、Window1.模態窗口與非模態窗口2.Window類3.示例二、Page1.概述2.Page類三、Frame1.概述2.Frame類3.示例四、ViewBox1. 概述2. 詳解3. 示例總結一、Window 1.模態窗口與非模態窗口 2.Window類 屬性說 明Title獲取或設置窗口的標題。lcon設獲取或設置窗…

設計模式---觀察者模式(發布-訂閱模式)

設計模式—觀察者模式(發布-訂閱模式) 一、簡介 發布-訂閱模式是一種消息傳遞模式&#xff0c;用于實現對象間的一對多依賴關系。在這種模式中&#xff1a; 發布者&#xff08;Publisher&#xff09;不直接向訂閱者&#xff08;Subscriber&#xff09;發送消息發布者和訂閱者…

一文講清楚React Fiber

文章目錄一文講清楚React Fiber1. 基礎概念1.1瀏覽器刷新率&#xff08;幀&#xff09;1.2 JS執行棧1.3 時間分片1.4 鏈表2. React Fiber是如何實現更新過程控制2.1 任務拆分2.2掛起、恢復、終止2.2.1 掛起2.2.2 恢復2.2.3 終止2.3 任務具備優先級一文講清楚React Fiber 1. 基…

(3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能

(1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 前言 YOLOv 算法通常被用于目標檢測任務&#xff0c;但通過對其進行適當的調整和改造&#xff0c…

主機安全-開源HIDS字節跳動Elkeid使用

安裝好elkeid后就開始接入主機和k8s集群&#xff0c;安裝文檔-----主機安全-開源HIDS字節跳動Elkeid安裝-CSDN博客 1、接入主機 在系統管理-----安裝配置-----復制命令------在目標機器上執行這段命令 執行成功后主機就會自動接入 2、接入k8s集群 在k8s主機上執行腳本&#x…

【vue】用conda配置nodejs,一鍵開通模版使用權

特此鳴謝我的好同學重中之重的特級教學&#xff0c;非常之好用一、conda環境下載安裝二、創建包含nodejs的conda環境創建一個新環境&#xff1a;conda create -n 【自定義環境名字】 python3.9 conda create -n my_nodejs_env python3.9激活新環境&#xff1a;conda activate【…

深度學習--tensor(創建、屬性)

一、torch概念1.1簡介pytorch簡稱torch&#xff0c;意為深度學習框架。它使用張量&#xff08;tensor&#xff09;來表示數據&#xff0c;可以輕松地處理大規模數據集&#xff0c;且可以在GPU上加速。pytorch基本功能&#xff1a;自動微分、自動求導等。1.2安裝官網獲得下載命令…

【內存】Linux 內核優化實戰 - net.ipv4.tcp_max_tw_buckets

目錄net.ipv4.tcp_max_tw_buckets 詳解一、基本概念二、核心作用三、默認值四、調整場景需增大參數的場景需減小參數的場景五、查看與修改方法1. 查看當前值2. 臨時修改&#xff08;重啟失效&#xff09;3. 永久修改&#xff08;重啟生效&#xff09;六、注意事項總結net.ipv4.…

短劇系統開發定制全流程解析:從需求分析到上線運營

一、短劇行業現狀與系統開發價值短劇作為一種新興的內容形態&#xff0c;近年來呈現爆發式增長態勢。2023年中國短劇市場規模已突破300億元&#xff0c;用戶規模超過5億&#xff0c;這種以"快節奏、強劇情、低成本"為特點的內容形式正在重塑數字娛樂產業格局。短劇系…

各服務器廠商調整BIOS睿頻教程

調整BIOS睿頻選項匯總&#xff1a;1、華為服務器&#xff1a;2、華為服務器V53、浪潮服務器4、浪潮服務器M45、 曙光服務器5.1 曙光I620-G205.2 曙光I620-G306、聯想服務器&#xff08;650系列&#xff09;650系列的服務器對照截圖信息修改對應項&#xff0c;修改為截圖里的選項…

PyTorch筆記3----------統計學相關函數

1.基礎函數 import torch a torch.rand(2,2) print("a:\n",a) print(########################) print("平均值:\n",torch.mean(a,dim0)) print("總和:\n",torch.sum(a,dim0)) print("所有元素的積:\n",torch.prod(a,dim0)) print(&…