acl 框架中的 Redis 库已经支持集群版 Redis 3.0

简介:

据 redis 官方网站显示,支持集群版的 redis3.0 快要发布了(现在已经到了redis3.0 rc4 版本),这样使用者就不需要自己花很大力气来针对 redis 进行分库了,之前人们为了使单机版的 redis 能支持集群方式,往往是在客户端或通过加一个中间的代理层(比如使用 tweaproxy)做很多工作,现在有了集群版的 redis3.0 ,这些额外的操作都不再需要。

为了能够支持集群版的 redis 服务,另外增加了两个主要的重定向指令需要客户端能够支持:MOVE, ASK。其中以 MOVE 指令为例,之所以增加此重定向指令,主要是考虑效率的因素,redis-server 集群以哈希槽的方式存放数据(目前最大是 16384 个哈希槽),各个 redis-server 结点都会记录着每个哈希槽所在的最终结点的位置,所以当 redis 客户端访问一个 redis-server 时,如果该服务结点在计算完哈希槽后发现该哈希槽在别的服务结点上,则会给客户端返回一个重定向指令(如:MOVE hash_slot ip:port),客户端在获得此重定向指令后会去连接最终的服务结点;另外,不了尽量减少重定向次数(有利于提高处理效率),官方协议文档中建议客户端应该缓存住哈希槽的存储位置。

虽然集群版本的 redis3.0 即将发布,但目前主要的问题是缺乏客户端的支持(目前据说可以支持的只有少数的几个客户端库:象JAVA版的 jedis,ruby 版本),尤其是 C/C++ 客户端库更是匮乏,好消息是 acl 库中的 redis 客户端模块已经很好地支持集群 redis3.0 了,该库不仅支持 redis 的重定向指令及哈希槽的自动缓存及自动更新功能,同时还支持 redis 服务结点自动发布机制,即在初始 acl redis 客户端库时只需添加 一个或多个 redis 服务器结点地址,在运行过程中会根据服务器返回的重定向信息动态添加新的 redis 服务器结点。下面是使用 acl redis 库集群版本的例子:

#include "acl_cpp/lib_acl.hpp"

static void test_redis_string(acl::redis_string& cmd, const char* key)
{
    acl::string val("test_value");

    // 向 redis 集群中添加一条字符串类型的数据对象
    // 对应的 redis 命令:SET key value
    if (cmd.set(key, val.c_str()) == false)
    {
        printf("redis set error\r\n");
        return;
    }
    else
        printf("redis set ok\r\n");

    // 清除缓冲区
    val.clear();

    // 重置 redis 客户端命令的状态,以便可以复用该操作对象
    cmd.reset();

    // 从 redis 集群中获取指定键值的数据
    if (cmd.get(key, val) == false)
        printf("get key error\r\n");
    else
        printf("get key ok, value: %s\r\n", val.c_str());

}

static void test_redis_key(acl::redis_key& cmd, const char* key)
{
    // 查询给定键在 redis 服务端是否存在
    if (cmd_key.exists(key) == false)
        printf("key not exists\r\n");
    else
        printf("key exists\r\n");
}

int main(void)
{
    const char* redis_addr = "127.0.0.1:6379";
    int conn_timeout = 10, rw_timeout = 10, max_conns = 100;

    // 定义 redis 客户端集群管理对象
    acl::redis_cluster cluster;
    // 添加一个 redis 服务结点,可以多次调用此函数添加多个服务结点,
    // 因为 acl redis 模块支持 redis 服务结点的自动发现及动态添加
    // 功能,所以添加一个服务结点即可
    cluster.set(redis_addr, max_conns);

    // redis 字符串类 (STRING) 操作对象
    acl::redis_string cmd_string;

    // redis 键值类(KEY) 操作对象
    acl::redis_key cmd_key;

    // 给 redis 操作对象绑定 redis 客户端集群对象
    cmd_string.set_cluster(&cluster, max_conns);
    cmd_key.set_cluster(&cluster, max_conns);

    const char* key = "test_key";

    // redis 集群命令操作的测试过程

    test_redis_string(cmd_string, key);
    test_redis_key(cmd_key, key);

    return 0;
}

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
12月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
779 2
|
11月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
536 86
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1988 0
分布式爬虫框架Scrapy-Redis实战指南
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1223 5
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
939 6
|
11月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
404 5
|
12月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
缓存 NoSQL Java
Redis应用—8.相关的缓存框架
本文介绍了Ehcache和Guava Cache两个缓存框架及其使用方法,以及如何自定义缓存。主要内容包括:Ehcache缓存框架、Guava Cache缓存框架、自定义缓存。总结:Ehcache适合用作本地缓存或与Redis结合使用,Guava Cache则提供了更灵活的缓存管理和更高的并发性能。自定义缓存可以根据具体需求选择不同的数据结构和引用类型来实现特定的缓存策略。
1150 16
Redis应用—8.相关的缓存框架
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构