• 76060

    文章

  • 703

    评论

  • 18

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

用tio-utils提供的CacheUtils.java简化缓存操作

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

互联网应用,有大量代码在处理安全、并发、攻击等,而缓存就是一个非常常用的武器,譬如缓存可以缓解查询攻击、缓存可以提升并发等。

本人在开发过程中也是涉及到大量的缓存操作,譬如某数据先从缓存中取,缓存中取不到再从数据库中获取,如果数据库中也没有,还要防止缓存NULL攻击,不得不用一个对象放在临时缓存中,为了防止并发访问数据库,在从数据库中获取数据时,还要带一把锁。这个过程用代码大体是类似如下这样的

public Integer getXxxxxx(Integer roomnum) {
    if (roomnum == null) {
        return null;
    }
    Integer invalidUid = -1;
    String key = roomnum + "";
    Integer uid = roomnumAndUidCache.get(key, Integer.class);
    if (uid != null) {
        if (Objects.equals(invalidUid, uid)) {//防止缓存穿透
            return null;
        }
        return uid;
    }

    Object lock = LockUtils.getLocalLockObj(CacheConfig.ROOMNUM_UID_3, key);
    synchronized (lock) {
        uid = roomnumAndUidCache.get(key, Integer.class);
        if (uid != null) {
            return uid;
        }

        /**
         * 获取可视化房间号uid
         */
        uid = Xxxxxxx.me.getZzzzzz(roomnum);
        if (uid != null) {
            roomnumAndUidCache.put(key, uid);
            return uid;
        } else {
            roomnumAndUidCache.putTemporary(key, invalidUid);//防止缓存穿透
            return null;
        }
    }
}

代码多而易错,所以本人最近开放了CacheUtils.java,同样的逻辑用新的写法如下

public Integer getXxxxxx(Integer roomnum) {
	if (roomnum == null) {
		return null;
	}
	String key = roomnum + "";
	Integer uid = CacheUtils.get(roomnumAndUidCache, key, true, new FirsthandCreater<Integer>() {
		@Override
		public Integer create() {
			return Xxxxxxx.me.getZzzzzz(roomnum);
		}
	});
	return uid;
}

是不是简单多了?

最后附上CacheUtils.java源代码地址:https://gitee.com/tywo45/t-io/blob/master/src/utils/src/main/java/org/tio/utils/cache/CacheUtils.java


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

1条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客