/***
*
* @Author: Kode
* @Date: 2018年7月5日22:29:13
*/

什么是缓存?

专门用一块物理内存来存储一些数据,这就是缓存

缓存的作用

解决传输速度的问题。CPU的计算速度和IO传输的速度不是一个量级上的,工程师们为了把这个差距减小,利用二八原理和局部访问性原理,提出缓存这个概念,就是在CPU和内存之间加一块专用的物理器件。

缓存的设计

提起设计缓存,应该从使用缓存会引起什么问题入手,然后根据这些问题想出一个好的解决方案。

我觉得缓存本质问题就是你存的内容被访问的频率很低。怎么解决这个问题呢? 也就是怎么设计一个好的缓存结构呢?

在设计缓存结构之前,得先普及一些专业名词,毕竟我们是专业的嘛!

命中

当客户发起一个请求(我们说他想要查看一个产品信息),我们的应用接受这个请求,并且如果是在第一次检查缓存的时候,需要去数据库读取产品信息。如果在缓存中,一个条目通过一个标记被找到了,这个条目就会被使用、我们就叫它缓存命中。 如果没有命中的话,那肯定就是缓存没命中。

Cache miss

  1. 如果还有缓存的空间,那么,没有命中的对象会被存储到缓存中来
  2. (缓存算法)如果缓存满了,而又没有命中缓存,那么就会按照某一种策略,把缓存中的旧对象踢出,而把新的对象加入缓存池。而这些策略统称为替代策略,这些策略会决定到底应该提出哪些对象。

存储成本

当没有命中时,我们会从数据库取出数据,然后放入缓存。而把这个数据放入缓存所需要的时间和空间,就是存储成本。

失效

当存在缓存中的数据需要更新时,就意味着缓存中的这个数据失效了。

替代策略

Least Frequently Used(LFU)

Least Recently User(LRU)

First in First out(FIFO)

Random Cache

算法各种各样,但基本上都是在出现的频率这方面下功夫。下面讲一下具体的实现结构(数据结构)

在Java中应该先定义一个缓存对象,这个对象应该有被命中数量的属性。

public class CacheElement{private Object objectValue;private Object objectKey;private int index;private int hitCount; // getters and setters}

后面就是用什么类型的集合去存储了。可以选用的是:

HashMap Array LinkedHashMap 等等。

后面有时间在研究研究这些。以上内容有自己见解,也有参考、

参考资料:缓存、缓存算法和缓存框架简介

Kode想去设计一个缓存相关推荐

  1. Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  2. 如何去设计一个自适应的网页设计或HTMl5

    如何去设计一个自适应的网页设计或HTMl5 如今移动互联网随着3G的普及,越来越火爆,更多需求跟随而来!APP应用市场和APP应用数量成倍成倍的增长!从而给移动互联网带来新的挑战! 移动设备正超过桌面 ...

  3. MATLAB用fwind1函数去设计一个近似圆对称的二维带通滤波器

    %用fwind1函数去设计一个近似圆对称的二维带通滤波器 %通带频率范围为[0.1 0.5] %生成的矩阵Hd包含了期望带通频率响应 %使用freqspace可以创建频率向量f1和f2 [f1,f2] ...

  4. 设计一个缓存策略,动态缓存热点数据

    写在前面,因为我们最近的大作业项目需要用到热点排行这个功能,因为我们是要使用Elasticsearch来存储数据,然后最初设想是在ES中实现这个热点排行的功能,但是经过仔细思考,在我们这个项目中使用E ...

  5. 现阶段有50万资金,想去开一个店,从事什么行业好?

    手上就50万现金,如果说现在你不知道,做什么,应该在哪个行业创业,那我就告给你那你现在就不要去创业因为创业,我们只做我们一些擅长了解的行业, 如果说,你不了解相关行业,你就去创业,你失败的可能性一定会 ...

  6. 怎样去设计一个音乐网站

    有没有设计过音乐网站的朋友? 分享一下经验..或者音乐网站是否具备音乐版权问题.

  7. 设计一个可供人类文明生存繁衍的乌托邦,是我想为之奋斗一生的目标

    → 关键词 → 乌托邦世界.人工智能哲学.后人类主义 → Zion吴熠宸 Zion是北卡罗来纳大学教堂山分校本科在读大三的学生,主修计算机科学和戏剧学双学位,辅修纯艺术. 这次专访我们暂且抛开专业技能 ...

  8. 如何设计一个高并发的秒杀架构?

    写在前面 高并发下如何设计秒杀系统?这是一个高频面试题. 这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识. 秒杀一般出现在商城的促销活动中,指定了一定数量(比如: ...

  9. 如何设计一个低代码平台

    编者按:近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大.那么,如果用户想从零开始设计一个低代码平台,该如何做呢? 一.面向领域 低代码的本 ...

最新文章

  1. nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
  2. OVS bridgebundleport分析(三十四)
  3. ubuntu 12.04 LTS u盘安装
  4. 取得MS SQL 2000数据库一个表的所有列名
  5. 获取list泛型_泛型
  6. 关系数据库还是NoSQL数据库
  7. leetcode 有效的字母异位词
  8. 令人窒息!iPhone充电时自燃烧毁房子,到底是谁的锅?
  9. 七年级计算机与信息安全教案,计算机与信息安全教案.docx
  10. Android的setVisibility的三个参数
  11. 实现应用于AlphaGo得增强式学习算法,代码实现1
  12. 天堂2私服架设技术教程
  13. iOS 适配iPhone XR/XS/XS MAX
  14. safari浏览网页打开速度很慢怎样解决
  15. python中一元二次方程的虚根_一元二次方程的概念和习题(老师用)
  16. 美颜SDK是什么?美颜SDK和美颜APP有什么区别?
  17. Linux kernel Panic后自动重启机器的设置
  18. 1.5-20:球弹跳高度的计算
  19. Python selenium实现全自动购买火车票
  20. idea 创建spark项目

热门文章

  1. 树莓派Zero W电台
  2. 清华大学python基础_清华大学出版社-图书详情-《Python基础入门-微课视频版》
  3. 精选课程 | Python数据分析实战(学术)
  4. 《金融学》笔记 第九章 货币需求、供给、均衡
  5. 串流大师使用方法 视频课件
  6. 【Arduino】Arduino IDE使用教程-超详细
  7. 大型数据中心云平台建设中网络的知识及实践
  8. 如何实现在屏幕上有漂亮的刀光效果并有星星环绕
  9. realtek ALC883 装上win7后没有声音怎么解决?
  10. SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER解决方案