在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行:
一、安装 Redis
1. 更新包列表
首先,更新本地的包列表以确保获取到最新的软件包信息:
sudo apt update
2. 安装 Redis
使用 apt 包管理器安装 Redis:
sudo apt install redis-server
3. 验证安装
安装完成后,可以通过以下命令检查 Redis 的运行状态:
sudo systemctl status redis
如果 Redis 正在运行,输出中会显示 active (running)。
二、配置 Redis
Redis 的主要配置文件位于 /etc/redis/redis.conf。你可以根据需要进行修改。
1. 编辑配置文件
使用你喜欢的文本编辑器(如 nano)编辑配置文件:
sudo nano /etc/redis/redis.conf
2. 常见配置选项
-
持久化设置:
- 默认情况下,Redis 使用 RDB 快照持久化。你可以根据需求启用或禁用。
-
绑定地址和端口:
- 默认绑定到
127.0.0.1,如果需要远程访问,可以修改bind参数,但需注意安全性。
- 默认绑定到
-
设置密码:
- 为了增强安全性,可以设置访问密码。在配置文件中取消注释并设置
requirepass:requirepass yourpassword
- 为了增强安全性,可以设置访问密码。在配置文件中取消注释并设置
-
后台运行:
- 默认情况下,Redis 以后台模式运行。确保
daemonize设置为yes:daemonize yes
- 默认情况下,Redis 以后台模式运行。确保
3. 重新启动 Redis 服务
在修改配置文件后,重新启动 Redis 服务以应用更改:
sudo systemctl restart redis
4. 设置开机自启
确保 Redis 在系统启动时自动启动:
sudo systemctl enable redis
三、测试 Redis 安装
使用 redis-cli 工具连接到 Redis 服务器并测试:
redis-cli
在 redis-cli 提示符下输入:
PING
如果一切正常,Redis 会回复:
PONG
四、Redis 发布-订阅(Pub/Sub)使用指南
Redis 的发布-订阅功能允许消息在客户端之间实时传递。以下是如何使用 redis-cli 进行发布和订阅的示例。
1. 订阅频道
打开一个终端窗口,运行以下命令订阅一个频道(例如 news):
redis-cli
在 redis-cli 提示符下输入:
SUBSCRIBE news
你将看到类似如下的输出,表示已成功订阅:
1) "subscribe"
2) "news"
3) (integer) 1
此终端将持续监听 news 频道的消息。
2. 发布消息
打开另一个终端窗口,运行以下命令发布消息到 news 频道:
redis-cli
在 redis-cli 提示符下输入:
PUBLISH news "Hello, Redis Pub/Sub!"
执行后,你将在订阅 news 频道的终端看到如下输出:
(integer) 1
而订阅终端将显示:
1) "message"
2) "news"
3) "Hello, Redis Pub/Sub!"
3. 示例:多个频道和消息
你可以订阅多个频道或使用通配符模式。例如,订阅所有以 news. 开头的频道:
PSUBSCRIBE news.*
发布到不同的频道:
PUBLISH news.sports "Sports news update"
PUBLISH news.weather "Weather forecast update"
订阅终端将接收到相应的消息。
4. 使用密码保护的 Redis 实例
如果 Redis 配置了访问密码,连接时需要提供密码。例如:
redis-cli -a yourpassword
或者在 redis-cli 内使用 AUTH 命令:
AUTH yourpassword
五、进阶使用
除了命令行工具,你还可以在各种编程语言中使用 Redis 的 Pub/Sub 功能。例如,使用 Python 的 redis 库:
import redis# 创建 Redis 连接
r = redis.Redis(host='localhost', port=6379, password='yourpassword')# 订阅频道
pubsub = r.pubsub()
pubsub.subscribe('news')# 监听消息
for message in pubsub.listen():if message['type'] == 'message':print(f"Received message: {message['data'].decode()}")
发布消息:
import redisr = redis.Redis(host='localhost', port=6379, password='yourpassword')
r.publish('news', 'Hello from Python!')
在 Ubuntu 上安装和配置用于 C++ 编程的 Redis 环境,主要包括以下几个步骤:
- 安装 Redis 服务器(如果尚未安装)
- 安装必要的依赖库
- 安装 C++ Redis 客户端库(如
redis-plus-plus) - 配置开发环境
- 编写和运行示例 C++ 程序
以下是详细的步骤说明:
六、安装 Redis 服务器
如果你还没有在 Ubuntu 上安装 Redis,可以参考之前的回答中的步骤进行安装。如果已经安装,可以跳过此部分。
七、安装必要的依赖库
在安装 redis-plus-plus 之前,需要先安装一些依赖库,包括 hiredis 和 CMake 等。
1. 更新包列表
sudo apt update
2. 安装 hiredis
hiredis 是一个高性能的 Redis C 客户端库,是 redis-plus-plus 的依赖。
sudo apt install libhiredis-dev
3. 安装 CMake
CMake 是一个跨平台的构建系统,用于管理项目的构建过程。
sudo apt install cmake
4. 安装其他依赖
确保安装了编译 C++ 代码所需的编译器和工具:
sudo apt install build-essential
八、安装 redis-plus-plus(C++ Redis 客户端库)
redis-plus-plus 是一个功能丰富且易于使用的 C++ Redis 客户端库,基于 hiredis 构建。
1. 克隆 redis-plus-plus 仓库
git clone https://github.com/sewenew/redis-plus-plus.git
cd redis-plus-plus
2. 创建构建目录并编译
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install
这将编译并安装 redis-plus-plus 库到系统中。
3. 更新库缓存
sudo ldconfig
九、配置开发环境
确保你的 C++ 项目能够找到 redis-plus-plus 和 hiredis 的头文件和库文件。下面以一个简单的 C++ 项目为例,演示如何配置和使用 redis-plus-plus。
1. 创建项目目录
mkdir ~/redis_cpp_project
cd ~/redis_cpp_project
2. 编写示例代码
创建一个名为 main.cpp 的文件,内容如下:
#include <sw/redis++/redis++.h>
#include <iostream>using namespace sw::redis;int main() {try {// 连接到 Redis 服务器auto redis = Redis("tcp://127.0.0.1:6379");// 设置键值对redis.set("key", "Hello, Redis!");// 获取键的值auto val = redis.get("key");if (val) {std::cout << "key: " << *val << std::endl;} else {std::cout << "key does not exist." << std::endl;}// 发布-订阅示例// 订阅频道auto sub = redis.subscriber();sub.on_message([](std::string channel, std::string msg) {std::cout << "Received message from channel " << channel << ": " << msg << std::endl;});sub.subscribe("news");// 在另一个线程中监听消息std::thread([&sub]() {try {sub.consume();} catch (const std::exception &e) {std::cerr << "Subscriber error: " << e.what() << std::endl;}}).detach();// 发布消息redis.publish("news", "Hello from C++!");// 等待一段时间以确保消息被接收std::this_thread::sleep_for(std::chrono::seconds(1));} catch (const Error &err) {std::cerr << "Redis error: " << err.what() << std::endl;}return 0;
}
3. 编写 CMakeLists.txt
创建一个名为 CMakeLists.txt 的文件,内容如下:
cmake_minimum_required(VERSION 3.5)
project(RedisCppExample)set(CMAKE_CXX_STANDARD 14)find_package(hiredis REQUIRED)
find_package(redis++ REQUIRED)add_executable(redis_cpp_example main.cpp)target_link_libraries(redis_cpp_example PRIVATE redis++ hiredis::hiredis)
4. 构建项目
mkdir build
cd build
cmake ..
make
5. 运行示例程序
确保 Redis 服务器正在运行,然后执行:
./redis_cpp_example
你应该会看到类似如下的输出:
key: Hello, Redis!
Received message from channel news: Hello from C++!
十、进一步学习和参考
1. 官方文档
redis-plus-plusGitHub 仓库hiredisGitHub 仓库
2. 示例代码
redis-plus-plus 仓库中包含多个示例代码,展示了如何使用不同的功能。可以参考这些示例来扩展你的项目。
3. 编程指南
- 连接 Redis:如何配置连接选项,如密码验证、SSL 等。
- 基本操作:字符串、哈希、列表、集合、有序集合等数据结构的操作。
- 发布-订阅:高级用法,如模式订阅、消息过滤等。
- 事务和管道:如何在 C++ 中使用 Redis 的事务和管道功能。
- 异步操作:使用异步 API 以提高性能和响应性。
十一、常见问题排查
1. 编译错误
如果在编译过程中遇到找不到 redis-plus-plus 或 hiredis 的头文件或库文件,确保它们已正确安装,并且 CMakeLists.txt 中的 find_package 指令能够找到它们。
2. 运行时错误
如果运行时无法连接到 Redis 服务器,请确保 Redis 服务器正在运行,并且连接地址和端口正确。
3. 权限问题
如果 Redis 配置了访问密码,在连接时需要提供密码。例如:
auto redis = Redis("tcp://127.0.0.1:6379?password=yourpassword");
相关文章:
在 Ubuntu 上安装和配置 Redis
在 Ubuntu 上安装和配置 Redis,并使用发布-订阅(Pub/Sub)功能,可以按照以下步骤进行: 一、安装 Redis 1. 更新包列表 首先,更新本地的包列表以确保获取到最新的软件包信息: sudo apt update…...
Excel中双引号问题
背景: 从Excel中读取数据时,发现有的单元格读出来是一个双引号,有的是一个双引号 "{""accountName"": ""全字段"",""accountState"": ""NORMAL"",&q…...
【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
Stream-Based Selective Sampling Stream-based selective sampling 是一种主动学习方法,在处理大量数据流时特别有用。它允许学习算法动态选择是否对当前数据实例进行标注(通过与 Oracle 交互)。此方法主要应用于流数据场景中,目…...
elementUI项目中,只弹一个【token过期提示】信息框的处理
关键代码 let msgArr document.querySelectorAll(.token401Message)if (!msgArr.length) {Message({customClass: token401Message,message: response.data.msg,type: error,onClose: () > {msgArr []}})} 完整代码 import axios from axios import { getToken } from…...
SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
文章目录 1、Servlet 容器与线程池管理1.1 线程池的作用1.2 线程池的配置 2、HTTP 请求的线程隔离2.1 请求上下文和会话信息2.2 多线程处理的隔离性 3、 ThreadLocal 和线程上下文隔离3.1ThreadLocal的使用3.2 保证线程隔离性 4、Async异步任务的线程隔离4.1 异步任务的线程池4…...
【LLM】25.1.11 Arxiv LLM论文速递
25.1.10 12:00 - 25.1.11 12:00 共更新36 篇 —第1篇---- Supervision policies can shape long-term risk management in general-purpose AI models 🔍 关键词: 通用型人工智能,风险管理,监督政策,模拟框架 PDF链接 摘要: 通…...
单片机实物成品-012 酒精监测
项目介绍 本项目以软硬件结合的方式,选择 C 语言作为程序硬件编码语言, 以 STM32 单片机作为核心控制板,在数据传输节点上连接酒精传感器对酒精浓度进行 实时检测,且对高浓度酒精采取强制干预和紧急预警,并将数据通过…...
使用葡萄城+vue实现Excel
最终实现效果如下 包含增加复选框 设置公式 设置背景颜色等,代码实在太多 有需要可留言 第一步:创建表头 请使用官网提供的网址:在线 Excel 编辑器 | SpreadJS 在线表格编辑器 1.点击下方号,创建一个新的sheet页 默认新创建的she…...
【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
一、import导入css样式 在项目文件中创建一个common文件夹,下面创建一个css文件夹,里面放上style.css文件,编写的是公共样式,我们现在要在App.vue中引入该样式。 在App.vue中引入该样式,这样就会使样式全局生效&#…...
跟我学C++中级篇——字节序
一、什么是字节序 在谈字节序前讲个小故事,在小说《格列佛游记》中,有两派势力为了吃鸡蛋的时候儿到底是先打破大的一端还是打破小的一端展开了战争,而且这场战争持续了很久。后来,1980年,Danny Cohen在论文"On …...
Linux网络编程5——多路IO转接
一.TCP状态时序理解 1.TCP状态理解 **CLOSED:**表示初始状态。 **LISTEN:**该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 **SYN_SENT:**这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时…...
Redis常见
Redis 事务 什么是 Redis 事务? 你可以将 Redis 中的事务理解为:Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。 Redis 事务实际开发中使用的非常少,功能比…...
提升 PHP 编码效率的 10 个实用函数
PHP开发者始终追求更简洁、高效的代码。幸运的是,PHP 提供了丰富的内置函数,能显著减少手动编码,提升开发效率。无论经验深浅,掌握这些函数的使用技巧都至关重要。 以下列出了 10 个可以显著加快您的编码过程的 PHP 函数…...
设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...
golang之数据库操作
1.导入必要的包 import("database/sql"_ "github.com/go-sql-driver/mysql" //使用此作为数据库驱动 ) 2.相关操作 连接数据库 使用sql.Open()函数进行数据库的连接 db, err : sql.Open("mysql", "user:passwordtcp(127.0.0.1:3306)/db…...
对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
近日,张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任,他将如何跟随 Apache SeaTunnel 社区迈向新的高度?让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己,包括职业背景、当前的工作…...
Mac 删除ABC 输入法
参考链接:百度安全验证 Mac下删除系统自带输入法ABC,正解!_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态,可以删除 ;可能会对DNS 输入有影响,但是可以通过复…...
《机器学习》之K-means聚类
目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…...
日常工作之 Elasticsearch 常用查询语句汇总
日常工作之 Elasticsearch 常用查询语句汇总 查询现有索引创建索引查询索引结构插入数据查询索引数据查看索引磁盘占用信息删除索引查看分词器分词结果指定查询数量指定条件查询数据迁移统计索引数据量更新数据 在使用 es 的过程中,总是会用到 es 的查询语句&#x…...
WeakAuras NES Script(lua)
WeakAuras NES Script 修星脚本字符串 脚本1:NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
