`
bibithink
  • 浏览: 29857 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jedis Cluster 扩展方案

阅读更多

Infra Redis Client

Infra Redis client 基于 Jedis 实现了对 Redis 集群的访问封装。

Redis Client 能做什么?

Infra Redis client 提供如下特性:

  • 支持双机房集群 failover 方案
  • 支持以 pipeline 方式访问 Redis 集群
  • 支持 Redis 访问实时监测

怎么使用 Redis Client?

配置 maven 依赖:

<dependency>
    <groupId>com.city.infra</groupId>
    <artifactId>city-infra-redis</artifactId>
    <version>0.0.1</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

构造集群工厂类

public static RedisClusterFactory buildFactory() {
        RedisClusterFactory clusterFactory = new RedisClusterFactory();

        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7639));
        jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7640));

        Set<HostAndPort> standbyJedisClusterNodes = new HashSet<HostAndPort>();
        standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7543));
        standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7544));

        clusterFactory.setJedisClusterNodes(jedisClusterNodes);  //  设置主集群 
        clusterFactory.setStandbyJedisClusterNodes(standbyJedisClusterNodes);  //  设置备份集群

        return clusterFactory;
    }

访问 Redis 集群

RedisAccessor redisAccessor = clusterFactory.createRedisAccessor("prefix:");
redisAccessor.set("foo", "1", 3600);
String value = redisAccessor.get("foo", "0");

pipeline 访问方式

pipeline 是 Redis 提供的一种批量处理命令机制,可以一次发送多个命令而不用同步等待响应结果,可以显著提升 Redis 访问性能,非常适合离线批量导入数据的业务。

Jedis 对 Redis 集群不支持 pipeline 方式访问,Infra Redis client 通过 Java 反射机制复用了 Jedis 对 Redis 单实例 pipeline 实现,在 Redis 集群节点变更不频繁的情况下,可以提供很好的访问性能。

pipeline 使用代码示例如下:

RedisPipelineAccessor redisPipelineAccessor = clusterFactory.createRedisPipelineAccessor();
redisPipelineAccessor.set("pipe:", "foo", "1", 3600);
redisPipelineAccessor.set("pipe:", "bar", "2", 3600);
redisPipelineAccessor.sync();

监控 Redis 使用情况

在具体业务场景中,往往会对 Redis 的使用做一些规范,比如单个 key-value 的长度不能超过一定阈值,以防止对 Redis 的访问产生抖动。通过实现 RedisMonitor 接口,可以监控所有 Redis 访问情况。

为了使用方便,可以继承 RedisMonitorBase 类,选择业务感兴趣的事件监测,示例代码如下:

public static class CustomMonitor extends RedisMonitorBase {
        private static final Logger LOGGER = LoggerFactory.getLogger(CustomMonitor.class);
        private static final int MAX_VALUE_LEN = 1024 * 1024;

        @Override
        public void onWrite(String prefix, String key, String value) {
            if (value.length() > MAX_VALUE_LEN) {
                LOGGER.warn("Too large redis value! prefix=[{}], key=[{}], value=[{}]", prefix, key, value);
            }
        }
    }

在构造 Redis 集群工厂后,创建 Redis 访问对象前,设置自定义的监控对象到 Redis 集群工厂中:

public static RedisClusterFactory buildFactory() {
        RedisClusterFactory clusterFactory = new RedisClusterFactory();

        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7639));
        jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7640));

        Set<HostAndPort> standbyJedisClusterNodes = new HashSet<HostAndPort>();
        standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7543));
        standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7544));

        clusterFactory.setJedisClusterNodes(jedisClusterNodes);
        clusterFactory.setStandbyJedisClusterNodes(standbyJedisClusterNodes);
        clusterFactory.setRedisMonitor(new CustomMonitor());  //  设置访问监控对象

        return clusterFactory;
    }

 

github 项目地址:https://github.com/cityonsky/jedis-cluster-ext/tree/master/redis

 

分享到:
评论

相关推荐

    jedis单机版,集群版工具类

    **Jedis:Redis操作的Java库** ...正确理解和使用 Jedis 可以帮助我们构建高效、可扩展的 Redis 集成方案。在实际项目中,要根据需求选择合适的版本,并注意优化连接池和资源管理,以提高性能和稳定性。

    JedisCluster

    正确理解和使用JedisCluster,能够充分利用Redis Cluster的分布式特性,提升系统的可扩展性和可用性。在实际项目中,应根据具体需求调整配置,并注意潜在的限制和问题,以确保高效、稳定的数据操作。

    jfinal redis cluster plugin-JFinal redis cluster集群插件

    Redis Cluster 是Redis提供的分布式解决方案,它可以将数据分散存储在多个节点上,实现数据的自动分片,提供高可用性和水平扩展性。然而,对于想要在JFinal项目中利用Redis Cluster特性的开发者来说,这需要额外的...

    redisCluster集群demo

    Redis Cluster是Redis的分布式解决方案,它允许用户在多个节点间分散数据,以实现高可用性和水平扩展。在Java中操作Redis Cluster,我们需要了解以下几个关键知识点: 1. **Redis Cluster架构**: Redis Cluster...

    spring整合redis(spring模板+连接池+json序列化+cluster集群).zip

    Redis Cluster是Redis的分布式解决方案,它能自动分片数据并提供故障转移功能。在Spring中,我们可以使用`ClusterRedisConnectionFactory`来连接到Redis集群。配置时需要提供所有节点的IP和端口,以及集群的其他...

    jfinal redis cluster plugin-JFinal redis cluster集群插件 带连接池和Jedis包

    Cluster模式是Redis的一种分布式解决方案,可以将数据分散在多个节点上,提供高可用性和可扩展性。为了解决这个问题,有开发者自定义了一个JFinal Redis Cluster插件,虽然可能不够完善,但已经足够满足基本的使用...

    redis使用详解

    配置JedisCluster时,需要提供所有节点的IP和端口,以及集群的配置信息。使用JedisCluster进行操作时,客户端会自动路由到正确的节点执行命令。 在实践中,为了确保高可用性和性能,通常会结合Sentinel和Cluster...

    spring redis-cluster 整合

    &lt;bean id="jedisCluster" class="org.springframework.data.redis.connection.jedis.JedisCluster"&gt; &lt;property name="connectionFactory" ref="jedisCluster"/&gt; &lt;!-- 其他配置 --&gt; ``` 配置完成后,Spring ...

    25_你能聊聊redis cluster集群模式的原理吗?.zip

    例如,JedisCluster提供了连接池管理,自动处理节点间的通信和数据操作的转发。 六、注意事项 1. 配置时,至少需要三个节点才能构成一个基本的Redis Cluster,且推荐为奇数个节点以防止投票时出现平局。 2. 数据...

    jedis-cluster-setup-tool:用于基于Jedis设置Redis集群的轻量级库

    当需要搭建和管理 Redis 集群时,Jedis-Cluster-Setup-Tool 提供了便捷的解决方案。 **一、Jedis 介绍** Jedis 是一个用 Java 编写的 Redis 客户端,它提供了丰富的 Redis 命令支持,包括字符串、哈希、列表、集合...

    Redis连接测试工程,支持Sentinel和Cluster模式,可直接运行

    Java中,JedisCluster库用于与Redis Cluster通信,它能自动发现集群节点并均衡请求。工程中的代码展示了如何连接到Redis Cluster,并进行数据的插入和查询。 4. **数据读取和插入操作**:在这些模式下,工程可能...

    jedis-2.1.0-sources.jar

    7. **Cluster支持**:自Jedis 2.8版本起,开始支持Redis Cluster,可以连接到Redis集群并进行操作,实现了槽(Slot)的自动路由和数据分片。 8. **异常处理**:Jedis抛出一系列与Redis操作相关的异常,如`...

    tomcat8 Redis Cluster Session同步需要的jar

    文件名中的"redisclouder"可能是指用于操作或连接Redis Cluster的Java库,如JedisCluster或Lettuce,这些库可以帮助Tomcat8的Web应用与Redis Cluster进行通信,读取和写入session数据。 "tomcat8 session"则表明这...

    jedis-jedis-3.5.2.tar.gz

    通过深入理解和熟练运用这些知识点,开发者可以充分利用Jedis 3.5.2来构建高效、可靠的Redis集成解决方案。在实际项目中,结合具体需求,可以对Jedis进行二次开发,添加自定义逻辑或扩展功能,进一步提升应用性能。

    完整搭建redis-cluster

    Redis 是一个高性能的键值存储系统,而 Redis Cluster 是它的分布式解决方案,提供数据的自动分片、故障转移和高可用性。本指南将详细讲解如何完整地搭建一个 Redis Cluster,同时推荐配合网页教程进行操作以获得...

    redis cluster spring整合代码

    Redis Cluster是Redis的分布式解决方案,它提供了数据分片、故障转移和高可用性等功能。在大型系统中,单个Redis实例可能无法满足存储和性能需求,这时就需要利用Redis Cluster来扩展和分散负载。Redis Cluster通过...

    redis集群工具包和配置

    然后,通过`JedisCluster`类创建客户端实例,提供节点信息或使用`JedisSentinelPool`连接到Sentinel。 一旦集群配置完成,你可以使用Jedis进行数据的读写操作,享受Redis集群带来的高性能和高可用性。注意,由于...

    Redis架构演变与Redis-cluster群集读写方案

    Redis-cluster是近年来Redis架构不断改进中的相对较好的Redis高可用方案。...再通过官方文档以及互联网的相关技术文档,给出redis-cluster架构下的读写能力的优化方案,包括官方的推荐的扩展redis-cluster下的Maste

    redis + jedis

    集群功能(Redis Cluster)则允许你将数据分散在多个节点上,以提供更高的可用性和扩展性。 总的来说,Redis和Jedis的组合使得在Java应用中高效地使用Redis变得简单。无论是用于缓存、消息队列,还是复杂的数据结构...

    rediscluster.rar

    Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,实现高可用性和水平扩展。Redis Cluster不依赖外部协调服务,而是通过在每个节点上存储部分数据并维护集群状态来实现数据分布。...

Global site tag (gtag.js) - Google Analytics