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

Redis 入门与实践

1. Redis 基础概念

Redis(Remote Dictionary Server)是一个开源的基于内存的键值存储系统,具有非常高的读写性能,通常用于缓存、会话存储、消息队列等场景。与传统的关系型数据库相比,Redis 是一个非关系型数据库,具有以下特点:

  • 基于内存:Redis 将所有数据存储在内存中,提供了极快的读写速度,非常适合需要高性能的数据访问场景。

  • 数据持久化:虽然 Redis 是内存型数据库,但它支持数据的持久化(RDB 快照和 AOF 日志),可以定期将数据同步到磁盘中。

  • 丰富的数据类型:Redis 支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。

传统的磁盘型数据库由于数据存储在磁盘上,读写性能受限,而内存数据库则能够显著提高数据访问速度。Redis 的典型应用场景包括:

  • 缓存:将频繁访问的数据缓存到内存中,减少对磁盘的读写操作,加快响应速度。

  • 会话存储:将用户的会话信息存储在 Redis 中,方便快速读取和管理。

  • 消息队列:通过 Redis 的列表数据结构,可以实现简单的消息队列功能。

Redis 不仅在基础的键值存储和缓存方面表现出色,它的进阶应用包括事务、持久化、发布/订阅模式、Streams 消息队列、集群管理和 Lua 脚本等功能,使其在分布式系统、高并发场景下具有强大的灵活性和扩展性。

2. Redis 核心操作与 SQL 对比

Redis 的操作类似于 SQL 数据库中的基本操作,但 Redis 使用的是更简洁的命令格式。下面展示一些常用 Redis 命令以及它们与 SQL 的对比。

2.1. 设置键值对

1. Redis

SET key "value"

2. SQL

INSERT INTO table (key, value) VALUES ('key', 'value');

2.2. 获取键值

1. Redis

GET key

2. SQL

SELECT value FROM table WHERE key = 'key';

2.3. 删除键值

1. Redis

DEL key

2. SQL

DELETE FROM table WHERE key = 'key';

2.4. Redis 的多种数据类型

Redis 支持多种数据结构,以下是几个常见的数据类型和它们的基本操作。

2.4.1. 字符串

字符串是 Redis 中最基础的数据类型。可以是文本、数字或二进制数据。

1. 设置字符串

SET mykey "Hello, Redis"

2. 获取字符串

GET mykey

2.4.2. 哈希

哈希类似于 SQL 的表结构,它用于存储键值对集合。

1. 设置哈希

HSET user:1000 name "Alice" age 25

2. 获取哈希值

HGETALL user:1000

2.4.3. 列表

列表是按插入顺序存储的字符串序列,可以用作消息队列。

1. 向列表头部插入元素

LPUSH mylist "item1"

2. 从列表中弹出元素

LPOP mylist

2.4.4. 集合

集合是一个无序的字符串集合,支持集合间的并集、交集等操作。

1. 向集合添加元素

SADD myset "element1"

2. 获取集合中的所有元素

SMEMBERS myset

2.4.5. 有序集合

有序集合与集合类似,但每个元素会关联一个分数,Redis 会按照分数进行排序。

1. 添加元素到有序集合

ZADD myzset 1 "element1"

2. 获取有序集合中的所有元素

ZRANGE myzset 0 -1

3. 用户登录身份存储与 PostgreSQL 集成

在实际项目中,Redis 通常与持久化存储(如 PostgreSQL)一起使用。Redis 可以存储用户的登录状态或会话信息,而 PostgreSQL 则用于存储持久化的用户数据。

3.1. 使用 Redis 存储用户登录会话

在用户登录时,可以将用户的会话信息存储在 Redis 中,以实现快速的会话管理。

1. 设置用户会话

SET user:session:1234 "logged_in"

2. 获取用户会话

GET user:session:1234

3.2. 将 Redis 与 PostgreSQL 集成

我们可以结合 Redis 和 PostgreSQL 来实现用户登录时的身份验证和数据持久化。

1. 在 PostgreSQL 中存储用户的基础数据

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

2. 在 Redis 中存储用户的登录状态

SET user:1234:session "active"

3. 查询用户数据与会话状态

可以通过 Redis 提供快速的会话验证,同时通过 PostgreSQL 获取用户的详细数据。例如,当用户访问应用时,首先查询 Redis 是否存在会话信息,如果存在则直接从 PostgreSQL 获取用户的其他信息。

4. Redis 进阶应用

4.1. Redis 事务

Redis 提供了简单的事务支持,允许多个命令在事务中顺序执行,并保证命令要么全部执行,要么全部不执行。

Redis 的事务通过 MULTI 和 EXEC 来实现。

1. 使用示例

MULTI
SET key1 "value1"
SET key2 "value2"
EXEC

在事务中,可以连续执行多个命令,直到 EXEC 提交时,所有命令会按顺序执行。

2. 注意事项

  • Redis 的事务不支持回滚。如果某个命令执行失败,其他命令依然会执行。

  • 如果事务中的某些命令在 EXEC 时失败,Redis 只会返回错误,但不会中断其他命令的执行。

4.2. Redis 持久化

虽然 Redis 是一个内存数据库,但它支持将数据持久化到磁盘,避免数据丢失。Redis 提供了两种持久化方式:RDB快照和 AOF日志。

4.2.1. RDB 持久化

RDB 是将 Redis 数据快照保存为二进制文件的持久化方式,可以定期将数据写入磁盘。RDB 的优点是文件小,适合备份,但它不能实时保存数据。

1. 开启 RDB 持久化

可以通过 save 配置选项指定多久自动生成一次快照,例如:

save 900 1  # 每15分钟至少有1个更改时保存一次快照
save 300 10 # 每5分钟至少有10个更改时保存一次快照

2. 手动触发 RDB 保存

SAVE

4.2.2. AOF 持久化

AOF 是将每条写命令都记录到日志中的持久化方式。AOF 允许 Redis 通过重放日志文件来重建数据库,支持更高的实时性。

1. 开启 AOF 持久化

在 redis.conf 中设置:

appendonly yes

2. AOF 的三种同步策略

  • appendfsync always:每次写命令都立即同步到磁盘,性能较差,但最安全。

  • appendfsync everysec:每秒同步一次,权衡了性能与数据安全性。

  • appendfsync no:不强制同步,由操作系统自行决定何时将数据写入磁盘。

4.3. Redis 发布/订阅

Redis 提供了发布/订阅模式,允许消息发送者将消息发送到一个或多个通道,订阅者可以订阅这些通道来接收消息。

1. 发布消息

PUBLISH mychannel "Hello, Redis!"

2. 订阅频道

在另一个客户端中订阅该频道:

SUBSCRIBE mychannel

当 mychannel 上有新的消息发布时,订阅者会收到该消息。

4.4. Redis 流

Redis Streams 是 Redis 5.0 引入的一个新的数据结构,类似于消息队列。它允许生产者向流中追加消息,消费者从流中读取消息。与发布/订阅不同的是,Streams 可以保留消息历史,因此新加入的消费者可以读取以前的消息。

4.4.1. 创建和使用 Redis 流

1. 添加消息到流

XADD mystream * message "Hello World"

2. 读取消息

XREAD COUNT 2 STREAMS mystream 0

4.4.2. 消费者组

Redis Streams 支持消费者组,使得多个消费者可以同时处理消息,确保每条消息只被其中一个消费者处理。

1. 创建消费者组

XGROUP CREATE mystream mygroup $ MKSTREAM

2. 读取消息

XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream >

4.5. Redis 集群

Redis 集群是通过将数据分布在多个 Redis 实例上,来实现数据的高可用性和扩展性。Redis 集群支持自动分片,并在主节点出现故障时自动进行故障转移。

集群模式安装:

1. 使用 Docker 运行 Redis 集群模式

docker run -d --name redis-node1 redis --cluster-enabled yes --port 7000
docker run -d --name redis-node2 redis --cluster-enabled yes --port 7001
docker run -d --name redis-node3 redis --cluster-enabled yes --port 7002

2. 使用 redis-cli 命令创建集群

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1

集群模式下,Redis 将自动管理数据分片和复制,确保系统的高可用性。

http://www.dtcms.com/a/392387.html

相关文章:

  • 【OpenGL】texture 纹理
  • agentscope以STUDIO方式调用MCP服务
  • 无公网 IP 访问群晖 NAS:神卓 N600 的安全解决方案(附其他方法风险对比)
  • Redis最佳实践——性能优化技巧之Pipeline 批量操作
  • Java-130 深入浅出 MySQL MyCat 深入解析 核心配置文件 server.xml 使用与优化
  • 业主信息查询功能测试指南
  • WinDivert学习文档之四-————卸载
  • 分布式链路追踪关键指标实战:精准定位服务调用 “慢节点” 全指南(二)
  • DuckDB客户端API之ADBC官方文档翻译
  • 区块链技术应用开发:智能合约进阶与多链生态落地实践
  • 分布式专题——13 RabbitMQ之高级功能
  • 神经风格迁移(Neural Style Transfer)
  • Chromium 138 编译指南 Ubuntu 篇:源码获取与版本管理(四)
  • R 语言入门实战|第九章 循环与模拟:用自动化任务解锁数据科学概率思维
  • [论文阅读] 人工智能 + 软件工程 | 4907个用户故事验证!SEEAgent:解决敏捷估计“黑箱+不协作”的终极方案
  • 鸿蒙Next ArkTS卡片开发指南:从入门到实战
  • 【绕过disable_function】
  • 使用云手机运行手游的注意事项有哪些?
  • 【数据结构】利用堆解决 TopK 问题
  • 2025陇剑杯现场检测
  • openharmony之充电空闲状态定制开发
  • 【开题答辩全过程】以 python的线上订餐系统为例,包含答辩的问题和答案
  • (附源码)基于Spring Boot的校园心理健康服务平台的设计与实现
  • 微信小程序开发教程(十八)
  • 寰宇光锥舟架构图
  • Spring Bean生命周期全面解析
  • [vibe code追踪] 侧边栏UI管理器 | showSidebarContent
  • 嵌入式ARM架构学习9——IIC
  • 多线程——线程安全的练习加感悟
  • 使用 TwelveLabs 的 Marengo 视频嵌入模型与 Amazon Bedrock 和 Elasticsearch