代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
OsCache缓存监控刷新工具
作者:
修洁
/ 发布于
2016/7/25
/
1053
OSCache是一套用Java编写的缓存框架(或者说解决方案),它主要用于页面缓存,Servlet缓存,或者其它任意的对象,且支持集群。但是居然没有OsCache的监控工具,所以只能用反射机制暴力破解了
import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opensymphony.oscache.base.Cache; import com.opensymphony.oscache.base.NeedsRefreshException; import com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache; import com.opensymphony.oscache.web.ServletCacheAdministrator; /** * OsCache缓存工具类 * * @author 00fly * @version [版本号, 2016-4-7] * @see [相关类/方法] * @since [产品/模块版本] */ public class OsCacheUtil { static Logger log = LoggerFactory.getLogger(OsCacheUtil.class); /** * 通过反射机制获取Cache私有成员变量cacheMap * * @return */ public static AbstractConcurrentReadCache getCacheMap(ServletContext ctx) { // 获取Cache对象实例 Cache cache = ServletCacheAdministrator.getInstance(ctx).getAppScopeCache(ctx); AbstractConcurrentReadCache cacheMap = null; try { Field field = Cache.class.getDeclaredField("cacheMap"); field.setAccessible(true); cacheMap = (AbstractConcurrentReadCache)field.get(cache); field.setAccessible(false); } catch (Exception e) { e.printStackTrace(); log.warn("can't get oscache Cache.cacheMap!", e); } return cacheMap; } /** * 获取ServletCache的全部Application Scope的cache * * @return * @throws NeedsRefreshException */ public static Map<String, Object> getAppScopeCaches(ServletContext ctx) { Cache cache = ServletCacheAdministrator.getInstance(ctx).getAppScopeCache(ctx); AbstractConcurrentReadCache cacheMap = getCacheMap(ctx); Map<String, Object> map = new HashMap<String, Object>(); for (Object key : cacheMap.keySet()) { String keyStr = (String)key; Object value; try { value = cache.getFromCache(keyStr); map.put(keyStr, value); } catch (NeedsRefreshException e) { e.printStackTrace(); log.error("failed get cacheMap data: key={}", keyStr); cache.cancelUpdate(keyStr); } } return map; } /** * 释放缓存内容 * * @param ctx * @param key * @see [类、类#方法、类#成员] */ public static void removeEntry(ServletContext ctx, String key) { Cache cache = ServletCacheAdministrator.getInstance(ctx).getAppScopeCache(ctx); log.info("------释放缓存: key={} ------", key); cache.removeEntry(key); } /** * 释放全部缓存内容 * * @param ctx * @param key * @see [类、类#方法、类#成员] */ public static void removeAll(ServletContext ctx) { Cache cache = ServletCacheAdministrator.getInstance(ctx).getAppScopeCache(ctx); AbstractConcurrentReadCache cacheMap = getCacheMap(ctx); if (cacheMap.isEmpty()) { return; } for (Object key : cacheMap.keySet()) { String keyStr = (String)key; log.info("------释放缓存: key={} ------", keyStr); cache.removeEntry(keyStr); } } } <%@page contentType="text/html; charset=UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@page import="java.util.Map,com.toolsbean.OsCacheUtil"%> <% String action = request.getParameter("action"); String key = request.getParameter("key"); if ("remove".equals(action) && key != null && key.length() > 0) { OsCacheUtil.removeEntry(request.getServletContext(), key); } else if ("removeAll".equals(action)) { OsCacheUtil.removeAll(request.getServletContext()); } Map<String, Object> map = OsCacheUtil.getAppScopeCaches(request.getServletContext()); request.setAttribute("map", map); %> <html> <head> <meta charset="utf-8"> <title>查看 Oscache缓存数据</title> </head> <body align="center" style="font-size:15px"> <a href="#" onclick="location.reload();">刷新当前页面</a> <a href="?action=removeAll">释放全部缓存</a> <table border="1" cellpadding="10" cellspacing="1" style="font-size:14px"> <tr> <th width="2%">No</th> <th width="5%">Key</th> <th>Value</th> </tr> <c:forEach var="entry" items="${map}" varStatus="status"> <tr width="95%"> <td>${status.count}</td> <td>${entry.key} <a href="?action=remove&key=${entry.key}">释放缓存</a></td> <td><c:out value="${entry.value}" escapeXml="true" /></td> </tr> </c:forEach> </table> <a href="#" onclick="location.reload();">刷新当前页面</a> <a href="?action=removeAll">释放全部缓存</a> </body> </html>
试试其它关键字
缓存监控
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
修洁
贡献的其它代码
(
11
)
.
添加联合唯一约束性条件
.
函数计算两个坐标点距离
.
通过字符串调用函数
.
遍历panel 上的控件,然后操作
.
OsCache缓存监控刷新工具
.
ORACLE 触发器实例
.
固定textarea文本域尺寸
.
删除,关闭浏览器等情况提示
.
js实现单击自动选中文本
.
web实现页面部分打印(转)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3