在 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(…...
Windows环境下Dlib库安装完全指南:从报错到成功的实战手册
Windows环境下Dlib库安装完全指南:从报错到成功的实战手册 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 问题定位&am…...
LiveSplit:速度跑计时领域的精准度革新与实践指南
LiveSplit:速度跑计时领域的精准度革新与实践指南 【免费下载链接】LiveSplit A sleek, highly customizable timer for speedrunners. 项目地址: https://gitcode.com/gh_mirrors/li/LiveSplit 在竞技游戏的毫秒级竞争中,计时工具的精准度直接决…...
3分钟快速上手:Grafana中文版终极部署指南
3分钟快速上手:Grafana中文版终极部署指南 【免费下载链接】grafana-chinese grafana中文版本 项目地址: https://gitcode.com/gh_mirrors/gr/grafana-chinese 还在为英文界面的Grafana监控平台而烦恼吗?想为你的团队打造一个完全中文的可视化监控…...
解决SAP ABAP RFC外部调用调试难题:User权限与断点设置技巧
SAP ABAP RFC外部调用调试实战:权限配置与断点优化全指南 在SAP系统集成项目中,RFC(Remote Function Call)作为跨系统通信的核心技术,其调试过程往往让开发者头疼不已。想象一下这样的场景:你开发的RFC接口…...
D2RML终极指南:5分钟掌握暗黑2重制版多开技巧
D2RML终极指南:5分钟掌握暗黑2重制版多开技巧 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 想要在《暗黑破坏神2:重制版》中同时管理多个游戏账户,却苦于繁琐的登录…...
Kandinsky-5.0-I2V-Lite-5s效果展示:背景变化趋势+主体动作精准还原案例
Kandinsky-5.0-I2V-Lite-5s效果展示:背景变化趋势主体动作精准还原案例 1. 惊艳的轻量级图生视频体验 想象一下,你只需要上传一张照片,再简单描述想要的动态效果,就能获得一段5秒的专业级短视频。这就是Kandinsky-5.0-I2V-Lite-…...
如何彻底清理显卡驱动残留?DDU终极解决方案完整指南
如何彻底清理显卡驱动残留?DDU终极解决方案完整指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller …...
原神智能辅助工具BetterGI:三维价值框架下的游戏效率提升方案
原神智能辅助工具BetterGI:三维价值框架下的游戏效率提升方案 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音…...
【Spring Boot 3 + Vue 3】宠物医院智能诊疗管理系统 全功能展示 | 前后端分离实战
宠物医院智能诊疗管理系统 — Spring Boot 3 Vue 3 全栈实战 项目简介基于 Spring Boot 3 Vue 3 Bootstrap 5 MyBatis-Plus MySQL 构建的宠物医院智能诊疗管理系统,采用前后端分离架构,实现了从游客浏览、在线预约、诊疗记录到物资管理的完整业务闭…...
BlynkEthernet_Manager:嵌入式以太网Blynk连接管理框架
1. BlynkEthernet_Manager:面向工业级嵌入式设备的以太网Blynk连接管理框架1.1 工程定位与设计哲学BlynkEthernet_Manager并非通用型网络中间件,而是一个面向资源受限但需高可靠远程交互场景的专用连接管理层。其核心工程目标明确:在Teensy 4…...
