分布式:
将一个业务分割成多个子业务,然后将他们分布在不同的机器上进行相同业务的处理,这就叫做分布式。
集群:
后期访问数据量较大的时候,会牵扯到高并发的一个问题,所以就可以通过加服务器进行解决,在多个子业务上添加多个目标相同的服务器,一个服务器崩溃,另一个服务器会补充上。
redis——cluster槽:
所谓槽,就是存东西的,在redis里它是通过key计算存放数据的,存放在对应的服务器,获取也是同样的算法,默认16384个槽位要均匀分布到主节点上,为了槽数据的安全,要对 主节点进行1-N的节点备份。
redis-cluster槽的选票机制:
所有主节点进行投票,默认是半数以上挂点,容错机制开启,将从节点更改为主节点。
链接redis集群的命令:
-c
redis的集群:
redis是主从复制的机制,主机自动将将数据同步更新到从机,可以进行读写分离。
缺点:
(1.)主机和从机的宕(dang)机,会造成前端读取数据丢失请求失败,只有重启机器或者更改Ip才可以。
(2.)主机宕机会造成从机同步数据失败,重启机器或重新匹配IP会使得引入数据不一致,降低了系统的可用性。
(3.)redis的在线扩容技术未成熟,后期数据量太大,数据的扩容会是一个大难题。
redis的哨兵(sentinel)模式:
哨兵模式是监控主机和从机是否能正常运行。
主机宕机,从机会自动转换为主机。(反客为主)
这种主从任意切换的机制,使得系统更健壮,可用性更高。
redis怎么通过jedis连接集群
第一种方法:通过代码
@Testpublic 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(); }
第二种方法:通过spring(ioc控制反转)
配置XML
<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg index="0"> <set> <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> <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> <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> <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> <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> <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> </bean> </set> </constructor-arg> <constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg></bean>
测试代码:
private ApplicationContext applicationContext; @Before public void init() { applicationContext = new ClassPathXmlApplicationContext( "classpath:applicationContext.xml"); } // redis集群 @Test public void testJedisCluster() { JedisCluster jedisCluster = (JedisCluster) applicationContext .getBean("jedisCluster"); jedisCluster.set("name", "zhangsan"); String value = jedisCluster.get("name"); System.out.println(value); }