须要导入两个包。java
项目结构 |
---|
![]() |
package com.xkt.jedis; import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; /** * @author lzx * */ public class JedisTest { private Jedis jedis = null; /** * new Jedis(host, port, timeout); * * host redis所在服务器地址 port 端口 默认6379 timeout 链接超时时间,默认5s * * 链接reids注意事项: (1)防火墙问题 (2)Ip绑定。把Redis的配置文件redis.conf里的bind localhost(或者bind * 127.0.0.1,代表只有该主机才能访问)注释掉。 (3)protected-mode保护模式 若是碰到,将protected-mode改为no便可。 */ @Before public void before() { // 一、建立客户端Jedis jedis = new Jedis("192.168.109.3", 6379, 5); // 2.指定密码 jedis.auth("1234"); } @After public void after() { // 关闭资源 if (null != jedis) { jedis.close(); } } /** * 测试链接 */ @Test public void testConn() { String pong = jedis.ping(); System.out.println(pong); } /** * 得到全部key */ @Test public void getAllKeys() { Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); } } }
链接reids注意事项:node
所谓的集群,就是经过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。redis
模型 |
---|
![]() |
这里咱们介绍Redis-cluster集群,由于哨兵模式当并发写请求较大时,哨兵模式并不能缓解写压力。数据库
咱们知道只有主节点才具备写能力,那若是在一个集群中,可以配置多个主节点,是否是就能够缓解写压力了呢?这就引出了咱们的redis-cluster集群模式。ruby
图示 |
---|
![]() |
图示 |
---|
![]() |
在Redis-Cluster集群中,能够给每个主节点添加从节点,主节点和从节点直接遵循主从模型的特性。服务器
当用户须要处理更多读请求的时候,添加从节点能够扩展系统的读性能。网络
Redis集群的主节点内置了相似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其余在线主节点会注意到这一点,并对已下线的主节点进行故障转移。并发
图示 |
---|
![]() |
集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本同样,不一样的是,在集群里面,故障转移是由集群中其余在线的主节点负责进行的,因此集群没必要另外使用Redis Sentinel。分布式
Redis-cluster分片策略,是用来解决key存储位置的。函数
集群将整个数据库分为16384个槽位slot,全部key-value数据都存储在这些slot中的某一个上。一个slot槽位能够存放多个数据,key的槽位计算公式为:slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数。
集群中的每一个主节点均可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求。
图示 |
---|
![]() |
图示 |
---|
![]() |
拷贝redis-3.0.0.gem至/usr/local下,执行安装:
主节点:192.168.56.3:7001 192.168.56.3:7002 192.168.56.3:7003
从节点:192.168.56.3:7004 192.168.56.3:7005 192.168.56.3:7006
图示 |
---|
![]() |
1>必选配置:
图示 |
---|
![]() |
图示 |
---|
![]() |
package com.xkt.redis.test; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; /** * @author lzx * */ public class Test { public static void main(String[] args) { //链接jediscluster客户端 String host ="192.168.109.3"; Set<HostAndPort> nodes =new HashSet<>(); nodes.add(new HostAndPort(host, 7001)); nodes.add(new HostAndPort(host, 7002)); nodes.add(new HostAndPort(host, 7003)); nodes.add(new HostAndPort(host, 7004)); nodes.add(new HostAndPort(host, 7005)); nodes.add(new HostAndPort(host, 7006)); JedisCluster cluster = new JedisCluster(nodes); String name = cluster.hget("user:id:1", "name"); System.out.println(name); cluster.close(); } }