zk中ReferenceCountedACLCache的作用是什么
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章给大家介绍zk中ReferenceCountedACLCache的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。作用:完成LIst与Long互相转换,DataN
千家信息网最后更新 2025年02月22日zk中ReferenceCountedACLCache的作用是什么
这篇文章给大家介绍zk中ReferenceCountedACLCache的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
作用:完成LIst
空间复杂:内部类AtomicLongWithEquals
属性:
//日志信息private static final Logger LOG = LoggerFactory.getLogger(ReferenceCountedACLCache.class);// long ACL 列表对应关系final Map> longKeyMap = new HashMap >();// ACL 列表 long对应关系final Map , Long> aclKeyMap = new HashMap
, Long>();final Map
referenceCounter = new HashMap ();private static final long OPEN_UNSAFE_ACL_ID = -1L;/** * these are the number of acls that we have in the datatree */long aclIndex = 0;
方法:
记录引用次数
private static class AtomicLongWithEquals extends AtomicLong { private static final long serialVersionUID = 3355155896813725462L; public AtomicLongWithEquals(long i) { super(i); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } return equals((AtomicLongWithEquals) o); } public boolean equals(AtomicLongWithEquals that) { return get() == that.get(); } @Override public int hashCode() { return 31 * Long.valueOf(get()).hashCode(); }}添加使用public synchronized void addUsage(Long acl) { if (acl == OPEN_UNSAFE_ACL_ID) { return; } if (!longKeyMap.containsKey(acl)) { LOG.info("Ignoring acl " + acl + " as it does not exist in the cache"); return; } AtomicLong count = referenceCounter.get(acl); if (count == null) { referenceCounter.put(acl, new AtomicLongWithEquals(1)); } else { count.incrementAndGet(); }}//移除引用public synchronized void removeUsage(Long acl) { if (acl == OPEN_UNSAFE_ACL_ID) { return; } if (!longKeyMap.containsKey(acl)) { LOG.info("Ignoring acl " + acl + " as it does not exist in the cache"); return; } long newCount = referenceCounter.get(acl).decrementAndGet(); if (newCount <= 0) { referenceCounter.remove(acl); aclKeyMap.remove(longKeyMap.get(acl)); longKeyMap.remove(acl); }}//如果引用计数值小于0,则移除相关信息public synchronized void purgeUnused() { Iterator> refCountIter = referenceCounter.entrySet().iterator(); while (refCountIter.hasNext()) { Map.Entry entry = refCountIter.next(); if (entry.getValue().get() <= 0) { Long acl = entry.getKey(); aclKeyMap.remove(longKeyMap.get(acl)); longKeyMap.remove(acl); refCountIter.remove(); } }}
关于zk中ReferenceCountedACLCache的作用是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
作用
信息
内容
更多
帮助
不错
复杂
兴趣
小伙
小伙伴
属性
文章
方法
日志
次数
知识
空间
篇文章
参考
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库基础知识形考任务4
pcb数据库文件不能识别
java连接常见数据库
飞车游戏服务器连接失败
武汉营销网络安全维护收费标准
秦淮区的app软件开发
互联网科技和中下层的矛盾
数据库seed指什么
进口网络技术服务产品
软件开发公司的组织结构图
服务器安全配置
以网络安全的手抄报
实用数据库与运维
2b2t是一个多少人的服务器
qq币直冲回收软件开发
软件开发职业资格证
魔兽登录游戏服务器就断开
6.1实施网络安全审查办法
好活科技互联网公司
mysql管理服务器
数据库查询实验思考
软件开发费用抽成
图书馆里的数据库
远程会话管理服务器认证过期
宁夏网络安全事件
网络安全法定责主体原则
数据库字的大小调整
数据库形如
佛山网络安全学院工资待遇高
晋城天杰软件开发公司