- 浏览: 583741 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (253)
- java (84)
- python (22)
- 设计模式 (12)
- 数据结构和算法 (7)
- ibatis (1)
- 数据挖掘 (2)
- 集体智慧读书笔记 (1)
- ubuntu (4)
- lucene (11)
- 算法 第4版 (11)
- apache mina (16)
- memcached (1)
- android (9)
- netty (6)
- mongodb (2)
- maven (2)
- openfire (2)
- 服务端 (21)
- 产品 (0)
- apache (1)
- 选择 (2)
- 构架WEB高性能站点 (7)
- redis (8)
- 诗词歌赋 (3)
- 源代码阅读 (5)
- 前端 (1)
- javascript (3)
- guice (1)
- 分布式 (5)
- 总结-2014 (4)
- jvm (1)
最新评论
-
liu_jiaqiang:
写的挺好
maven多项目管理 -
H972900846:
我想知道哪里整的,如果是自己写的,那有点牛呀如果是抄的请说明出 ...
SSL身份认证原理 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
定向网站爬虫---初级例子 -
fenglingabc:
经过测试,parameterType="java.u ...
mybatis获取主键和存储过程返回值 -
jyghqpkl:
[u][/u] ...
Cookie的secure 属性
转载:http://www.iteye.com/topic/544021
1:缓存的原理:
package cache; /** * <p> * Description: 缓存 * </p> */ public class Cache { private String key;// 缓存ID private Object value;// 缓存数据 private long timeOut;// 更新时间 private boolean expired; // 是否终止 public Cache() { super(); } public Cache(String key, Object value, long timeOut, boolean expired) { this.key = key; this.value = value; this.timeOut = timeOut; this.expired = expired; } public String getKey() { return key; } public long getTimeOut() { return timeOut; } public Object getValue() { return value; } public void setKey(String string) { key = string; } public void setTimeOut(long l) { timeOut = l; } public void setValue(Object object) { value = object; } public boolean isExpired() { return expired; } public void setExpired(boolean b) { expired = b; } }
2:
package cache; import java.util.*; /** * <p>Description: 管理缓存</p> * 可扩展的功能:当chche到内存溢出时必须清除掉最早期的一些缓存对象,这就要求对每个缓存对象保存创建时间 * * @version 1.0 */ public class CacheManager { private static HashMap cacheMap = new HashMap(); //单实例构造方法 private CacheManager() { super(); } //获取布尔值的缓存 public static boolean getSimpleFlag(String key){ try{ return (Boolean) cacheMap.get(key); }catch(NullPointerException e){ return false; } } public static long getServerStartdt(String key){ try { return (Long)cacheMap.get(key); } catch (Exception ex) { return 0; } } //设置布尔值的缓存 public synchronized static boolean setSimpleFlag(String key,boolean flag){ if (flag && getSimpleFlag(key)) {//假如为真不允许被覆盖 return false; }else{ cacheMap.put(key, flag); return true; } } public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){ if (cacheMap.get(key) == null) { cacheMap.put(key,serverbegrundt); return true; }else{ return false; } } //得到缓存。同步静态方法 private synchronized static Cache getCache(String key) { return (Cache) cacheMap.get(key); } //判断是否存在一个缓存 private synchronized static boolean hasCache(String key) { return cacheMap.containsKey(key); } //清除所有缓存 public synchronized static void clearAll() { cacheMap.clear(); } //清除某一类特定缓存,通过遍历HASHMAP下的所有对象,来判断它的KEY与传入的TYPE是否匹配 public synchronized static void clearAll(String type) { Iterator i = cacheMap.entrySet().iterator(); String key; ArrayList<String> arr = new ArrayList<String>(); try { while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); key = (String) entry.getKey(); if (key.startsWith(type)) { //如果匹配则删除掉 arr.add(key); } } for (int k = 0; k < arr.size(); k++) { clearOnly(arr.get(k)); } } catch (Exception ex) { ex.printStackTrace(); } } //清除指定的缓存 public synchronized static void clearOnly(String key) { cacheMap.remove(key); } //载入缓存 public synchronized static void putCache(String key, Cache obj) { cacheMap.put(key, obj); } //获取缓存信息 public static Cache getCacheInfo(String key) { if (hasCache(key)) { Cache cache = getCache(key); if (cacheExpired(cache)) { //调用判断是否终止方法 cache.setExpired(true); } return cache; }else return null; } //载入缓存信息 public static void putCacheInfo(String key, Cache obj, long dt,boolean expired) { Cache cache = new Cache(); cache.setKey(key); cache.setTimeOut(dt + System.currentTimeMillis()); //设置多久后更新缓存 cache.setValue(obj); cache.setExpired(expired); //缓存默认载入时,终止状态为FALSE cacheMap.put(key, cache); } //重写载入缓存信息方法 public static void putCacheInfo(String key,Cache obj,long dt){ Cache cache = new Cache(); cache.setKey(key); cache.setTimeOut(dt+System.currentTimeMillis()); cache.setValue(obj); cache.setExpired(false); cacheMap.put(key,cache); } //判断缓存是否终止 public static boolean cacheExpired(Cache cache) { if (null == cache) { //传入的缓存不存在 return false; } long nowDt = System.currentTimeMillis(); //系统当前的毫秒数 long cacheDt = cache.getTimeOut(); //缓存内的过期毫秒数 if (cacheDt <= 0||cacheDt>nowDt) { //过期时间小于等于零时,或者过期时间大于当前时间时,则为FALSE return false; } else { //大于过期时间 即过期 return true; } } //获取缓存中的大小 public static int getCacheSize() { return cacheMap.size(); } //获取指定的类型的大小 public static int getCacheSize(String type) { int k = 0; Iterator i = cacheMap.entrySet().iterator(); String key; try { while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); key = (String) entry.getKey(); if (key.indexOf(type) != -1) { //如果匹配则删除掉 k++; } } } catch (Exception ex) { ex.printStackTrace(); } return k; } //获取缓存对象中的所有键值名称 public static ArrayList<String> getCacheAllkey() { ArrayList a = new ArrayList(); try { Iterator i = cacheMap.entrySet().iterator(); while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); a.add((String) entry.getKey()); } } catch (Exception ex) {} finally { return a; } } //获取缓存对象中指定类型 的键值名称 public static ArrayList<String> getCacheListkey(String type) { ArrayList a = new ArrayList(); String key; try { Iterator i = cacheMap.entrySet().iterator(); while (i.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); key = (String) entry.getKey(); if (key.indexOf(type) != -1) { a.add(key); } } } catch (Exception ex) {} finally { return a; } } }
3:
package cache; /** * 测试类 * @author Song Shi Chao * */ class Test { public static void main(String[] args) { // System.out.println(CacheManager.getSimpleFlag("alksd")); // CacheManager.putCache("abc", new Cache()); // CacheManager.putCache("def", new Cache()); // CacheManager.putCache("ccc", new Cache()); // CacheManager.clearOnly(""); Cache c = new Cache(); for (int i = 0; i < 10; i++) { CacheManager.putCache("" + i, c); } System.out.println(CacheManager.getCacheSize()); // CacheManager.putCache("aaaaaaaa", c); // CacheManager.putCache("abchcy;alskd", c); // CacheManager.putCache("cccccccc", c); // CacheManager.putCache("abcoqiwhcy", c); // System.out.println("删除前的大小:"+CacheManager.getCacheSize()); // CacheManager.getCacheAllkey(); // CacheManager.clearAll("aaaa"); // System.out.println("删除后的大小:"+CacheManager.getCacheSize()); // CacheManager.getCacheAllkey(); } }
发表评论
-
protobuf-dt插件
2015-03-24 13:16 1439protobuf-dt: 安装前先安装xtext 可 ... -
java循环标签
2015-03-20 16:13 627今天看 源码的时候 看到 一个小语法 参考: ... -
java程序性能优化 --阅读
2014-10-14 17:56 721闲着,真实无聊; 发现一本好书《java程序性能优 ... -
jetty invalid entry CRC问题
2014-08-04 11:42 16331: http://stackoverflow.com/qu ... -
guice注入
2014-05-24 12:13 9466Google Guice3.0: http://code. ... -
eclipse快捷键
2014-05-21 16:01 5931: clrl+alt+r : 最常用,快速定位到文件 2 ... -
java clone
2014-05-16 17:04 540转:http://www.blogjava.net/ora ... -
ThreadLocal
2014-05-13 18:39 787简单介绍一下ThreadLocal的原理:1.Thread ... -
hession
2014-04-30 12:33 708一、首先先说Hessian是什么? Hessian:he ... -
冒泡和快速排序java
2014-04-19 18:01 7751: 冒泡最简单一种: /** * 算法效率o ... -
java生产者和消费者模型三种实现
2014-04-19 17:51 13791: 生产者和消费者的问题,生产者生产产品到缓冲区,消费者 ... -
单例模式
2014-03-14 16:06 756今天看到群里,关于单例模式的多线程下的安全问题: 1:最 ... -
freemarker的使用
2014-02-28 16:42 8651:freemarker eclipse插件安装方法:ht ... -
java 引用类型和内存泄露
2013-11-21 17:48 596http://blog.csdn.net/luoshenfu ... -
java泛型
2013-11-07 13:52 446Class<T>在实例化的时候,T要替换成具体 ... -
filter执行顺序
2013-10-12 11:16 1132多个筛选器的运行顺序取决于下列规则: 将 filt ... -
spring rmi远程调用
2013-09-09 11:48 11891:以前用jmi发布服务,实现分布式的一种方式,远程调用, ... -
spring mvc返回204状态码
2013-07-24 09:27 39381:204是没内容 不跳转的 代表请求成功的意思 ... -
editplus去掉多余空行
2013-07-19 21:05 7541: ^[ \t]*\n 用正则表达式替换 -
spring3 aop 使用详细
2013-06-06 11:10 01:目标:拦截所有的@Controller中的方法 ...
相关推荐
分布式缓存作为一种在多节点...当然,由于篇幅限制,无法详细展开每个章节的内容,但可以肯定的是,分布式缓存的原理和Go语言实现是一门深奥的技术领域,需要开发者具备扎实的网络编程、并发控制以及性能优化的知识。
本文将深入探讨浏览器缓存的实现原理。 首先,浏览器缓存的获取路径包括服务器、本地缓存以及缓存服务器。当用户发起一个HTTP请求时,浏览器会根据服务器返回的HTTP响应头信息来决定是从哪个来源获取内容。页面文件...
对于图片加载缓存,理解其工作原理并合理运用图片加载库能有效优化性能;而对于CircleProgress,掌握自定义视图的绘制和动画机制是提升应用用户体验的重要手段。如果你在运行示例代码时遇到问题,可能需要自行调试和...
这种抽象允许开发者在不依赖特定缓存实现的情况下,轻松地在应用中添加缓存功能。 1. **Spring缓存注解**: - `@Cacheable`:标记在方法上,表示该方法的返回结果应被缓存。每次调用时,Spring会检查缓存中是否有...
web服务器缓存实现原理,通过chrome f12观察web服务器缓存 后台action命中缓存hit Via X-cache X-Cache-Lookup
1. **缓存原理** - 缓存是一种存储技术,用于暂时存储经常访问的数据,减少对主存储器或数据库的访问,以提高数据处理速度。Ehcache 使用内存和磁盘混合存储,兼顾速度与容量。 2. **Ehcache 结构** - Ehcache ...
这个压缩包中的"Cache"文件夹可能包含了一些自定义的缓存实现,你可以通过阅读源码了解其具体实现细节,学习如何构建自己的图片加载和缓存系统。"JavaApk源码说明.txt"可能提供了对源码的简要说明,而"下载更多打包...
- **Cache**: 实现缓存逻辑的核心类,包含缓存的添加、获取和删除操作。 - **DefaultCache**: Ehcache 的默认实现,包含了缓存的内存和磁盘存储管理。 - **MemoryStore**: 负责在 JVM 内存中存储元素的类。 - **...
**缓存Memcached-1.2.1:深入理解与应用** Memcached是一款高效、轻量级的分布式内存对象缓存系统,广泛应用于Web应用程序中,以减轻数据库负载,提高数据访问速度。在这个版本1.2.1中,我们探讨其核心特性、工作...
首先,我们来理解一下图片加载缓存的基本原理。图片加载缓存通常包括内存缓存和磁盘缓存两部分。当用户请求图片时,系统首先会在内存缓存中查找,如果找到则直接返回,如果未找到,则会尝试从磁盘缓存中读取。若磁盘...
二级缓存的工作原理是:当某次查询的结果被缓存后,后续相同查询可以直接从缓存中获取,无需再次执行SQL,从而提高了性能。 集成Redis作为二级缓存的优势在于,Redis是一款高效的内存数据结构存储系统,支持多种...
"点这里查看更多优质源码~.url"可能是指向其他开源项目或资源的链接,这些项目可能提供了更多的图片加载和缓存实现,可以作为学习和借鉴的资料。 "JavaApk源码说明.txt"可能是对源码的简要说明,包括如何运行项目、...
文章中提及的面试者programmerone对缓存的理解非常浅显,仅限于知道使用hashtable实现简单的缓存机制,而没有深入了解缓存的工作原理、缓存算法的选择标准和缓存框架的使用。面试官提出的问题主要集中在缓存的基本...
分布式缓存是现代高并发应用中缓解数据库压力的关键技术,Memcached作为一款广泛使用的分布式内存缓存系统,其设计和实现原理对于理解分布式系统至关重要。本文主要探讨了Memcached的分布式实现,以及它如何通过简单...
本示例源码基于afinal框架,展示了如何实现图片的简单异步缓存加载,这对于移动开发App,尤其是那些需要大量展示图片的应用来说,是至关重要的。下面我们将详细探讨afinal框架及其在图片异步加载中的应用。 **一、...
Hibernate 4是该框架的一个版本,它涵盖了关系映射、事务处理、原理、性能优化以及二级缓存的使用与最佳实践。以下知识点详细解释了这些关键概念。 1. 关系映射:在Hibernate框架中,关系映射是指对象与数据库表...
本讲的主题聚焦于缓存接入的多级缓存实现以及分布式部署的落地实践,旨在提升系统的响应速度和整体效率。 首先,我们来看项目部署的两种基本形式:单体部署和分离部署。单体部署将项目与MySQL数据库部署在同一台高...
5. **考虑使用更高效的缓存实现**:如Android的DiskLruCache和OkHttp的HttpCache,它们已经考虑了性能和资源管理。 饼图分析不仅适用于开发阶段,也适用于应用发布后的性能监控。通过收集用户反馈和持续监控,...
标题中的"SMT缓存机"是指一种用于表面贴装技术(Surface Mount Technology)生产线上的设备...这个设计图对于理解SMT生产线上的缓存机工作原理、设计思路和制造流程都有很大的帮助,是机械工程和自动化技术结合的实例。
Memcache是一种广泛使用的分布式内存缓存系统,常用于减轻数据库负载,提高Web应用的性能。在本文中,我们将深入探讨Memcache的工作原理、优势以及如何在实际项目中使用它。 一、Memcache简介 Memcache是由Danga ...