怎么连接redis集群 使用jedis连接单机和集群redis的两种方式

怎么连接redis集群 使用jedis连接单机和集群redis的两种方式,第1张

第一:非集晌扮悄群状态下

集群状态下用Jedis获取Redis连接,得到Jedis对象即可,一共有两种:

1.利用Jedis构造器,仅限用于测试,在实际项目中肯定是用JedisPool。

Jedis(String host)

Jedis(String host , int port)

2.利用JedisPool

主要是利用Jedis jedis=jedisPool.getResource()

JedisPool有N多个构造器,常用的构造器参数有GenericObjectPoolConfig poolConfig,String host,int port,int timeout,String password,创建GenericObjectPoolConfig对象时我们一般用其子类JedisPoolConfig (redis.clients.jedis.JedisPoolConfig),timeout是连接redis服务器的超时时间,以毫秒为单位,一般设置为0,如果不设为0,则不可设置太小,如果设成1、2,缺毕那么可能因为网络原因在1毫秒、2毫秒之内没有连上服务器而报错。见下例:

[java] view plain copy

public static void main(String[] args) {

JedisPoolConfig poolConfig = new JedisPoolConfig()

// 最大连接数

poolConfig.setMaxTotal(2)

// 最大空闲数

poolConfig.setMaxIdle(2)

// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:

// Could not get a resource from the pool

poolConfig.setMaxWaitMillis(1000)

JedisPool pool = new JedisPool(poolConfig, "192.168.83.128", 6379, 0, "123")

Jedis jedis = null

try {

for (int i = 0i <5i++) {

jedis = pool.getResource()

jedis.set("宴渣foo" + i, "bar" + i)

System.out.println("第" + (i + 1) + "个连接, 得到的值为" + jedis.get("foo" + i))

// 用完一定要释放连接

jedis.close()

}

} finally {

pool.close()

}

}

如上,创建出一个JedisPool对象,然后调用其getResource()方法获取redis连接即可,之后就可以调用Jedis API *** 作redis了。jedis连接用完要释放即close,如果不close,则产生的连接会越来越多,当达到了最大连接数,再想获得连接,就会等待,当超过了最大等待时间后就会报异常。

第二:集群状态下

集群状态下用Jedis获取redis连接,是得到JedisCluster对象,之后对redis进行 *** 作都是用此对象的方法进行的:

[java] view plain copy

public static void main(String[] args) {

JedisPoolConfig poolConfig = new JedisPoolConfig()

// 最大连接数

poolConfig.setMaxTotal(1)

// 最大空闲数

poolConfig.setMaxIdle(1)

// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:

// Could not get a resource from the pool

poolConfig.setMaxWaitMillis(1000)

Set<HostAndPort>nodes = new LinkedHashSet<HostAndPort>()

nodes.add(new HostAndPort("192.168.83.128", 6379))

nodes.add(new HostAndPort("192.168.83.128", 6380))

nodes.add(new HostAndPort("192.168.83.128", 6381))

nodes.add(new HostAndPort("192.168.83.128", 6382))

nodes.add(new HostAndPort("192.168.83.128", 6383))

nodes.add(new HostAndPort("192.168.83.128", 6384))

JedisCluster cluster = new JedisCluster(nodes, poolConfig)

String name = cluster.get("name")

System.out.println(name)

cluster.set("age", "18")

System.out.println(cluster.get("age"))

try {

cluster.close()

} catch (IOException e) {

e.printStackTrace()

}

}

用集群时,好像没有办法设置集群的参数,比如最大连接数,虽然在创建JedisCluster 对象时传了JedisPoolConfig对象进去,但是JedisPoolConfig对象中的设置是不生效的。

1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

2、节点的fail是通过集群中超过半数的节点检测失效时才生效。

3、客户端与redis节点直连,不需要中间proxy层.客户瞎困端不需要连接集群所有节点,连接集群中任何一个可用节洞物点即可。

4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。

5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将磨颤念一个key放到哪个桶中。

公司里面项目基本都早败谨使用哨兵模式

注意事项:

1 引入pom依赖

2 添加redis哨兵配置,database主动设置,才会生效

3 application.yml配置枯物

4 项目目录

5 启动测试连接

可以看到redis.clients.jedis.JedisSentinelPool: Created JedisSentinelPool to master at 10.10.195.249:6379已经启动了

作为程序员第陆基 140 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha ...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8283653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存