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

📄 lrucachehandler.java

📁 这个weblogging 设计得比较精巧
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }            catch (Exception e)            {                if (mLogger.isDebugEnabled())                {                    StringBuffer sb = new StringBuffer();                    sb.append("Probably a client abort exception, key=");                    sb.append(key);                    mLogger.error(sb.toString());                }            }                    }    }    /**     * Purge entire cache.     */    public synchronized void flushCache(HttpServletRequest req)    {        mPageCache.clear();    }    /**     * Purge user's entries from cache.     */    public synchronized void removeFromCache(HttpServletRequest req, UserData user)    {        // TODO: can we make this a little more precise, perhaps via regex?        String rssString = "/rss/" + user.getUserName(); // user's pages        String pageString = "/page/" + user.getUserName(); // user's RSS feeds        String mainRssString = "/rss_"; // main RSS feed        List purgeList = new ArrayList();                Iterator keys = mPageCache.keySet().iterator();        while (keys.hasNext())        {            String key = (String) keys.next();                        if (key.indexOf(rssString)!=-1 || key.indexOf(pageString)!=-1 || key.indexOf(mainRssString)!=-1)             {                purgeList.add(key);            }        }                Iterator purgeIter = purgeList.iterator();        while (purgeIter.hasNext())        {            String key = (String) purgeIter.next();            mPageCache.remove(key);        }                if (mLogger.isDebugEnabled())        {            StringBuffer sb = new StringBuffer();            sb.append("Purged, count=");            sb.append(purgeList.size());            sb.append(", user=");            sb.append(user.getUserName());            mLogger.debug(sb.toString());        }            }        public synchronized void timeoutCache()     {        if (mTimeoutRatio == 1.0)        {            mLogger.debug("Timing out whole cache: " + mName);            mPageCache.clear();           }        else         {            int numToTimeout = (int)(mTimeoutRatio * mPageCache.size());            mLogger.debug(                "Timing out " + numToTimeout + " of " + mPageCache.size()                + " entries from cache: " + mName);            ArrayList allKeys = new ArrayList(mPageCache.keySet());            for (int i=numToTimeout; i>0; i--)             {                mPageCache.remove(allKeys.get(i));            }        }    }        /**      * Get from cache. Synchronized because "In access-ordered linked hash      * maps, merely querying the map with get is a structural modification"      */    public synchronized Object getFromCache(String key)     {        Object entry = mPageCache.get(key);                if (entry != null && mLogger.isDebugEnabled())        {            hits++;        }        return entry;    }    public synchronized void putToCache(String key, Object entry)     {        mPageCache.put(key, entry);        if (mLogger.isDebugEnabled())        {            misses++;                        StringBuffer sb = new StringBuffer();            sb.append("Missed, cache size=");            sb.append(mPageCache.size());            sb.append(", hits=");            sb.append(hits);            sb.append(", misses=");            sb.append(misses);            sb.append(", key=");            sb.append(key);            mLogger.debug(sb.toString());        }    }    public String generateEntryKey(String key,                        HttpServletRequest request, int scope, String language)    {        StringBuffer cBuffer = new StringBuffer(AVERAGE_KEY_LENGTH);        // Append the language if available        if (language != null)        {            cBuffer.append(FILE_SEPARATOR).append(language);        }                //cBuffer.append(FILE_SEPARATOR).append(request.getServerName());                if (key != null)        {            cBuffer.append(FILE_SEPARATOR).append(key);        }        else        {            String generatedKey = request.getRequestURI();            if (generatedKey.charAt(0) != FILE_SEPARATOR_CHAR)            {                cBuffer.append(FILE_SEPARATOR_CHAR);            }            cBuffer.append(generatedKey);            cBuffer.append("_").append(request.getMethod()).append("_");            generatedKey = getSortedQueryString(request);            if (generatedKey != null)            {                try                {                    java.security.MessageDigest digest =                         java.security.MessageDigest.getInstance("MD5");                    byte[] b = digest.digest(generatedKey.getBytes());                    cBuffer.append("_");                    // Base64 encoding allows for unwanted slash characters.                    cBuffer.append(toBase64(b).replace('/', '_'));                }                catch (Exception e)                {                    // Ignore query string                }            }        }        return cBuffer.toString();    }    protected String getSortedQueryString(HttpServletRequest request)    {        Map paramMap = request.getParameterMap();        if (paramMap.isEmpty())        {            return null;        }        Set paramSet = new TreeMap(paramMap).entrySet();        StringBuffer buf = new StringBuffer();        boolean first = true;        for (Iterator it = paramSet.iterator(); it.hasNext();)        {            Map.Entry entry = (Map.Entry) it.next();            String[] values = (String[]) entry.getValue();            for (int i = 0; i < values.length; i++)            {                String key = (String) entry.getKey();                if ((key.length() != 10) || !"jsessionid".equals(key))                {                    if (first)                    {                        first = false;                    }                    else                    {                        buf.append('&');                    }                    buf.append(key).append('=').append(values[i]);                }            }        }        // We get a 0 length buffer if the only parameter was a jsessionid        if (buf.length() == 0)        {            return null;        }        else        {            return buf.toString();        }    }    /**     * Convert a byte array into a Base64 string (as used in mime formats)     */    private static String toBase64(byte[] aValue)    {        int byte1;        int byte2;        int byte3;        int iByteLen = aValue.length;        StringBuffer tt = new StringBuffer();        for (int i = 0; i < iByteLen; i += 3)        {            boolean bByte2 = (i + 1) < iByteLen;            boolean bByte3 = (i + 2) < iByteLen;            byte1 = aValue[i] & 0xFF;            byte2 = (bByte2) ? (aValue[i + 1] & 0xFF) : 0;            byte3 = (bByte3) ? (aValue[i + 2] & 0xFF) : 0;            tt.append(m_strBase64Chars.charAt(byte1 / 4));            tt.append(m_strBase64Chars.charAt((byte2 / 16)                            + ((byte1 & 0x3) * 16)));            tt.append(((bByte2) ? m_strBase64Chars.charAt((byte3 / 64)                            + ((byte2 & 0xF) * 4)) : '='));            tt.append(((bByte3) ? m_strBase64Chars.charAt(byte3 & 0x3F) : '='));        }        return tt.toString();    }}

⌨️ 快捷键说明

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