0
缓存基础 研发二部  陆松林
 
Contents 缓存的起源、定义、概念的扩充 1 缓存种类和例子 2 缓存命中率和失效问题 3 互动类 cache 模型和代码实例 4
一、缓存的起源、定义、概念的扩充 <ul><li>缓存的起源 </li></ul><ul><ul><li>Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“ cache” 赋予“ safekeeping storage...
一、缓存的起源、定义、概念的扩充 <ul><li>缓存的早期定义 </li></ul><ul><ul><li>主存、  CPU 、较小的存储器。 </li></ul></ul>
一、缓存的起源、定义、概念的扩充 <ul><li>概念的扩充 </li></ul><ul><ul><li>不仅在 CPU 与主存  </li></ul></ul><ul><ul><li>内存与硬盘 </li></ul></ul><ul><ul>...
二、缓存种类和例子 <ul><li>种类 </li></ul>边缘缓存 页面缓存 逻辑缓存 数据缓存 边缘缓存 页面缓存 逻辑缓存 数据缓存
二、缓存种类和例子 第一种 第二种 第三种 第四种 单个对象的缓存 一条记录 ,  一个对象 列表缓存 如回帖 ID 列表 第一页,或所有的 长度的缓存 比如一个论坛板块里有多少个帖子,这样才方便实现分页 。 散列的缓存 复杂一点的 group...
二、缓存种类和例子 <ul><li>例子 1 </li></ul>员工 秘书 老板
二、缓存种类和例子 <ul><li>例子 2 </li></ul>
三、缓存命中率和失效问题 缓存的命中率 2 、缓存的粒度 1 、应用场景 3 、架构的设计 4 、缓存的容量和缓存的有效期 其它
三、缓存命中率和失效问题 缓存失效 1 、一致性哈希算法 2 、缓存多份 3 、实现缓存的持久化或半持久化
三、缓存命中率和失效问题 缓存清除策略 1 、  FIFO  , first in first out( 先进先出 ) 2 、  LFU  ,  Less Frequently Used( 最少被使用 ) 3 、  LRU  , Least R...
四、互动类 cache 模型和代码实例 <ul><li>列表缓存模型 </li></ul>
四、互动类 cache 模型和代码实例 <ul><li>对象缓存模型 </li></ul>
四、互动类 cache 模型和代码实例 <ul><li>长度缓存和非正确模型 </li></ul>
四、互动类 cache 模型和代码实例 <ul><li>缓存实现 </li></ul>通过使用容器类型的数据结构(如 map 、 set )把经常需要使用的数据存储到内存中,进行管理;包括数据的查看,同步,删除(过期机制)等。
四、互动类 cache 模型和代码实例 <ul><li>代码实例 </li></ul>private void addCacheData(String key, Object data, boolean check) { if (Runtime...
四、互动类 cache 模型和代码实例 <ul><li>代码实例 </li></ul>public Object getCacheData(String key, long intervalTime, int maxVisitCount) { ...
四、互动类 cache 模型和代码实例 <ul><li>代码实例 </li></ul>/** * *  移除缓存中的数据 * @param key */ public void removeCacheData(String key) { cac...
缓存基础 <ul><li>实例代码延伸 </li></ul>Cache 属性 name : 缓存名称( key ),唯一,索引 maxElementsInMemory : 内存的缓存最大对象数 overflowToDisk : 对象写到基于硬盘...
Thank You !
Upcoming SlideShare
Loading in...5
×

缓存基础

1,068

Published on

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,068
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
28
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "缓存基础"

  1. 1. 缓存基础 研发二部 陆松林
  2. 3. Contents 缓存的起源、定义、概念的扩充 1 缓存种类和例子 2 缓存命中率和失效问题 3 互动类 cache 模型和代码实例 4
  3. 4. 一、缓存的起源、定义、概念的扩充 <ul><li>缓存的起源 </li></ul><ul><ul><li>Cache 一词来源于 1967 年的一篇电子工程期刊论文。其作者将法语词“ cache” 赋予“ safekeeping storage” 的涵义,用于电脑工程领域。 </li></ul></ul>
  4. 5. 一、缓存的起源、定义、概念的扩充 <ul><li>缓存的早期定义 </li></ul><ul><ul><li>主存、 CPU 、较小的存储器。 </li></ul></ul>
  5. 6. 一、缓存的起源、定义、概念的扩充 <ul><li>概念的扩充 </li></ul><ul><ul><li>不仅在 CPU 与主存 </li></ul></ul><ul><ul><li>内存与硬盘 </li></ul></ul><ul><ul><li>硬盘与网络 </li></ul></ul><ul><ul><li>java 容器与数据库 </li></ul></ul>
  6. 7. 二、缓存种类和例子 <ul><li>种类 </li></ul>边缘缓存 页面缓存 逻辑缓存 数据缓存 边缘缓存 页面缓存 逻辑缓存 数据缓存
  7. 8. 二、缓存种类和例子 第一种 第二种 第三种 第四种 单个对象的缓存 一条记录 , 一个对象 列表缓存 如回帖 ID 列表 第一页,或所有的 长度的缓存 比如一个论坛板块里有多少个帖子,这样才方便实现分页 。 散列的缓存 复杂一点的 group , sum , count 查询,比如一个论坛里按点击数排名的最 HOT 的帖子列表。 <ul><li>数据缓存 </li></ul>
  8. 9. 二、缓存种类和例子 <ul><li>例子 1 </li></ul>员工 秘书 老板
  9. 10. 二、缓存种类和例子 <ul><li>例子 2 </li></ul>
  10. 11. 三、缓存命中率和失效问题 缓存的命中率 2 、缓存的粒度 1 、应用场景 3 、架构的设计 4 、缓存的容量和缓存的有效期 其它
  11. 12. 三、缓存命中率和失效问题 缓存失效 1 、一致性哈希算法 2 、缓存多份 3 、实现缓存的持久化或半持久化
  12. 13. 三、缓存命中率和失效问题 缓存清除策略 1 、 FIFO , first in first out( 先进先出 ) 2 、 LFU , Less Frequently Used( 最少被使用 ) 3 、 LRU , Least Recently Used( 最近最少使用 )
  13. 14. 四、互动类 cache 模型和代码实例 <ul><li>列表缓存模型 </li></ul>
  14. 15. 四、互动类 cache 模型和代码实例 <ul><li>对象缓存模型 </li></ul>
  15. 16. 四、互动类 cache 模型和代码实例 <ul><li>长度缓存和非正确模型 </li></ul>
  16. 17. 四、互动类 cache 模型和代码实例 <ul><li>缓存实现 </li></ul>通过使用容器类型的数据结构(如 map 、 set )把经常需要使用的数据存储到内存中,进行管理;包括数据的查看,同步,删除(过期机制)等。
  17. 18. 四、互动类 cache 模型和代码实例 <ul><li>代码实例 </li></ul>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;// 存放缓存数据 设定存储容器
  18. 19. 四、互动类 cache 模型和代码实例 <ul><li>代码实例 </li></ul>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(); } 取得缓存中的数据
  19. 20. 四、互动类 cache 模型和代码实例 <ul><li>代码实例 </li></ul>/** * * 移除缓存中的数据 * @param key */ public void removeCacheData(String key) { cacheMap.remove(key); } /** * * 移除所有缓存中的数据 * */ public void removeAllCacheData() { cacheMap.clear(); } 删除数据缓存
  20. 21. 缓存基础 <ul><li>实例代码延伸 </li></ul>Cache 属性 name : 缓存名称( key ),唯一,索引 maxElementsInMemory : 内存的缓存最大对象数 overflowToDisk : 对象写到基于硬盘的缓存 intervalTime : 过期时间 .... 池管理, socket, hash 算法 , B+tree … . memcached ehcache Cache 产品 oscache ttserver Terracotta Redis ....
  21. 22. Thank You !
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×