缓存(Caching)是一种强大的工具,工程师可以借此快速存储和访问数据。通过缓存,工程师能够扩展数据源的能力、缓解不可预测的工作负载峰值,并在外部数据源发生故障时继续提供数据,从而提升应用的可用性。
在分布式缓存的常见使用场景中,通常包括:
-
存储与检索高可扩展 Web 服务中的用户会话数据;
-
在关系型或非关系型数据库前部署缓存层,以加速查询并避免主数据库过载。
Redis 是一个开源的 NoSQL 数据存储系统,广泛被用作分布式缓存解决方案,在 AWS 大数据与数据库架构中占据重要地位。
本文将深入探讨 Redis 以及如何在 AWS 上使用 ElastiCache Redis 部署,以便在项目中充分利用分布式缓存的低延迟与高性能特性。
什么是 Redis?
Redis 是一个开源的内存数据结构缓存与存储系统,由 Redis 社区持续开发与维护。它被广泛用作高速内存数据库或应用缓存。Redis 的独特之处在于,它既可以充当缓存,也可以作为数据库使用。
Redis 将数据集存储在内存中,仅在需要持久化或重启后恢复时才写入磁盘。这种方式使 Redis 在读写操作中可实现毫秒级延迟,并支持多种数据结构、内置复制与集群功能。
从运维角度看,Redis 的部署、监控和扩展可能具有一定挑战性。不过,借助托管服务(如 AWS ElastiCache for Redis),可以显著简化这些工作。
什么是 Amazon ElastiCache for Redis?
AWS ElastiCache 是一项支持 Redis 与 Memcached 的托管缓存服务。对于 Redis 而言,ElastiCache 提供了一个全托管的平台,方便用户快速部署、管理与扩展高性能的分布式内存数据存储集群。
该服务极大减少了机器维护、软件补丁、监控、故障恢复与备份等运维负担。ElastiCache 与原生 Redis 的数据结构、API 及客户端完全兼容,因此现有 Redis 应用无需改动代码即可迁移使用。
ElastiCache 支持集群模式与非集群模式,可通过自动故障转移提升高可用性与可靠性,并支持跨可用区部署。借助在线集群调整功能,用户可在无停机的情况下按需扩容或缩容。
在安全性方面,ElastiCache 内置 VPC 支持,并提供传输中与静态数据加密,同时兼容 Redis 的 AUTH 认证机制。
如何开始使用 Amazon ElastiCache for Redis
步骤 1:配置 AWS 环境
在使用 ElastiCache for Redis 之前,需要先准备 AWS 环境:
-
部署 EC2 实例:
该实例将用于运行示例 Web 应用。为简化配置,可将 EC2 与 ElastiCache 集群部署在同一 VPC。
详情可参考 AWS 官方文档中的 EC2 创建流程。 -
复制 EC2 公网 IPv4 DNS 地址,后续访问示例应用时会用到。
-
配置安全组规则:
-
允许来自相同安全组的 Redis 默认端口(6379)访问;
-
允许来自任意 IP(0.0.0.0/0)的 TCP 5000 端口访问,以便从本地电脑访问 Web 应用。
-
步骤 2:创建 AWS ElastiCache Redis 集群
-
打开 ElastiCache 控制台,点击“Get Started Now”。确保选择的区域(Region)与 EC2 实例相同。
-
创建新集群,选择 Redis 作为引擎。如果需要横向扩展,可启用 Cluster Mode(支持多达 500 个主节点)。
-
选择默认的可用区位置,并为集群命名(例如
elasticache-redis)。 -
选择实例类型,例如 cache.t2.micro(可免费层使用)。
-
可保留默认配置,也可根据需求调整引擎版本、多副本与多可用区等选项。
-
在 Advanced Settings 中创建新的子网组(Subnet Group),确保选择与 EC2 相同的 VPC。
-
在 Security 面板中,选择与 EC2 相同的安全组。
-
可关闭自动备份选项(本示例不需要)。
-
检查配置后点击 Create。
-
创建完成后,在控制台复制 Primary Endpoint 地址,后续 Web 应用将使用它连接 Redis。
步骤 3:将 Redis 用作 Web 应用的会话存储
Redis 常被用于可扩展 Web 应用的会话管理场景,用于存储与维护用户会话数据。以下示例展示如何将 Redis 用作 Flask 应用的会话存储。
-
SSH 连接 EC2 实例,执行以下命令安装依赖:
sudo yum install git -y
sudo yum install python3 -y
sudo pip3 install virtualenv
git clone https://github.com/aws-samples/amazon-elasticache-samples/
cd amazon-elasticache-samples/session-store
virtualenv venv
source ./venv/bin/activate
pip3 install -r requirements.txt
-
设置环境变量:
export REDIS_URL="redis://<你的Primary Endpoint>"
export FLASK_APP=example-4.py
export SECRET_KEY=some_random_value
-
运行 Flask 应用:
flask run -h 0.0.0.0 -p 5000 --reload
打开浏览器访问
http://<EC2-Public-DNS>:5000,可看到默认的三个端点:/、/login、/logout。登录后刷新页面可看到访问次数增加,若 10 秒内未刷新,计数器会重置。
应用在登录时会为用户生成唯一 Redis 键来保存会话数据,并设置 TTL(10 秒),到期后自动清除。
总结
实施缓存方案能显著提升云原生应用的整体性能,并降低访问延迟带来的成本与低效。
使用 AWS ElastiCache for Redis,可同时享受 Redis 的速度、简洁与灵活性,并借助 AWS 的托管优势降低运维负担。
此外,结合 NetApp Cloud Volumes ONTAP,可在 AWS、Azure 和 Google Cloud 上获得企业级存储管理能力,支持高可用性、数据保护、Kubernetes 集成等特性。
对于在云中运行的 NoSQL 数据库或大数据分析集群,它还可用于提供持久化的磁盘数据支持,使复杂 Redis 集群的存储管理更加高效。

