狠狠撸

狠狠撸Share a Scribd company logo
缓存基础 研发二部  陆松林
?
Contents 缓存的起源、定义、概念的扩充 1 缓存种类和例子 2 缓存命中率和失效问题 3 互动类 cache 模型和代码实例 4
一、缓存的起源、定义、概念的扩充 缓存的起源 Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“ cache” 赋予“ safekeeping storage” 的涵义,用于电脑工程领域。
一、缓存的起源、定义、概念的扩充 缓存的早期定义 主存、  CPU 、较小的存储器。
一、缓存的起源、定义、概念的扩充 概念的扩充 不仅在 CPU 与主存  内存与硬盘 硬盘与网络 java 容器与数据库
二、缓存种类和例子 种类 边缘缓存 页面缓存 逻辑缓存 数据缓存 边缘缓存 页面缓存 逻辑缓存 数据缓存
二、缓存种类和例子 第一种 第二种 第三种 第四种 单个对象的缓存 一条记录 ,  一个对象 列表缓存 如回帖 ID 列表 第一页,或所有的 长度的缓存 比如一个论坛板块里有多少个帖子,这样才方便实现分页 。 散列的缓存 复杂一点的 group , sum , count 查询,比如一个论坛里按点击数排名的最 HOT 的帖子列表。 数据缓存
二、缓存种类和例子 例子 1 员工 秘书 老板
二、缓存种类和例子 例子 2
三、缓存命中率和失效问题 缓存的命中率 2 、缓存的粒度 1 、应用场景 3 、架构的设计 4 、缓存的容量和缓存的有效期 其它
三、缓存命中率和失效问题 缓存失效 1 、一致性哈希算法 2 、缓存多份 3 、实现缓存的持久化或半持久化
三、缓存命中率和失效问题 缓存清除策略 1 、  FIFO  , first in first out( 先进先出 ) 2 、  LFU  ,  Less Frequently Used( 最少被使用 ) 3 、  LRU  , Least Recently Used( 最近最少使用 )
四、互动类 cache 模型和代码实例 列表缓存模型
四、互动类 cache 模型和代码实例 对象缓存模型
四、互动类 cache 模型和代码实例 长度缓存和非正确模型
四、互动类 cache 模型和代码实例 缓存实现 通过使用容器类型的数据结构(如 map 、 set )把经常需要使用的数据存储到内存中,进行管理;包括数据的查看,同步,删除(过期机制)等。
四、互动类 cache 模型和代码实例 代码实例 private void addCacheData(String key, Object data, boolean check) { if (Runtime. getRuntime().freeMemory() < 5L*1024L*1024L) {// 虚拟机内存小于 10 兆,则清除缓存 log.warn(&quot;WEB 缓存:内存不足,开始清空缓存! &quot;); removeAllCacheData(); return; } else if(check && cacheMap.containsKey(key)) { log.warn(&quot;WEB 缓存: key 值 = &quot; + key + &quot;  在缓存中重复 ,  本次不缓存! &quot;); return; } cacheMap.put(key, new CacheData(data)); } 添加数据缓存 private Hashtable cacheMap;// 存放缓存数据 设定存储容器
四、互动类 cache 模型和代码实例 代码实例 public Object getCacheData(String key, long intervalTime, int maxVisitCount) { CacheData cacheData = (CacheData)cacheMap.get(key); if (cacheData == null) { return null; } if ( intervalTime > 0 && (System. currentTimeMillis() - cacheData.getTime()) > intervalTime) { removeCacheData(key); return null; } if (maxVisitCount > 0 && (maxVisitCount - cacheData.getCount()) <= 0) { removeCacheData(key); return null; } else { cacheData.addCount(); } return cacheData.getData(); } 取得缓存中的数据
四、互动类 cache 模型和代码实例 代码实例 /** * *  移除缓存中的数据 * @param key */ public void removeCacheData(String key) { cacheMap.remove(key); } /** * *  移除所有缓存中的数据 * */ public void removeAllCacheData() { cacheMap.clear(); } 删除数据缓存
缓存基础 实例代码延伸 Cache 属性 name : 缓存名称( key ),唯一,索引 maxElementsInMemory : 内存的缓存最大对象数 overflowToDisk : 对象写到基于硬盘的缓存 intervalTime : 过期时间 .... 池管理, socket,  hash 算法 , B+tree … . memcached ehcache Cache 产物 oscache ttserver Terracotta Redis ....
Thank You !

More Related Content

缓存基础