欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 23:49:57
...
当数据库中的东西改变了以后,缓存中的相应数据应该被删除,确切地说应该尽量少地删除。比如你要发一个帖子,什么数据改变了,论坛的帖子数,论坛的最后更新日期,论坛的帖子列表也得重新从数据库中得到。
注意,最后一个操作看起来很费力气,其实不然。这个操作并非对所有用户都有影响,是的,它只影响了第一个访问该论坛的用户。并且帖子列表是分页取得的,所以并不要多少磁盘操作。下面把整个流程好好整理一下。
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(););;
        }
    }
相关标签: thread Cache