⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgcache.java~3~

📁 云网论坛CWBBS 源码,内容丰富,学习,参考,教学的好资料,具体见内说明,
💻 JAVA~3~
📖 第 1 页 / 共 2 页
字号:
            if (!SecurityUtil.isValidSql(query))
                return -1;
            Integer count = null;
            try {
                count = (Integer) rmCache.getFromGroup(query, COUNT_GROUP_NAME + boardcode);
            } catch (Exception e) {
                logger.error(e.getMessage());
            }

            // If already in cache, return the count.
            if (count != null) {
                return count.intValue();
            }
            // Otherwise, we have to load the count from the db.
            else {
                int docCount = 0;
                Conn conn = new Conn(connname);
                ResultSet rs = null;
                try {
                    rs = conn.executeQuery(query);
                    if (rs.next())
                        docCount = rs.getInt(1);
                } catch (SQLException sqle) {
                    sqle.printStackTrace();
                } finally {
                    if (rs != null) {
                        try {
                            rs.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        rs = null;
                    }
                    if (conn != null) {
                        conn.close();
                        conn = null;
                    }
                }
                // Add the thread count to cache
                try {
                    rmCache.putInGroup(query, COUNT_GROUP_NAME + boardcode,
                                       new Integer(docCount));
                } catch (Exception e) {
                    logger.error(e.getMessage());
                }
                return docCount;
        }
    }

    /**
     *
     * @param sql String
     * @return int -1 表示sql语句不合法
     */
    public long getMsgCount(String sql, String boardcode, long rootid) {
        //根据sql语句得出计算总数的sql查询语句
        String query = SQLFilter.getCountSql(sql);
        if (!SecurityUtil.isValidSql(query))
            return -1;
        Long count = null;
        try {
            count = (Long) rmCache.getFromGroup(query, COUNT_GROUP_NAME + boardcode + rootid);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }

        // If already in cache, return the count.
        if (count != null) {
            return count.longValue();
        }
        // Otherwise, we have to load the count from the db.
        else {
            long docCount = 0;
            Conn conn = new Conn(connname);
            ResultSet rs = null;
            try {
                rs = conn.executeQuery(query);
                if (rs.next())
                    docCount = rs.getLong(1);
            } catch (SQLException sqle) {
                sqle.printStackTrace();
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    rs = null;
                }
                if (conn != null) {
                    conn.close();
                    conn = null;
                }
            }
            // Add the thread count to cache
            try {
                rmCache.putInGroup(query, COUNT_GROUP_NAME + boardcode + rootid,
                                   new Long(docCount));
            } catch (Exception e) {
                logger.error(e.getMessage());
            }
            return docCount;
        }
    }

    /**
     * 有三种cache
     * 1、自身 2、sql结果集的总数 3、thread 4、版面列表 后三种为组
     * @param isInvalidateGroup boolean
     */
    public void removeFromCache(long id) {
        try {
            rmCache.remove(cachePrix + id);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    /**
     * 更新boardcode版块的threads列表
     * @param boardcode String
     */
    public void removeFromCacheThreadsBlock(String boardcode) {
        try {
            rmCache.invalidateGroup(THREADBLOCKCACHEPRIX + boardcode);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    /**
     * 更新thread (rootid) 的贴子列表
     * @param boardcode String
     * @param rootid int
     */
    public void removeFromCacheMsgBlock(String boardcode, long rootid) {
        try {
            rmCache.invalidateGroup(MSGBLOCKCACHEPRIX + boardcode + rootid);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    public void removeFromCacheThreadsCount(String boardcode) {
        try {
            rmCache.invalidateGroup(COUNT_GROUP_NAME + boardcode);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    public void removeFromCacheMsgCount(String boardcode, long rootid) {
        try {
            rmCache.invalidateGroup(COUNT_GROUP_NAME + boardcode + rootid);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    public void refreshAdd(String boardcode, String userName, boolean isBlog, String blogUserDir) {
        // logger.info("refreshAdd boardcode=" + boardcode);
        removeFromCacheThreadsBlock(boardcode);
        removeFromCacheThreadsCount(boardcode);
        // logger.info("refreshAdd userName=" + userName);
        // 刷新leaf
        // Leaf lf = new Leaf();
        // lf.removeFromCache(boardcode);
        if (isBlog) {
            removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(
                    userName, blogUserDir));
            removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(
                    userName, blogUserDir));

            // 刷新全部文章的列表
            removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(
                    userName, ""));
            removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(
                    userName, ""));
        }

    }

    public void refreshChangeBoard(long id, String boardcode, String newboardcode) {
        removeFromCacheThreadsBlock(boardcode);
        removeFromCacheThreadsCount(boardcode);
        removeFromCacheThreadsBlock(newboardcode);
        removeFromCacheThreadsCount(newboardcode);
        removeFromCache(id);
    }

    public void refreshReply(String boardcode, long rootid) {
        logger.info("refreshReply boardcode=" + boardcode);
        removeFromCache(rootid); // 更新rootid的recount rename
        removeFromCacheThreadsBlock(boardcode); // 刷新贴子列表,以使被回贴可被up
        removeFromCacheMsgBlock(boardcode, rootid);
        removeFromCacheMsgCount(boardcode, rootid);
        logger.info("refreshReply rootid=" + boardcode);
    }

    public void refreshUpdate(long id) {
        removeFromCache(id);
    }

    /**
     * 当更改文章所属用户博客的目录时,更新相应缓存
     * @param id int
     * @param userName String
     * @param isBlog boolean
     * @param blogUserDir String
     * @param oldBlogUserDir String
     */
    public void refreshUpdate(long id, String userName, boolean isBlog, String blogUserDir, String oldBlogUserDir) {
        removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(
                userName, blogUserDir));
        removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(
                userName, blogUserDir));
        removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(
                userName, oldBlogUserDir));
        removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(
                userName, oldBlogUserDir));

        // 当贴子由非博客贴在论坛中编辑为博客贴时,刷新全部文章的列表
        removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(
                userName, ""));
        removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(
                userName, ""));

        refreshUpdate(id);
    }

    public void refreshMsgAndList(String boardcode, long id) {
        removeFromCache(id);
        removeFromCacheThreadsBlock(boardcode);
        removeFromCacheThreadsCount(boardcode);
    }

    public void refreshDelRoot(String boardcode, long id, String userName, boolean isBlog, String blogUserDir) {
         removeFromCache(id);
         removeFromCacheThreadsBlock(boardcode);
         removeFromCacheThreadsCount(boardcode);

         removeFromCacheMsgBlock(boardcode, id);
         removeFromCacheMsgCount(boardcode, id);

         if (isBlog) {
             removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(userName, blogUserDir));
             removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(userName, blogUserDir));

             // 刷新博客的列表
             removeFromCacheThreadsBlock(MsgDb.getVirtualBoardcodeOfBlogUser(
                     userName, ""));
             removeFromCacheThreadsCount(MsgDb.getVirtualBoardcodeOfBlogUser(
                    userName, ""));
         }
    }

    public void refreshDelReply(String boardcode, long rootid, long id) {
         removeFromCache(id);
         removeFromCacheMsgBlock(boardcode, rootid);
         removeFromCacheMsgCount(boardcode, rootid);
         //logger.info("refreshDelReply: boardcode=" + boardcode + " rootid=" + rootid + " id=" + id);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -