jive发贴时,缓存是如何删除的?

博客主要讲述数据库内容改变后,缓存中相应数据应尽量少地删除。以发帖子为例,说明论坛的帖子数、最后更新日期、帖子列表等数据会改变,且帖子列表重新获取只影响首个访问用户,还提及了相关操作流程及client代码。
当数据库中的东西改变了以后,缓存中的相应数据应该被删除,确切地说应该尽量少地删除。比如你要发一个帖子,什么数据改变了,论坛的帖子数,论坛的最后更新日期,论坛的帖子列表也得重新从数据库中得到。
注意,最后一个操作看起来很费力气,其实不然。这个操作并非对所有用户都有影响,是的,它只影响了第一个访问该论坛的用户。并且帖子列表是分页取得的,所以并不要多少磁盘操作。下面把整个流程好好整理一下。
client代码就这两行

forum=forumFactory.getForum(2L);.
forum.addThread(forumFactory.createThread(newMessage););;

Jive是在forum.addThread()时才真正往数据库里放呢

forum(ForumProxy)检测完权限后,dbforum(DbForum)就要执行addThread操作了:
   public void addThread(ForumThread thread); {
boolean abortTransaction = false;
// 1 更新thread,因为thread可能已经在数据库中了(这是设计中最令人恼火的地方,你必须考虑你的每一段代码在任何输入条件下,都应该分别怎么做)


// Now, insert the thread into the database. Depending on if this
//
//你看,又来了吧! method was called internally or not, the thread object might
// be wrapped by a proxy or not.
if (thread instanceof ForumThreadProxy); {
ForumThreadProxy proxyThread = (ForumThreadProxy);thread;
DbForumThread dbThread = (DbForumThread);proxyThread.getProxiedForumThread();;
dbThread.insertIntoDb(this, con);;
}
else {
DbForumThread dbThread = (DbForumThread);thread;
dbThread.insertIntoDb(this, con);;
}
}
catch(Exception e); {
e.printStackTrace();;
abortTransaction = true;
}
finally {
ConnectionManager.closeTransactionConnection(con, abortTransaction);;
}

// Thread count has changed, so remove the forum from cache.
factory.cacheManager.forumCache.remove(this.id);;

//这个帖子作者的缓存也得改!
// Expire the userMessageCountCache if the root message was not posted
// anonymously.
ForumMessage message = thread.getRootMessage();;
if (!message.isAnonymous();); {
factory.userMessageCountCache.remove(message.getUser();.getID(););;
}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值