在 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
      

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 环境,主要包括以下几个步骤:

  1. 安装 Redis 服务器(如果尚未安装)
  2. 安装必要的依赖库
  3. 安装 C++ Redis 客户端库(如 redis-plus-plus
  4. 配置开发环境
  5. 编写和运行示例 C++ 程序

以下是详细的步骤说明:

六、安装 Redis 服务器

如果你还没有在 Ubuntu 上安装 Redis,可以参考之前的回答中的步骤进行安装。如果已经安装,可以跳过此部分。

七、安装必要的依赖库

在安装 redis-plus-plus 之前,需要先安装一些依赖库,包括 hiredisCMake 等。

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-plushiredis 的头文件和库文件。下面以一个简单的 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-plus GitHub 仓库
  • hiredis GitHub 仓库

2. 示例代码

redis-plus-plus 仓库中包含多个示例代码,展示了如何使用不同的功能。可以参考这些示例来扩展你的项目。

3. 编程指南

  • 连接 Redis:如何配置连接选项,如密码验证、SSL 等。
  • 基本操作:字符串、哈希、列表、集合、有序集合等数据结构的操作。
  • 发布-订阅:高级用法,如模式订阅、消息过滤等。
  • 事务和管道:如何在 C++ 中使用 Redis 的事务和管道功能。
  • 异步操作:使用异步 API 以提高性能和响应性。

十一、常见问题排查

1. 编译错误

如果在编译过程中遇到找不到 redis-plus-plushiredis 的头文件或库文件,确保它们已正确安装,并且 CMakeLists.txt 中的 find_package 指令能够找到它们。

2. 运行时错误

如果运行时无法连接到 Redis 服务器,请确保 Redis 服务器正在运行,并且连接地址和端口正确。

3. 权限问题

如果 Redis 配置了访问密码,在连接时需要提供密码。例如:

auto redis = Redis("tcp://127.0.0.1:6379?password=yourpassword");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1455.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

E10.【C语言】练习:编写一个猜数字游戏

目录 1.规则 2.准备 3.游戏代码 1.规则 1.程序生成1-100间的随机数 2.用户猜数字 猜对了&#xff1a;游戏结束 猜错了&#xff1a;程序会告知猜大了或猜小了&#xff0c;继续进行游戏&#xff0c;直到猜对 3.游戏可以一直玩除非退出游戏 2.准备 1.框架&#xff1a;循…

【HTML+CSS+JS+VUE】web前端教程-31-css3新特性

圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}

【高阶数据结构】位图

位图 一.位图相关面试题二.位图的设计及实现三.C库中的位图bitset四.位图的优缺点五.位图相关考察题目 一.位图相关面试题 问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中&#xff08;本…

解决Qt打印中文字符出现乱码

在 Windows 平台上&#xff0c;默认的控制台编码可能不是 UTF-8&#xff0c;这可能会导致中文字符的显示问题。 下面是在 Qt 应用程序中设置中文字体&#xff0c;并确保控制台输出为 UTF-8 编码&#xff1a; 1. Qt 应用程序代码 在 Qt 中&#xff0c;我们可以使用 QApplic…

hutool糊涂工具通过注解设置excel宽度

import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…

【算法学习】——整数划分问题详解(动态规划)

&#x1f9ee;整数划分问题是一个较为常见的算法题&#xff0c;很多问题从整数划分这里出发&#xff0c;进行包装&#xff0c;形成新的题目&#xff0c;所以完全理解整数划分的解决思路对于之后的进一步学习算法是很有帮助的。 「整数划分」通常使用「动态规划」解决&#xff0…

【Elasticsearch7.11】postman批量导入少量数据

JSON 文件内的数据格式&#xff0c;json文件数据条数不要过多&#xff0c;会请求参数过大&#xff0c;最好控制再10000以内。 {"index":{"_id":"baec07466732902d22a24ba01ff09751"}} {"uuid":"baec07466732902d22a24ba01ff0975…

Mysql--架构篇--体系结构(连接层,SQL层,存储引擎层,文件存储层)

MySQL是一种广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;其体系结构设计旨在提供高效的数据存储、查询处理和事务管理。MySQL的体系结构可以分为多个层次&#xff0c;每个层次负责不同的功能模块。 MySQL的体系结构主要由以下几个部分组成&#…

ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技

本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走&#xff1a; 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画&#xff0c;将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…

Linux下部署Redis(本地部署超详细)

非docker 1、下载Redis 历史版本&#xff1a; http://download.redis.io/releases 我的&#xff1a; http://download.redis.io/releases/redis-7.0.5.tar.gz 2.安装教程 1.Redis是基于c语言编写的需要安装依赖&#xff0c;需要安装gcc yum install gcc-c 2.查看gcc版…

java -jar启动项目报错:XXX.jar中没有主清单属性

XXX.jar中没有主清单属性 1、错误复现2、错误原因3、解决方案 java -jar启动项目报错&#xff1a;XXX.jar中没有主清单属性 1、错误复现 今天使用springboot给项目打了jar包&#xff0c;使用命令启动时报错&#xff0c;截图如下&#xff1a; 2、错误原因 项目的pom文件配置如…

贪心算法详细讲解(沉淀中)

文章目录 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09;经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09; 贪心策略&a…

【Logstash03】企业级日志分析系统ELK之Logstash 过滤 Filter 插件

Logstash 过滤 Filter 插件 数据从源传输到存储库的过程中&#xff0c;Logstash 过滤器能够解析各个事件&#xff0c;识别已命名的字段以构建结构&#xff0c; 并将它们转换成通用格式&#xff0c;以便进行更强大的分析和实现商业价值。 Logstash 能够动态地转换和解析数据&a…

unity打包sdk热更新笔记

基础打包需要知识&#xff1a; 安装包大小不要超过2G&#xff0c;AB包数量过多会影响加载和构建&#xff0c;多次IO&#xff0c;用Gradle打包&#xff0c;要支持64位系统&#xff0c;不同的渠道包&#xff1a;让做sdk的人支持&#xff0c;提供渠道包的打包工具 配置系统环境变量…

论文笔记(六十一)Implicit Behavioral Cloning

Implicit Behavioral Cloning 文章概括摘要1 引言2 背景&#xff1a;隐式模型的训练与推理3 隐式模型与显式模型的有趣属性4 policy学习成果5 理论见解&#xff1a;隐式模型的通用逼近性6 相关工作7 结论 文章概括 引用&#xff1a; inproceedings{florence2022implicit,titl…

【Rust自学】12.3. 重构 Pt.1:改善模块化

12.3.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读取…

Vue2+OpenLayers调用WMTS服务初始化天地图示例(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、WMTS服务详解 四、完整代码 五、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、WMTS服务详解 WMTS&#xff08;Web Map Tile Service&#xff09;是一种标准的网络地图服务协议&#xff0c;用于提供基于…

【STM32-学习笔记-6-】DMA

文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…

lerna使用指南

lerna版本 以下所有配置命令都是基于v8.1.9&#xff0c;lerna v5 v7版本差别较大&#xff0c;在使用时&#xff0c;注意自身的lerna版本。 lerna开启缓存及缓存配置 nx缓存是v5版本以后才有的&#xff0c;小于该版本的无法使用该功能。 初始化配置 缓存配置文件nx.json&am…

html辅助标签与样式表

一、HTML其它常用标签 1.meta标签 &#xff08;1&#xff09;meta标签是一个特殊的HTML标签&#xff0c;提供有关网页的信息&#xff0c;如作者姓名、公司名称和联系信息等 &#xff08;2&#xff09;许多搜索引擎都使用meta标签 <head> <meta name"keyword…