当前位置: 首页 > news >正文

在 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.lryc.cn/news/520739.html

相关文章:

  • Excel中双引号问题
  • 【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
  • elementUI项目中,只弹一个【token过期提示】信息框的处理
  • SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
  • 【LLM】25.1.11 Arxiv LLM论文速递
  • 单片机实物成品-012 酒精监测
  • 使用葡萄城+vue实现Excel
  • 【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
  • 跟我学C++中级篇——字节序
  • Linux网络编程5——多路IO转接
  • Redis常见
  • 提升 PHP 编码效率的 10 个实用函数
  • 设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
  • golang之数据库操作
  • 对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
  • Mac 删除ABC 输入法
  • 《机器学习》之K-means聚类
  • 日常工作之 Elasticsearch 常用查询语句汇总
  • WeakAuras NES Script(lua)
  • JVM 触发类加载的条件有哪些?
  • Android实战经验篇-增加系统分区
  • 深入学习 Python 量化编程
  • 机器学习笔记——特征工程
  • 4种革新性AI Agent工作流设计模式全解析
  • 【入门级】计算机网络学习
  • 安装 Jenkins 后无法访问用户名或密码且忘记这些凭证怎么办?
  • day08_Kafka
  • 安装conda 环境
  • 【dockerros2】ROS2节点通信:docker容器之间/docker容器与宿主机之间
  • 使用外网访问在群晖中搭建思源docker