zk中ReferenceCountedACLCache的作用是什么
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍zk中ReferenceCountedACLCache的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。作用:完成LIst与Long互相转换,DataN
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
咖啡
瑰夏咖啡
互联网科技
湖北九亚互联网络科技有限公司
湖南永感互联网科技有限公司
为想互联网科技怎么样
科技创新与互联网经济
猫创互联网科技
上海亿帐通互联网科技
佰商互联网科技有限公司
深圳前海聚择互联网科技有限公司
深圳国际航运科技和互联网
互联网教育科技公司vipkid
苏州铭阳互联网科技有限公司
华夏恒生互联网科技013171
工业互联网等科技实现智能化赋能
安徽零酒互联网科技有限公司
绵阳真晨互联网科技有限公司
河南商务圈互联网科技有限公司
恒生科技互联网指数十大成分股
亿人帮互联网科技有限公司
互联网科技工作委员会副主任毛军
科技互联网企业
深圳恒合互联网络科技有限公司
金融科技还是互联网
菲比寻常互联网科技
中国互联网十大科技股排名
互联网科技接地气
悟空问答互联网科技
武汉亿视互联网科技有限公司