一、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(&…