代码语言
.
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
】
缓存机制实现(不通过框架实现)
作者:
磨砂轮
/ 发布于
2015/1/4
/
426
import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import net.blogjava.frankiegao123.log.slf4j.Log; import net.blogjava.frankiegao123.log.slf4j.LogFactory; /** * System.Config 配置缓存 * * @author frankiegao123 * 2010-6-10 下午02:48:35 */ @Component("configCache") public class ConfigCache implements ConfigService { private final static Log log = LogFactory.getLog(ConfigCache.class); /** * 更新缓存时记录的时间 */ private volatile long time = 0L; /** * 正在更新缓存时的门闩,为 true 时表示当前没有更新缓存,为 true 时表示当前正在更新缓存 */ private volatile boolean updateGate = true; /** * 缓存容器 */ private Map<String, SysConfig> cache = new ConcurrentHashMap<String, SysConfig>(); private CommonDao commonDao; @Autowired public ConfigCache(CommonDao commonDao) { this.commonDao = commonDao; log.info("initializing cache..."); refreshCache(); time = System.currentTimeMillis(); log.info("initialized cache finished, cache size: {}, set cache time to current: {}, cache timeout: {}ms", cache.size(), time, ConfigConstant.CACHE_TIMEOUT); } /** * 根据配置的键名获取配置值 * * @param configKey * @return * @author frankiegao123 * 2010-6-10 上午11:18:33 */ public SysConfig getSysConfig(String configKey) { long current = System.currentTimeMillis(); if(updateGate && isTimeout(current)) { synchronized (this) { if(updateGate) { timeoutSynRefresh(current); } } } return cache.get(configKey); } /** * 超时时更新缓存。该方法需要在同步环境中调用 * @param current * @author frankiegao123 * 2010-6-10 上午11:16:30 */ private void timeoutSynRefresh(long current) { updateGate = false; log.info("refresh cache start..., time out: {}, size: {}, set updateGate to false", (current - time) / 1000.0, cache.size()); try { refreshCache(); time = current; log.info("refresh cache finished, size after update: {}, set cache time to current: {}", cache.size(), String.valueOf(time)); } catch (Exception e) { log.error("refresh cache failed", e); } finally { updateGate = true; log.info("refresh cache finished, set updateGate to true"); } } /** * 更新缓存数据 * * @author frankiegao123 * 2010-6-10 上午11:15:55 */ private void refreshCache() { List<SysConfig> configs = commonDao.getSysConfigs(); for(Iterator<SysConfig> i = configs.iterator(); i.hasNext(); ) { SysConfig config = i.next(); cache.put(config.getKey(), config); } commonDao.clear(); SysConfig config = cache.get(SysConfig.TEST_KEY); if(config == null) { log.error("refresh cache, cannot find TEST_KEY"); } else { log.info("refresh cache, find TEST_KEY = [{}]", config.getValue()); } } /** * 缓存是否超时 * * @param current * @return * @author frankiegao123 * 2010-6-10 上午11:16:12 */ private boolean isTimeout(long current) { return (current - time >= ConfigConstant.CACHE_TIMEOUT); } Collection<SysConfig> getSysConfigs() { return Collections.unmodifiableCollection(cache.values()); } int getSize() { return cache.size(); } long getTime() { return time; } boolean isUpdateGate() { return updateGate; } void refresh() { time = 0L; log.info("refresh: reset cache time to 0"); getSysConfig("none"); log.info("refresh: refresh cache finished, cache: {0}", String.valueOf(time)); } }
试试其它关键字
缓存
缓存机制
同语言下
.
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转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
磨砂轮
贡献的其它代码
(
1
)
.
缓存机制实现(不通过框架实现)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3