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
问题:
-
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驱动,这使得在Windows和Linux环境下都能轻松地使用Redis。 首先,让我们详细了解Redis的不同版本: 1. **Redis Windows 32位与64位安装包**:Redis原本...
linux中安装redis和jedis及jedispool; redis安装所遇到的问题;
Jedis示例java编程相关代码适合java初学者使用,可熟悉redis缓存相关的操作,以及java编码基于springboot和jedis访问redis服务进行key/value键值对存储和获取附带redis环境安装教程,以及redis入门的介绍教程。...
在`redisCluster-demo`这个项目中,你可以期待找到一个使用Java实现的示例,展示如何配置和使用`JedisCluster`或者`Lettuce`来连接Redis Cluster,以及如何进行基本的数据操作。这个示例可以帮助初学者理解如何在...
使用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详解** Redis是一个高性能的键值数据库,广泛应用于缓存、消息中间件等场景。在大型分布式系统中,为了提供高可用性和数据冗余,我们通常会采用Redis Cluster来构建集群。本文...
Redis Cluster是Redis官方提供的分布式解决方案,它允许用户在多个节点之间分发数据,从而实现高可用性和水平扩展。本文将详细介绍Redis Cluster的工作原理、配置、使用以及与MySQL数据库的配合。 **一、Redis ...
本篇文章将深入探讨如何在Spring Boot项目中集成Redis,并使用Jedis客户端进行操作。 首先,我们要在Spring Boot项目中引入Redis和Jedis的依赖。在`pom.xml`文件中,我们需要添加以下依赖: ```xml <groupId>org...
使用JFinal Redis Cluster插件时,首先需要将其引入到项目中,这里我们看到有一个名为 "jfinal-rediscluster-plugin-by-shixiaotian-0.0.1.jar" 的文件,这应该是该插件的可执行版本。通常,开发者会将这个JAR文件...
7. **集群支持**:当数据量增大时,可以使用Redis Cluster进行分布式部署,Jedis也提供了对Cluster的支持,如`JedisCluster`类。 在实际应用中,我们还需要关注以下几点: - **错误处理**:对可能出现的网络异常、...
9. **客户端连接**:连接到Redis Cluster时,客户端需要支持Cluster模式,例如Jedis或RediStack等。 10. **监控与维护**:定期检查节点状态,使用`CLUSTER NODES`命令查看节点信息,确保没有孤立节点或无法达到的...
6. **数据分布与槽管理**:由于是关于Redis Cluster的示例,所以代码可能包含了如何在多节点之间分配和操作槽的逻辑,以及如何确保数据一致性。 7. **异常处理**:由于分布式系统可能出现网络故障或节点故障,所以`...
标题中的“jfinal redis cluster plugin”指的是一个专为JFinal框架设计的Redis集群插件,旨在帮助开发者在使用JFinal时能便捷地接入并管理Redis集群。JFinal是一款基于Java的轻量级Web开发框架,它以其简洁的API...
在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。本文将深入探讨Redis、Jedis以及Spring Data Redis这三个核心概念,并结合提供的jar包版本,解析它们在实际开发中的应用。 首先,Redis是一个开源...
在Java环境中,可以使用JedisCluster或者Lettuce等库来操作Redis Cluster。这些库内部实现了对槽位映射、故障转移等复杂逻辑的处理,简化了开发者的工作。例如,JedisCluster提供了连接池管理,自动处理节点间的通信...
Redis高可用集群Redis Cluster搭建 Redis高可用集群Redis Cluster搭建是 Redis 官方推荐的高可用性解决方案,于 3.0 版本推出。Redis Cluster 的主要用途是实现数据分片(Data Sharding),同时也可以实现高可用...
这个“RedisCluster.rar”压缩包很可能包含了一个Java项目的示例代码,用于演示如何使用Java客户端操作RedisCluster。 首先,RedisCluster的核心概念包括: 1. **节点(Nodes)**:RedisCluster由多个Redis实例...
总的来说,通过`jedisTest`我们可以学习到如何使用Jedis进行Redis的基本操作,而`redis.txt`文件可能包含了更多关于这些操作的详细解释或示例代码。通过这种方式,开发者能够快速地在Java项目中集成和测试Redis功能...
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。 Redis集群并 不支持处理多个keys... 本文,是我自己写的Redis Cluster集群搭建和配置详细步骤,包含了常用的Redis配置文件,和节点的管理等,以供大家参考.