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

redis cluster jedis client 示例

 
阅读更多

redis cluster 基本的redis操作示例:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
JedisCluster jc = null;
    @Before
    public void before(){
        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        //Jedis Cluster will attempt to discover cluster nodes automatically
        jedisClusterNodes.add(new HostAndPort("127.0.0.1"7000));
        jc = new JedisCluster(jedisClusterNodes);
    }
    @Test
    public void test_incr(){
          
        String key = "page_view";
        jc.del(key);
        jc.incr(key);
        String result = jc.get(key);
        System.out.println(result);
        Assertions.assertThat(result).isEqualTo(1+"");
    }
    @Test
    public void test_setAndGetStringVal(){
        String key = "foo";
        String value = "bar";
        jc.set(key, value);
        String result = jc.get(key);
        System.out.println(result);
        Assertions.assertThat(result).isEqualTo(value);
    }
    @Test
    public void test_setAndGetStringVal_and_set_expire() throws InterruptedException{
        String key = "hello";
        String value = "world";
        int seconds = 3;
        jc.setex(key, seconds , value);
        String result = jc.get(key);
        System.out.println(result);
        Assertions.assertThat(result).isEqualTo(value);
        Thread.sleep(seconds*1000);
        result = jc.get(key);
        System.out.println(result);
        Assertions.assertThat(result).isNull();
          
    }
    @Test
    public void test_setAndGetHashVal(){
          
        String key = "website";
        String field= "google";
        String value = "google.com";
        jc.del(key);
        jc.hset(key, field, value);
        String result = jc.hget(key, field);
        System.out.println(result);
        Assertions.assertThat(result).isEqualTo(value);
    }
    @Test
    public void test_setAndGetListVal(){
          
        String key = "mylist";
        jc.del(key);
        String[] vals = {"a","b","c"};
        jc.rpush(key, vals);
        List<String> result = jc.lrange(key, 0, -1);
        System.out.println(result);
        Assertions.assertThat(result).containsExactly(vals);
    }
    @Test
    public void test_setAndGetSetVal(){
          
        String key = "language";
        jc.del(key);
        String[] members = {"java""ruby""python"};
        jc.sadd(key, members);
        Set<String> result = jc.smembers(key);
        System.out.println(result);
        Assertions.assertThat(result).containsOnly(members);
    }

 

演示主从切换时的jedis操作情景:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
JedisCluster jc = null;
    @Before
    public void before(){
        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        //Jedis Cluster will attempt to discover cluster nodes automatically
        jedisClusterNodes.add(new HostAndPort("127.0.0.1"7000));
        jc = new JedisCluster(jedisClusterNodes);
    }
    /**
     * 在一个无限循环中不停的读写
     * @throws InterruptedException
     */
    @Test
    public void setAndWriteStringValueRepeatedly() throws InterruptedException{
        String key = "test_oper_during_failover";
        jc.del(key);
        long failureTime = 0;
        long recoveryTime = 0;
        while(true){
            try {
                String result = jc.get(key);
                if(failureTime != 0 && recoveryTime==0){
                    recoveryTime =  System.currentTimeMillis();
                    System.out.println("Cluster is recovered! Downtime lasted "+(recoveryTime-failureTime)+" ms");
                }
                      
                System.out.println(result);
                jc.set(key, System.currentTimeMillis()+"");
                  
            catch (Exception e) {
                if(failureTime==0)
                    failureTime=System.currentTimeMillis();
                e.printStackTrace();
            }
            Thread.sleep(1000);
        }
          
    }

 

输出:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
null
1430663109857
1430663110860
......
redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException: Too many Cluster redirections?
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:37)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:70)
    ...
...
redis.clients.jedis.exceptions.JedisClusterException: CLUSTERDOWN The cluster is down
    at redis.clients.jedis.Protocol.processError(Protocol.java:111)
    at redis.clients.jedis.Protocol.process(Protocol.java:138)
    ...
Cluster is recovered! Downtime lasted 7089 ms
1430663137897
1430663146602
...

 

pom.xml:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<properties>
        <junit.version>4.11</junit.version>
        <assertj.version>1.7.0</assertj.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- assertj -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

 

参考:

 

https://github.com/xetorthio/jedis

 

 

问题:

 

  1.  hostandport 只需要指定一个 host ip和端口?其他的都直接由rediscluster去获取是吧?

     

    摘自http://redis.io/topics/cluster-tutorial

    此段话是针对ruby client的, 但是我想应该也适用于jedis。

 

1
2
3
4
5
6
 3  startup_nodes = [
     4      {:host => "127.0.0.1", :port => 7000},
     5      {:host => "127.0.0.1", :port => 7001}
     6  ]
  
The startup nodes don't need to be all the nodes of the cluster. The important thing is that at least o

http://my.oschina.net/zhuguowei/blog/411077

 

分享到:
评论

相关推荐

    各种版本的redis+Jedis驱动包

    在这个压缩包中,包含了不同平台下的Redis安装包,以及Jedis驱动,这使得在Windows和Linux环境下都能轻松地使用Redis。 首先,让我们详细了解Redis的不同版本: 1. **Redis Windows 32位与64位安装包**:Redis原本...

    linux中安装redis和jedis及jedispool

    linux中安装redis和jedis及jedispool; redis安装所遇到的问题;

    Redis和Jedis示例代码

    Jedis示例java编程相关代码适合java初学者使用,可熟悉redis缓存相关的操作,以及java编码基于springboot和jedis访问redis服务进行key/value键值对存储和获取附带redis环境安装教程,以及redis入门的介绍教程。...

    redisCluster集群demo

    在`redisCluster-demo`这个项目中,你可以期待找到一个使用Java实现的示例,展示如何配置和使用`JedisCluster`或者`Lettuce`来连接Redis Cluster,以及如何进行基本的数据操作。这个示例可以帮助初学者理解如何在...

    redis,jedis 需要的jar包

    使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar

    RedisCluster集群(Spring访问Redis)

    **RedisCluster集群与Spring访问Redis详解** Redis是一个高性能的键值数据库,广泛应用于缓存、消息中间件等场景。在大型分布式系统中,为了提供高可用性和数据冗余,我们通常会采用Redis Cluster来构建集群。本文...

    rediscluster.rar

    Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,从而实现高可用性和水平扩展。本文将详细介绍Redis Cluster的工作原理、配置、使用以及与MySQL数据库的配合。 **一、Redis ...

    spring boot redis-jedis

    本篇文章将深入探讨如何在Spring Boot项目中集成Redis,并使用Jedis客户端进行操作。 首先,我们要在Spring Boot项目中引入Redis和Jedis的依赖。在`pom.xml`文件中,我们需要添加以下依赖: ```xml &lt;groupId&gt;org...

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

    使用JFinal Redis Cluster插件时,首先需要将其引入到项目中,这里我们看到有一个名为 "jfinal-rediscluster-plugin-by-shixiaotian-0.0.1.jar" 的文件,这应该是该插件的可执行版本。通常,开发者会将这个JAR文件...

    征服 Redis + Jedis

    7. **集群支持**:当数据量增大时,可以使用Redis Cluster进行分布式部署,Jedis也提供了对Cluster的支持,如`JedisCluster`类。 在实际应用中,我们还需要关注以下几点: - **错误处理**:对可能出现的网络异常、...

    rediscluster配置文件.zip

    9. **客户端连接**:连接到Redis Cluster时,客户端需要支持Cluster模式,例如Jedis或RediStack等。 10. **监控与维护**:定期检查节点状态,使用`CLUSTER NODES`命令查看节点信息,确保没有孤立节点或无法达到的...

    redis cluster spring整合代码

    6. **数据分布与槽管理**:由于是关于Redis Cluster的示例,所以代码可能包含了如何在多节点之间分配和操作槽的逻辑,以及如何确保数据一致性。 7. **异常处理**:由于分布式系统可能出现网络故障或节点故障,所以`...

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

    标题中的“jfinal redis cluster plugin”指的是一个专为JFinal框架设计的Redis集群插件,旨在帮助开发者在使用JFinal时能便捷地接入并管理Redis集群。JFinal是一款基于Java的轻量级Web开发框架,它以其简洁的API...

    redis相关jar包(redis2.1.5、jedis2.9.0)

    在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。本文将深入探讨Redis、Jedis以及Spring Data Redis这三个核心概念,并结合提供的jar包版本,解析它们在实际开发中的应用。 首先,Redis是一个开源...

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

    在Java环境中,可以使用JedisCluster或者Lettuce等库来操作Redis Cluster。这些库内部实现了对槽位映射、故障转移等复杂逻辑的处理,简化了开发者的工作。例如,JedisCluster提供了连接池管理,自动处理节点间的通信...

    Redis高可用集群Redis Cluster搭建

    Redis高可用集群Redis Cluster搭建 Redis高可用集群Redis Cluster搭建是 Redis 官方推荐的高可用性解决方案,于 3.0 版本推出。Redis Cluster 的主要用途是实现数据分片(Data Sharding),同时也可以实现高可用...

    RedisCluster.rar

    这个“RedisCluster.rar”压缩包很可能包含了一个Java项目的示例代码,用于演示如何使用Java客户端操作RedisCluster。 首先,RedisCluster的核心概念包括: 1. **节点(Nodes)**:RedisCluster由多个Redis实例...

    redis使用jedis测试

    总的来说,通过`jedisTest`我们可以学习到如何使用Jedis进行Redis的基本操作,而`redis.txt`文件可能包含了更多关于这些操作的详细解释或示例代码。通过这种方式,开发者能够快速地在Java项目中集成和测试Redis功能...

    Redis官方Cluster搭建配置步骤详解

    Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。 Redis集群并 不支持处理多个keys... 本文,是我自己写的Redis Cluster集群搭建和配置详细步骤,包含了常用的Redis配置文件,和节点的管理等,以供大家参考.

Global site tag (gtag.js) - Google Analytics