redis.clients.jedis.redis jedisclusterr的链接是自动释放的吗

找不到答案?
使用ECS自己搭建Redis集群出现JedisCluster连接超时的问题
自己在阿里云的ECS(配置是1G ,1核)上搭建了一个redis集群(端口),在服务器上测试
redis-cli -c -ip -p 7000
执行set,get方法的时候能够正确的重定向slot(定向到公网ip+端口,创建的时候是用公网ip创建的)
而且自己在电脑上的虚拟机上使用,和另外一台阿里云服务器
redis-cli -c -h 我的公网ip -p 7000
都能够正常访问,而且能够正确的重定向slot
但是我用Java的jedisCluster操作的时候就老是出现下面的问题
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
at redis.clients.util.Pool.getResource(Pool.java:53)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:66)
at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116)
at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141)
at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141)
at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141)
at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:141)
at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31)
at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103)
at JedisTest.test(JedisTest.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out
at redis.clients.jedis.Connection.connect(Connection.java:207)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)
at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)
at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)
at mons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868)
at mons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
at mons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
at redis.clients.util.Pool.getResource(Pool.java:49)
... 38 more
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at redis.clients.jedis.Connection.connect(Connection.java:184)
... 45 more
百度了好久,试了各种方法都不能解决问题,ESC的安全组配置也开放了端口(0.0.0.0/0)和(0.0.0.0/0)
redis.conf的配置文件
daemonize yes
appendonly yes
protected-mode no
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes-7000.conf
是不是因为阿里云服务器的问题导致的JedisCluster连接超时,想请各位大佬帮忙解决问题,停在这里好久了。
Java测试代码
Set&HostAndPort& hostandports = new HashSet();
hostandports.add(new HostAndPort("公网Ip",7000));
hostandports.add(new HostAndPort("公网Ip",7001));
hostandports.add(new HostAndPort("公网Ip",7002));
JedisCluster jedisCluster = new JedisCluster(hostandports);
System.out.println(jedisCluster.set("132455","aaaaaaaaaaaaa"));;
System.out.println(jedisCluster.get("aaaaaa"));
按投票排序
按时间排序
<dd id="vote_num_
这个有没有解决啊,我也碰到了。。。。
<dd id="vote_num_
修改 Redis.conf 配置 cluster-config-file的指定文件,把私有ip更改为公网ip即可
<dd id="vote_num_
备注下redis版本是3.2.9,jedis用的是2.9,然后ruby是2.3,gem中的redis是3.0.0(换成4.0一样的)
<dd id="vote_num_
巧了2333集群启动的时候用内网ip可以的创建成功.但是外网访问访问是可以通..但是要set他节点好像不能内部跳转。。。我用公网ip创建集群他就一直给我在哪里waiting for the cluster to join.......
老哥解决了嘛
waiting for the cluster to join是端口开放问题,除了开放集群的端口还要开放集群端口+10000端口来保证集群之间的通信
登录后可回答问题,请
一种稳定可靠、性能卓越、可弹性伸缩的数据库服务。基于飞天分布式系统和全SSD盘高性能存储,支持主备版和集群版两套...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...Jedis实现批量删除redis cluster - CSDN博客
Jedis实现批量删除redis cluster
在网上找了好几遍也没找到可以批量删除或者清空redis cluster的方法 &
我就用jedis写了一个
& & & & &//获取jedis连接
& & & & &private JedisCluster jedisCluster=JedisClusterUtil.getJedisCluster();
& & & & &//@param&pattern &获取key的前缀 &全是是 *&
&public static TreeSet&String& keys(String pattern){ &
& & & &TreeSet&String& keys = new TreeSet&&(); &
& & & & //获取所有的节点
& & & & & & & &Map&String, JedisPool& clusterNodes = jedisCluster.getClusterNodes(); &
& & & &//遍历节点 获取所有符合条件的KEY&
& & & & & & & &for(String k : clusterNodes.keySet()){ &
& & & & & &logger.debug(&Getting keys from: {}&, k); &
& & & & & &JedisPool jp = clusterNodes.get(k); &
& & & & & &Jedis connection = jp.getResource(); &
& & & & & &try { &
& & & & & & & &keys.addAll(connection.keys(pattern)); &
& & & & & &} catch(Exception e){ &
& & & & & & & &logger.error(&Getting keys error: {}&, e); &
& & & & & &} finally{ &
& & & & & & & &logger.debug(&Connection closed.&); &
& & & & & & & &connection.close();//用完一定要close这个链接!!! &
& & & & & &} &
& & & &} &
& & & &logger.debug(&Keys gotten!&); &
& & & & & //main方法
&public static void main(String[] args ){
&TreeSet&String& keys=keys(&*&);
&//遍历key &进行删除 &可以用多线程
&for(String key:keys){
& & & & & & & & & & & & &&jedisCluster.del(key);
&System.out.println(key);
本文已收录于以下专栏:
相关文章推荐
由于我测试的redis的环境是集群环境,故声明多个Jedis对象,下面是实现代码
package com.gyc.
import java.util.I
import j...
进入redis目录下
通过前一篇《redis的简单使用》的简单介绍,本篇主要阐述Jedis对redis的五大类型的操作:字符串、列表、散列、集合、有序集合。JedisUtil这里的测试用例采用junit4进行运行,准备代码...
public static void delKeys(HostAndPort hostAndPort, String keysPattern) {
Map clusterNodes =...
&#160;&#160;&#160;&#160;&#160;&#160;&#160; redis从3.0版本后引入了令人兴奋的cluster集群模式,相信很多人都尝试过了,在高兴之余却发现redis官方的cluster对于java客户端的jedis支持却不是很好...
redis本身不支持批量删除key.可以借助jedis客户端,shell和lua脚本来实现
1. shell脚本&#160;
2. lua 脚本
3. jedis 客户端,java客户端适用这种
批量删除Key
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作
redis-cli keys &...
一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接;这种模式是 &#160;
请求-响应,请求-响应
这种模式,下一次请求必须得等第一次请求响应回来之后才可以...
import redis.clients.jedis.J
import redis.clients.jedis.P
public class...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
最近公司想用redis集群,正好看见redis3.0 release出来了,就准备上手试一试。
下文主要是搭建时遇到的一些问题和心里历程。
引用原创:
一、关于redis-cluster配置与说明
因为有现成的文章,我就不在多说。
引用
二、搭建过程中所遇到的坑
因搭建过程中,使用上文引用的链接中操作步骤,遇到一些问题,所以自己重新写了一下搭建过程(可能使用的版本有差异造成)。遇到以下问题:
1)ruby安装失败。ruby2.3.0换成了ruby2.2.4安装成功,原因没弄清楚。
2)rubygems在ruby中已内置
3)redis.gem手动下载安装失败,gem install redis时出错
因为安装ruby之后,安装ruby-zlib
no such file to load -- redis (LoadError)
1.测试环境
linux ip:192.168.71.188
node_1 port:6380 master
node_2 port:6381 master
node_3 port:6382 master
node_4 port:7380 slave
node_5 port:7381 slave
node_6 port:7382 slave
redis:3.0.7
zlib:1.2.8
ruby:2.2.4
redis.gem:3.2.1
关于各结点port占用问题:
引用
The Cluster bus
Every Redis Cluster node has an additional TCP port for receiving incoming connections from other Redis Cluster nodes. This port is at a fixed offset from the normal TCP port used to receive incoming connections from clients. To obtain the Redis Cluster port, 10000 should be added to the normal commands port. For example, if a Redis node is listening for client connections on port 6379, the Cluster bus port 16379 will also be opened.
Node-to-node communication happens exclusively using the Cluster bus and the Cluster bus protocol: a binary protocol composed of frames of different types and sizes. The Cluster bus binary protocol is not publicly documented since it is not intended for external software devices to talk with Redis Cluster nodes using this protocol. However you can obtain more details about the Cluster bus protocol by reading the cluster.h and cluster.c files in the Redis Cluster source code.
注:各结点通信是通过特点port来进行信息交互的。如结点port为6380,则与其他结点的tcp连接port为16380。
2.redis-cluster集群搭建
1)redis3.0
cd /opt/redis-x.x.x
sudo cp /opt/redis/src/redis-server /usr/local/bin
sudo cp /opt/redis/src/redis-cli /usr/local/bin
sudo cp /opt/redis/src/redis-trib.rb /usr/local/bin
2)zlib
cd /path/zlib-x.x.x
./configure
make install
3)ruby
cd /path/ruby-x.x.x
./configure -prefix=/usr/local/ruby
make install
sudo cp ruby /usr/local/bin
4)ruby-zlib ruby内置
cd /rubypath/
cd ext/zlib
cd ruby ./extconf.rb
make install
5)rubygems ruby内置 依赖zlib、ruby-zlib
cd /rubypath/
sudo cp bin/gem /usr/local/bin
6)redis.gem 依赖rubygems
cd /rubypath/bin
#gem source -r=remove -a=add -l=curr source
#gem source -l
#gem source -r https://rubygems.org/
#gem source -a http://rubygems.org/
#gem install redis --source http://rubygems.org
#gem install redis --version 3.0.0
gem install redis
7)redis-cluster结点启动
redis-server /opt/redis-cluster/conf/redis-6380.conf & /opt/redis-cluster/logs/redis-6380.log 2&&1 &
redis-server /opt/redis-cluster/conf/redis-6381.conf & /opt/redis-cluster/logs/redis-6381.log 2&&1 &
redis-server /opt/redis-cluster/conf/redis-6382.conf & /opt/redis-cluster/logs/redis-6382.log 2&&1 &
redis-server /opt/redis-cluster/conf/redis-7380.conf & /opt/redis-cluster/logs/redis-7380.log 2&&1 &
redis-server /opt/redis-cluster/conf/redis-7381.conf & /opt/redis-cluster/logs/redis-7381.log 2&&1 &
redis-server /opt/redis-cluster/conf/redis-7382.conf & /opt/redis-cluster/logs/redis-7382.log 2&&1 &
8)redis-trib.rb 依赖ruby、redis.gem
使用redis自带的redis-trib.rb来构建集群,完事slots分配等。
#redis-trib.rb的create子命令构建
#--replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点
#节点角色由顺序决定,先master之后是slave(为方便辨认,slave的端口比master大1000)
redis-trib.rb create --replicas 1 192.168.71.188:.71.188:.71.188:.71.188:.71.188:.71.188:7382
9)检查集群状态 check redis-cluster
#redis-trib.rb的check子命令构建
#ip:port可以是集群的任意节点
redis-trib.rb check 192.168.71.188:6380
[OK] All nodes agree about slots configuration.
&&& Check for open slots...
&&& Check slots coverage...
[OK] All 16384 slots covered.
10)redis-cli -c 可自动MOVED到对应slot节点上
redis-cli -c -p 6380
192.168.71.188:7381& set aa a
-& Redirected to slot [1180] located at 127.0.0.1:7380
127.0.0.1:7380& set bb b
-& Redirected to slot [8620] located at 127.0.0.1:7381
127.0.0.1:6382& get aa
-& Redirected to slot [1180] located at 127.0.0.1:7380
127.0.0.1:7380& get bb
-& Redirected to slot [8620] located at 127.0.0.1:7381
"b"
11)Redis-rb-cluster
#Redis Cluster client work in progress. It wraps Redis-rb, and eventually should be part of it.
ruby example.rb
^C (I stopped the program here)
ruby consistency-test.rb 192.168.71.188 6380
925 R (0 err) | 925 W (0 err) |
5030 R (0 err) | 5030 W (0 err) |
9261 R (0 err) | 9261 W (0 err) |
13517 R (0 err) | 13517 W (0 err) |
17780 R (0 err) | 17780 W (0 err) |
22025 R (0 err) | 22025 W (0 err) |
25818 R (0 err) | 25818 W (0 err) |
引用
3.JedisCluster测试
用jedis2.8使用JedisCluster访问,一访问就报错:
Exception in thread "main" redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException:Too many Cluster redirections?
最开始以后是集群搭建的有问题,但是各处也排查了,集群状态是OK的。
同时测试了一下集群的容错功能,一切正常。
那么我就想,肯定不是集群的问题。又用Jedis单结点访问,一切正常。
集群正常,单结点访问也正常,这就奇怪了,为什么用JedisCluster就不行呢?
难道是jedis2.8对redis-cluster支持的不好?上jedis一看,是支持redis-cluster的。看jedis2.8.1发布了,死马当活马医吧,maven改下version,问题依就存在。
头疼啊,上网找资料吧。关于cluster的还是太少,没找到中文可以的。没办法看英文文档吧,英文又太差,将就吧。文档看了不少,还是没找到问题。
没办法了,就想着要不换个服务器重新搭建一下试试?
所以就开始看看自己搭建之初记录下来的操作步骤。哎呀,有发现啊。
redis-trib.rb create --replicas 1 127.0.0.1:.0.1:.0.1:.0.1:.0.1:.0.1:7382
难道是这的问题?
kill掉所以结点,删除data下的所有数据(dump、aof、nodes)文件,重新配置
redis-trib.rb create --replicas 1 192.168.71.188:.71.188:.71.188:.71.188:.71.188:.71.188:7382
立马执行一下JedisCluster,OK,问题解决了~
那个心情啊...超好了
但是回过头来一看之前看的文档,心情不好了~~~都是眼泪啊~
就这么个问题,快弄了两天了~~~只能说干这行没学好英语苦啊...
引用注:redis-trib.rb中的IP是根据conf中bind的IP来决定的,保持一致,bind默认是127.0.0.1。如果是部署到服务器,则需要配置bind为服务器IP。
4.Jedis测试代码
Redis cluster specification (still under development) is implemented
Set&HostAndPort& jedisClusterNodes = new HashSet&HostAndPort&();
//Jedis Cluster will attempt to discover cluster nodes automatically
//只需要配置集群中的一个结点,连接成功后,自动获取点集群中其他结点信息
jedisClusterNodes.add(new HostAndPort("192.168.71.188", 7380));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo", "bar");
String value = jc.get("foo");
引用
三、redis-cluster对Lua的支持
目前redis-cluster只支持单KEYS[1]操作,因为不同key存储的slot不同。
Set&HostAndPort& jedisClusterNodes = new HashSet&HostAndPort&();
jedisClusterNodes.add(new HostAndPort("192.168.71.188", 7380));
System.out.println("jcn set initialised");
JedisCluster jc = new JedisCluster(jedisClusterNodes);
String sha = jc.scriptLoad(
"redis.call('set', KEYS[1], '100') ;"
+ "redis.call('set', KEYS[2], '200') ;"
+ "", "test");
System.out.println(sha);
List&String& listKey = new ArrayList&String&();
List&String& listParam = new ArrayList&String&();
listKey.add("aa");
listKey.add("cc");
System.out.println(jc.evalsha(sha, listKey, listParam));
System.out.println(jc.get("aa"));
System.out.println(jc.get("cc"));
throw new JedisClusterException("No way to dispatch this command to Redis Cluster because keys have different slots.");
// Referenced classes of package redis.clients.jedis:
Jedis, JedisClusterConnectionHandler
public abstract class JedisClusterCommand
public Object run(String key)
if(key == null)
throw new JedisClusterException("No way to dispatch this command to Redis Cluster.");
return runWithRetries(SafeEncoder.encode(key), redirections, false, false);
public transient Object run(int keyCount, String keys[])
if(keys == null || keys.length == 0)
throw new JedisClusterException("No way to dispatch this command to Redis Cluster.");
if(keys.length & 1)
int slot = JedisClusterCRC16.getSlot(keys[0]);
for(int i = 1; i & keyC i++)
int nextSlot = JedisClusterCRC16.getSlot(keys[i]);
if(slot != nextSlot)
throw new JedisClusterException("No way to dispatch this command to Redis Cluster because keys have different slots.");
return runWithRetries(SafeEncoder.encode(keys[0]), redirections, false, false);
浏览: 54410 次
来自: 沈阳
谢谢分享,解决了我的问题。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'redis--jedis连接集群 - CSDN博客
redis--jedis连接集群
jedis连接集群
1.设置防火墙
[root@itheima redis-cluster]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7002 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7003 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7004 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7005 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7006 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7007 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
~&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&/etc/sysconfig/iptables& 23L, 1146C 已写入&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[root@itheima redis-cluster]# service iptables restart
iptables:清除防火墙规则:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& [确定]
iptables:将链设置为政策 ACCEPT:filter&&&&&&&&&&&&&&&&&&& [确定]
iptables:正在卸载模块:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& [确定]
iptables:应用防火墙规则:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& [确定]
[root@itheima redis-cluster]#
2.代码实现
创建JedisCluster类连接redis集群。
public void testJedisCluster() throws Exception {
//创建一连接,JedisCluster对象,在系统中是单例存在
Set&HostAndPort& nodes = new HashSet&&();
nodes.add(new HostAndPort(&127.0.0.1&, 7001));
nodes.add(new HostAndPort(&127.0.0.1&, 7002));
nodes.add(new HostAndPort(&127.0.0.1&, 7003));
nodes.add(new HostAndPort(&127.0.0.1&, 7004));
nodes.add(new HostAndPort(&127.0.0.1&, 7005));
nodes.add(new HostAndPort(&127.0.0.1&, 7006));
JedisCluster cluster = new JedisCluster(nodes);
//执行JedisCluster对象中的方法,方法和redis一一对应。
cluster.set(&cluster-test&, &my jedis cluster test&);
String result = cluster.get(&cluster-test&);
System.out.println(result);
//程序结束时需要关闭JedisCluster对象
cluster.close();
3.使用spring
?& 配置applicationContext.xml
&!-- 连接池配置 --&
&bean id=&jedisPoolConfig& class=&redis.clients.jedis.JedisPoolConfig&&
&!-- 最大连接数 --&
&property name=&maxTotal& value=&30& /&
&!-- 最大空闲连接数 --&
&property name=&maxIdle& value=&10& /&
&!-- 每次释放连接的最大数目 --&
&property name=&numTestsPerEvictionRun& value=&1024& /&
&!-- 释放连接的扫描间隔(毫秒) --&
&property name=&timeBetweenEvictionRunsMillis& value=&30000& /&
&!-- 连接最小空闲时间 --&
&property name=&minEvictableIdleTimeMillis& value=&1800000& /&
&!-- 连接空闲多久后释放, 当空闲时间&该值 且 空闲连接&最大空闲连接数 时直接释放 --&
&property name=&softMinEvictableIdleTimeMillis& value=&10000& /&
&!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 --&
&property name=&maxWaitMillis& value=&1500& /&
&!-- 在获取连接的时候检查有效性, 默认false --&
&property name=&testOnBorrow& value=&true& /&
&!-- 在空闲时检查有效性, 默认false --&
&property name=&testWhileIdle& value=&true& /&
&!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true --&
&property name=&blockWhenExhausted& value=&false& /&
&!-- redis集群 --&
&bean id=&jedisCluster& class=&redis.clients.jedis.JedisCluster&&
&constructor-arg index=&0&&
&bean class=&redis.clients.jedis.HostAndPort&&
&constructor-arg index=&0& value=&192.168.101.3&&&/constructor-arg&
&constructor-arg index=&1& value=&7001&&&/constructor-arg&
&bean class=&redis.clients.jedis.HostAndPort&&
&constructor-arg index=&0& value=&192.168.101.3&&&/constructor-arg&
&constructor-arg index=&1& value=&7002&&&/constructor-arg&
&bean class=&redis.clients.jedis.HostAndPort&&
&constructor-arg index=&0& value=&192.168.101.3&&&/constructor-arg&
&constructor-arg index=&1& value=&7003&&&/constructor-arg&
&bean class=&redis.clients.jedis.HostAndPort&&
&constructor-arg index=&0& value=&192.168.101.3&&&/constructor-arg&
&constructor-arg index=&1& value=&7004&&&/constructor-arg&
&bean class=&redis.clients.jedis.HostAndPort&&
&constructor-arg index=&0& value=&192.168.101.3&&&/constructor-arg&
&constructor-arg index=&1& value=&7005&&&/constructor-arg&
&bean class=&redis.clients.jedis.HostAndPort&&
&constructor-arg index=&0& value=&192.168.101.3&&&/constructor-arg&
&constructor-arg index=&1& value=&7006&&&/constructor-arg&
&/constructor-arg&
&constructor-arg index=&1& ref=&jedisPoolConfig&&&/constructor-arg&
?& 测试代码
private ApplicationContext applicationC
public void init() {
applicationContext = new ClassPathXmlApplicationContext(
&classpath:applicationContext.xml&);
// redis集群
public void testJedisCluster() {
JedisCluster jedisCluster = (JedisCluster) applicationContext
.getBean(&jedisCluster&);
jedisCluster.set(&name&, &zhangsan&);
String value = jedisCluster.get(&name&);
System.out.println(value);
本文已收录于以下专栏:
相关文章推荐
上一篇文章讲解了redis的安装和启动服务,并用redis的客户端进行测试,本篇将采用jedis的方法去使用redis所提供的服务首先我们先用telnet一下redis服务端口,此刻会出现问题,如果r...
&#160;&#160; 最近项目中用到了redis,所以就找了相关的资料学习了,然后搭建了redis集群,以及客户端的java代码实现。由于对linux不太熟悉,所以在Linux上搭建redis集群的时候碰到了...
之前做了一个Redis的集群方案,跑了小半年,线上运行的很稳定,还没出过大的状况差不多可以跟大家分享下经验,之前写了一篇文章&#160;数据在线服务的一些探索经验,简单介绍了Reids在我们这边的应用应用我们的...
redis集群环境搭建以及java中jedis客户端集群代码实现
博客分类:&#160;
redislinuxrubygemsjava&#160;
&#160; &#160; &#160; &#160;
&#160; &#160; &#160; 最近项目中用到了r...
下载地址:http://redis.io/download下载文件:redis-2.4.14.tar.gz官方教程:http://redis.io/topics/quickstart&#160;关于redis....
一、Redis与spring的整合一般分为spring-data-redis整合和JedisPool整合,先看看两者的区别1)、引用的依赖不同:spring-data-redis使用的依赖如下:
1、 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问。
2、 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储...
Jedis-2.7.2 版本虽然支持连接集群 Redis,但是仅仅支持 String 字符串的存储,并不支持 Map、Set、List,在这里分享一个能够支持复杂操作的方法。
Redis-2.4.15目前没有提供集群的功能,Redis作者在博客中说将在3.0中实现集群机制。目前Redis实现集群的方法主要是采用一致性哈稀分片(Shard),将不同的key分配到不同的redi...
Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中。下面是一篇介绍Redis复...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 redis.clients maven 的文章

 

随机推荐