中央管控RedisZK来帮忙(zk管理redis)
近年来,随着大规模分布式系统的发展,缓存存储系统的重要性日益凸显,Redis便成为缓存系统的佼佼者,但是由于Redis存放在单机上,出现一台Redis机器故障,将对分布式系统造成很大的影响。因此,常见的处理方式是将Redis存储从单机扩展到多机,这就需要一个中央控制和管理系统,即Redis集群管理系统。
ZooKeeper是一个分布式的、开放源的、可靠的特性的服务管理系统,可以提供在分布式环境中应用程序的协调服务。它弥补了Redis无法在分布式环境中做集群管理系统的不足,结合Redis的特性,可以使用ZooKeeper实现Redis的集群管理。
具体来说,可以将Zookeeper和Redis集群结合起来,在ZooKeeper中存放Redis集群的信息,客户端通过读取ZooKeeper上存放的Redis集群信息,来访问访问具体的Redis节点,从而实现对Redis集群的管理。
此外,ZooKeeper还可以帮助我们解决分布式系统中的仲裁问题。通过ZooKeeper,我们可以在Redis集群中识别出一台机器作为仲裁者,利用ZooKeeper上写入的Redis集群信息来确定集群中每台机器的归属。这样,即使有一台机器故障,也可以通过ZooKeeper来确定新的节点加入集群并继续服务。
以上就是使用ZooKeeper来帮助Redis完成集群管理的实现原理,通过ZooKeeper我们可以通过节点的注册、选举和分配权重等机制,实现Redis作为中央管控的集群管理,保证在分布式环境中Redis的健康服务。
下面bit数组用来实现(去重)和zk来实现Redis中央管控
//用bit数组实现去重
int bitArray[100];
// 用position表示二进制位中元素所在位置bool setBit(int position)
{ if (bitArray[position/32] & (1
return false; bitArray[position/32] |= 1
return true; }
//ZK来实现redis中央管控Path CREATESERVERNODE = "/server" ;
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);zookeeper = new ZooKeeper(connectString , timeout , event -> {
if (event.getState() == KeeperState.SyncConnected) { connectedSemaphore.countDown();
}
}); connectedSemaphore.awt();
String serverNodeValue=createServerNode(), basePath =ZkConfig.ZK_REGISTRY_PATH;//创建新的服务节点,并将信息封装成对象
String ourPath=zooKeeper.create(basePath+ CREATESERVERNODE +"/"+serverNodeValue,Server.data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSSISTENT);//将服务节点注册到服务中心
Map> serverMap =new hashMap>();