zookeeper之acl 张飞的绣花针

  千锋JAVA开发学院3天前我要分享

众所周知,内存资源总是有限的;

即使使用Java程序员,我们仍然需要考虑如何有效地实现业务目标并构建具有低内存的优秀软件,这是成为优秀架构师的唯一途径;

今天我们将与大家分享,zookeeper的acl存储缓存,主要类是ReferenceCountedACLCache;

主要成员变量

其中

longKeyMap和aclKeyMap分别是acl集合信息和acl整形值之间建立的散列图;

referenceCounter:是一个权限值引用计数器;

aclIndex:acl权限号;

特权新

当我们创建节点时,我们可以看到datatree.java中的createnode中有这样的一行

代码将会话中的acl集合信息转换为long,即ReferenceCountedACLCache中的convertAcls。首先,它将查询aclKeyMap以获取acl集合信息。如果没有,它将生成acl号aclIndex,实际上是aclIndex + 1;然后将此值添加到longKeyMap和aclKeyMap,这里的目的是创建一个aclIndex和acl关系;最后调用addUsage,addUsage显示在以下代码中;

从addUsage的代码可以看出,它主要存储了acl中有多少节点引用;

访问权限

以上是创建,然后当我们查询权限时,我们可以先获取一个节点,然后通过节点的acl,我们可以得到相应的acl集合信息;也就是说,以下代码

zookeeper的想法如下所示。

设计效益

每个节点上的信息仅存储acl的整数值。此整数值是acl缓存的参考值,实际的acl集信息缓存在ReferenceCountedACLCache中,这为数据树的整个树结构节省了大量内存;/P>

收集报告投诉

众所周知,内存资源总是有限的;

即使使用Java程序员,我们仍然需要考虑如何有效地实现业务目标并构建具有低内存的优秀软件,这是成为优秀架构师的唯一途径;

今天我们将与大家分享,zookeeper的acl存储缓存,主要类是ReferenceCountedACLCache;

主要成员变量

其中

longKeyMap和aclKeyMap分别是acl集合信息和acl整形值之间建立的散列图;

referenceCounter:是一个权限值引用计数器;

aclIndex:acl权限号;

特权新

当我们创建节点时,我们可以看到datatree.java中的createnode中有这样的一行

代码将会话中的acl集合信息转换为long,即ReferenceCountedACLCache中的convertAcls。首先,它将查询aclKeyMap以获取acl集合信息。如果没有,它将生成acl号aclIndex,实际上是aclIndex + 1;然后将此值添加到longKeyMap和aclKeyMap,这里的目的是创建一个aclIndex和acl关系;最后调用addUsage,addUsage显示在以下代码中;

从addUsage的代码可以看出,它主要存储了acl中有多少节点引用;

访问权限

以上是创建,然后当我们查询权限时,我们可以先获取一个节点,然后通过节点的acl,我们可以得到相应的acl集合信息;也就是说,以下代码

zookeeper的想法如下所示。

设计效益

每个节点上的信息仅存储acl的整数值。此整数值是acl缓存的参考值,实际的acl集信息缓存在ReferenceCountedACLCache中,这为数据树的整个树结构节省了大量内存;/P>。