阿里云 Redis 缓存数据库教程:Tair 实例选型、架构配置与连接使用

阿里云 Redis

阿里云的 Redis 托管服务现在统一以「云数据库 Tair(兼容 Redis®)」名称对外提供,支持 Redis 开源版和 Tair 企业版两种内核,底层完全兼容 Redis 协议,现有使用 Redis 的应用代码无需修改即可直接连接。

Redis 在 Web 应用架构中通常扮演两类角色:一是作为数据库查询结果的缓存层,将高频查询结果存入 Redis,应用直接从内存读取,绕过数据库,降低延迟和数据库压力;二是作为会话存储、消息队列、分布式锁、排行榜等需要高频读写且对延迟敏感的业务数据存储。与在 ECS 上自装 Redis 相比,Tair 的全托管模式省去了主从复制配置、备份策略和版本升级等运维工作,高可用架构由阿里云负责维护。

Redis 开源版 vs Tair 企业版

创建实例时需要在 Redis 开源版和 Tair 企业版之间做出选择,两者完全兼容 Redis 协议,对应用代码没有影响,差别在性能上限和功能深度。

Redis 开源版基于 Redis 社区版代码进行强化,采用 Redis 的原生单线程模型,在标准使用场景下足够稳定,适合 QPS 在 10 万以内的业务。功能覆盖 Redis 的全部标准数据类型(String、Hash、List、Set、Sorted Set、Stream 等)和命令,与自建 Redis 的行为高度一致。

Tair 企业版是阿里云自研的企业级内存数据库,从 2009 年开始在阿里集团内部使用,历经天猫双十一、优酷春晚等场景考验。Tair 内存型采用多线程模型,读写性能约为同规格 Redis 开源版的 3 倍,同时提供 Redis 开源版不具备的扩展数据类型(exHash、TairString、TairZset 等)和内置的大 Key 热 Key 检测能力。

Tair 企业版还按存储介质细分为三种形态:内存型(DRAM,最高性能,适合高频缓存)、持久内存型(NVM,持久化加速)、容量存储型(ESSD 云盘,成本最低,适合大容量冷缓存场景)。三种形态都可以在实例创建时选择,后续支持在线变配。

从 Redis 开源版迁移到 Tair 企业版,基础命令不需要任何修改,Tair 100% 兼容 Redis 协议,任何原生 Redis 客户端都可以直接连接。只有主动使用 Tair 特有的扩展数据类型时,才需要引入 Tair 专用客户端。

三种架构类型的选型判断

架构选型是实例创建时最重要的决定,直接决定了实例的性能上限和高可用能力。

标准架构(主备版)

标准架构提供 1 主 1 备的高可用配置,主节点处理所有读写请求,备节点实时同步数据,主节点发生故障时自动切换到备节点,切换过程客户端无需更改连接地址,通常在数秒内完成。

标准架构(高可用版)是大多数业务的合理起点,适合 QPS 在 10 万以下、数据量在单节点容量上限以内的场景,包括 Web 应用的 Session 存储、数据库查询结果缓存、短时效数据存储。

需要注意的是,标准架构还有一种单节点模式,没有备节点,没有高可用保障,节点故障时数据全部丢失。单节点架构成本更低,但只适合开发测试环境,生产业务不应使用单节点实例。

集群架构

集群架构将数据按 Key 分布在多个分片(Shard)上,每个分片是一个独立的主备节点对。通过增加分片数量可以线性扩展读写吞吐量和数据容量,突破单节点 CPU 和内存的上限。

集群架构适合以下场景:QPS 持续超过 10 万、业务需要的内存容量超过单节点规格上限、或者 CPU 使用率持续偏高且应用以计算密集型命令为主。集群架构的分片数从 2 个到 256 个可选,创建时根据预估的数据量和 QPS 选择合适的分片数,后续支持在线扩容分片。

集群架构在使用上有一个限制:跨多个 Key 的事务操作(MULTI/EXEC)和部分 Lua 脚本在集群模式下受到约束,涉及的 Key 必须在同一分片上才能正确执行。如果业务有跨 Key 事务需求,应提前验证兼容性,或者选择 Tair 企业版(解除了部分集群限制)。

读写分离架构

读写分离架构在标准主备节点的基础上,增加多个只读节点,只读节点从主节点同步数据。写请求发送到主节点,读请求由 Tair 的代理层自动路由到只读节点,应用不需要修改连接地址或代码。

读写分离适合读写请求比例严重不均衡的场景:用户信息查询、商品详情、文章内容等读请求远多于写请求的业务。通过增加只读节点扩展读吞吐量,成本低于扩容整个集群。

架构类型适合 QPS数据量高可用事务支持
标准架构(主备)<10 万单节点上限内自动切换完整
集群架构>10 万可水平扩展分片级高可用有限制
读写分离读高写低单节点上限内自动切换完整

创建实例与关键配置项

在阿里云控制台搜索「云数据库 Tair」,进入后点击「创建实例」,关键配置项如下:

内核和形态: 选择 Redis 开源版或 Tair 内存型。新建业务且 QPS 要求高的选 Tair 内存型,对成本更敏感的标准业务选 Redis 开源版即可。

架构类型: 根据上文的选型判断确认标准架构还是集群架构。生产环境务必选高可用版(主备),不要选单节点。

版本: 建议选 Redis 6.0 及以上版本,6.0 版本在 ACL 权限控制和客户端连接数管理上有改进,长期维护支持更好。

规格容量: 根据预估的数据量和连接数选择内存规格。建议实际使用量不超过规格容量的 80%,留出一定余量应对流量峰值和数据增长。规格支持在线升降配,不需要停机,可以从较小规格开始,根据实际使用情况调整。

VPC 和交换机: 必须和需要连接的 ECS 应用服务器选择相同的 VPC,才能通过内网地址连接。同一 VPC 下不同交换机的 ECS 和 Redis 同样可以内网互通,交换机不需要完全一致。创建后 VPC 不能修改,选错后只能重建实例迁移数据。

关于 ECS 实例的 VPC 配置和安全组设置,可以参考 阿里云 ECS 完整教程的网络配置部分。

连接实例:白名单配置与客户端连接

配置 IP 白名单

Tair 实例默认拒绝所有 IP 的连接,必须将允许访问的 IP 地址加入白名单。在控制台实例详情页的「安全」→「白名单设置」中,添加 ECS 实例的内网 IP 地址。

生产环境应只添加应用服务器的内网 IP,不要将白名单设置为 0.0.0.0/0(允许所有 IP)。Redis 协议没有强制 TLS 加密,将 Redis 端口暴露在公网存在数据泄露风险。

使用 redis-cli 连接

# 使用内网地址连接(ECS 和 Redis 在同一 VPC 内)

redis-cli -h r-xxxxxx.redis.rds.aliyuncs.com -p 6379 -a your_password

# 连接成功后验证

127.0.0.1:6379> PING

PONG

# 查看实例中 Key 的数量

127.0.0.1:6379> DBSIZE

Python 客户端连接

import redis

# 创建连接池(生产环境推荐使用连接池)

pool = redis.ConnectionPool(

    host=’r-xxxxxx.redis.rds.aliyuncs.com’,

    port=6379,

    password=’your_password’,

    decode_responses=True,

    max_connections=50

)

r = redis.Redis(connection_pool=pool)

# 基础操作验证

r.set(‘test_key’, ‘hello_tair’, ex=3600)  # ex=3600 设置 TTL 为 1 小时

value = r.get(‘test_key’)

print(value)  # 输出: hello_tair

连接池配置是生产环境的标准实践。 每次创建新连接都有开销,连接池复用已有连接,减少延迟和服务端连接数压力。max_connections 参数应根据应用的并发量和实例规格的最大连接数上限综合设置。

常见业务场景的 Redis 操作

数据库查询结果缓存

将数据库查询结果缓存到 Redis,应用优先读缓存,缓存未命中时再查询数据库并写入缓存:

import json

def get_product(product_id):

    cache_key = f”product:{product_id}”

    cached = r.get(cache_key)

    if cached:

        return json.loads(cached)

    # 缓存未命中,查询 RDS

    product = db.query(

        “SELECT * FROM products WHERE id = %s”,

        product_id

    )

    # 写入缓存,设置 30 分钟过期

    r.setex(cache_key, 1800, json.dumps(product))

    return product

合理设置 TTL(过期时间)是缓存设计的关键。TTL 太短,缓存命中率低,数据库仍然承压;TTL 太长,数据与数据库不一致的窗口期变长。业务数据更新频率低的选较长 TTL,实时性要求高的选较短 TTL 或在数据更新时主动删除对应缓存。关于 RDS 数据库的配置和连接方式,可以参考 阿里云 RDS 数据库指南。

分布式 Session 存储

多台 ECS 实例组成的集群,用户登录状态存储在某台实例本地内存中,下次请求如果打到其他实例就需要重新登录。将 Session 存储在 Redis 中,所有 ECS 实例共享同一 Session 存储,用户请求可以被负载均衡器分发到任意实例而不影响登录状态:

import secrets

def create_session(user_id):

    session_id = secrets.token_hex(32)

    session_data = {

        ‘user_id’: user_id,

        ‘created_at’: int(time.time())

    }

    # Session 存入 Redis,设置 24 小时过期

    r.setex(

        f”session:{session_id}”,

        86400,

        json.dumps(session_data)

    )

    return session_id

def get_session(session_id):

    data = r.get(f”session:{session_id}”)

    return json.loads(data) if data else None

有序集合实现实时排行榜

Sorted Set(有序集合)是 Redis 为排行榜场景设计的数据结构,每个成员关联一个分数,按分数自动排序,支持范围查询:

# 更新用户积分

r.zadd(‘game:leaderboard’, {‘user_001’: 9850})

r.zadd(‘game:leaderboard’, {‘user_002’: 12300})

r.zadd(‘game:leaderboard’, {‘user_003’: 8760})

# 获取前 10 名(分数从高到低)

top10 = r.zrevrange(‘game:leaderboard’, 0, 9, withscores=True)

for rank, (user, score) in enumerate(top10, 1):

    print(f”第 {rank} 名: {user} – {score} 分”)

# 查询特定用户的排名

rank = r.zrevrank(‘game:leaderboard’, ‘user_001’)

print(f”user_001 当前排名: 第 {rank + 1} 名”)

大 Key 和热 Key 的排查

大 Key(单个 Key 的 Value 体积过大)和热 Key(单个 Key 被极高频率访问)是 Redis 最常见的性能问题来源,Tair 内置了对应的检测工具。

大 Key 会在序列化和网络传输时消耗大量时间,导致其他命令被阻塞(Redis 单线程处理命令)。典型的大 Key 场景:将整个用户购物车序列化为一个 JSON 字符串存入 String 类型;将大量数据存入一个 Hash 或 List。处理方式是拆分大 Key——将单个大 Value 拆成多个小 Key,或者使用适合的数据类型(Hash 代替 String 存储结构化数据)。

在阿里云 Tair 控制台进入「大 Key 分析」,可以扫描实例中 Value 体积最大的前 N 个 Key,以及各数据类型中成员数量最多的 Key,辅助定位需要优化的位置。

热 Key 是某个 Key 被高频访问,所有请求都打到同一个分片(集群架构下)或同一个节点,CPU 成为单点瓶颈。处理方式是在应用层增加本地缓存(Java Caffeine、Guava Cache 等),热 Key 的读请求先查本地内存,大幅减少到 Redis 的请求次数;或者将热 Key 拆分为多个副本(key_1、key_2…key_n),请求随机分配到不同副本,分散单 Key 的访问压力。Tair 控制台的「热 Key 分析」提供实时的 Top Key 统计,帮助在问题发生前提前发现热 Key。

计费方式

Tair 实例支持包年包月和按量付费两种计费模式。包年包月按购买时长享受阶梯折扣,购买时长越长折扣越大,适合长期稳定运行的生产 Redis;按量付费按小时计费,适合短期测试或流量不确定的场景。

实例规格费之外可能产生的附加费用:备份存储超出免费额度后按实际使用量计费;开启审计日志功能会产生额外费用;手动升级实例带宽同样计费。这三项在初始配置时容易被忽略,建议在成本估算时一并纳入。

账号开通与代理充值

使用阿里云 Tair Redis 需要有效的阿里云国际版账号,Tair 实例在控制台直接创建,不需要额外审批。通过 阿里云账号出售 渠道获取的高权重账号,ECS 和 Tair 配额均更宽松,1 分钟交付,免实名免绑卡。

对于同时运行 ECS、RDS 和 Tair 的业务,月均阿里云消耗通常在 $300 以上,通过 阿里云国际合作伙伴 充值可以获得赠金返点($100 到账 $110,$500 到账 $600,$1000 到账 $1250),赠金适用于 Tair 实例费和所有关联资源,年度实际成本明显低于官网直充,付款支持 USDT 和对公转账。

滚动至顶部