Kode想去设计一个缓存
/***
*
* @Author: Kode
* @Date: 2018年7月5日22:29:13
*/
什么是缓存?
专门用一块物理内存来存储一些数据,这就是缓存
缓存的作用
解决传输速度的问题。CPU的计算速度和IO传输的速度不是一个量级上的,工程师们为了把这个差距减小,利用二八原理和局部访问性原理,提出缓存这个概念,就是在CPU和内存之间加一块专用的物理器件。
缓存的设计
提起设计缓存,应该从使用缓存会引起什么问题入手,然后根据这些问题想出一个好的解决方案。
我觉得缓存本质问题就是你存的内容被访问的频率很低。怎么解决这个问题呢? 也就是怎么设计一个好的缓存结构呢?
在设计缓存结构之前,得先普及一些专业名词,毕竟我们是专业的嘛!
命中
当客户发起一个请求(我们说他想要查看一个产品信息),我们的应用接受这个请求,并且如果是在第一次检查缓存的时候,需要去数据库读取产品信息。如果在缓存中,一个条目通过一个标记被找到了,这个条目就会被使用、我们就叫它缓存命中。 如果没有命中的话,那肯定就是缓存没命中。
Cache miss
- 如果还有缓存的空间,那么,没有命中的对象会被存储到缓存中来
- (缓存算法)如果缓存满了,而又没有命中缓存,那么就会按照某一种策略,把缓存中的旧对象踢出,而把新的对象加入缓存池。而这些策略统称为替代策略,这些策略会决定到底应该提出哪些对象。
存储成本
当没有命中时,我们会从数据库取出数据,然后放入缓存。而把这个数据放入缓存所需要的时间和空间,就是存储成本。
失效
当存在缓存中的数据需要更新时,就意味着缓存中的这个数据失效了。
替代策略
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想去设计一个缓存相关推荐
- Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统
理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...
- 如何去设计一个自适应的网页设计或HTMl5
如何去设计一个自适应的网页设计或HTMl5 如今移动互联网随着3G的普及,越来越火爆,更多需求跟随而来!APP应用市场和APP应用数量成倍成倍的增长!从而给移动互联网带来新的挑战! 移动设备正超过桌面 ...
- MATLAB用fwind1函数去设计一个近似圆对称的二维带通滤波器
%用fwind1函数去设计一个近似圆对称的二维带通滤波器 %通带频率范围为[0.1 0.5] %生成的矩阵Hd包含了期望带通频率响应 %使用freqspace可以创建频率向量f1和f2 [f1,f2] ...
- 设计一个缓存策略,动态缓存热点数据
写在前面,因为我们最近的大作业项目需要用到热点排行这个功能,因为我们是要使用Elasticsearch来存储数据,然后最初设想是在ES中实现这个热点排行的功能,但是经过仔细思考,在我们这个项目中使用E ...
- 现阶段有50万资金,想去开一个店,从事什么行业好?
手上就50万现金,如果说现在你不知道,做什么,应该在哪个行业创业,那我就告给你那你现在就不要去创业因为创业,我们只做我们一些擅长了解的行业, 如果说,你不了解相关行业,你就去创业,你失败的可能性一定会 ...
- 怎样去设计一个音乐网站
有没有设计过音乐网站的朋友? 分享一下经验..或者音乐网站是否具备音乐版权问题.
- 设计一个可供人类文明生存繁衍的乌托邦,是我想为之奋斗一生的目标
→ 关键词 → 乌托邦世界.人工智能哲学.后人类主义 → Zion吴熠宸 Zion是北卡罗来纳大学教堂山分校本科在读大三的学生,主修计算机科学和戏剧学双学位,辅修纯艺术. 这次专访我们暂且抛开专业技能 ...
- 如何设计一个高并发的秒杀架构?
写在前面 高并发下如何设计秒杀系统?这是一个高频面试题. 这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识. 秒杀一般出现在商城的促销活动中,指定了一定数量(比如: ...
- 如何设计一个低代码平台
编者按:近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大.那么,如果用户想从零开始设计一个低代码平台,该如何做呢? 一.面向领域 低代码的本 ...
最新文章
- nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
- OVS bridgebundleport分析(三十四)
- ubuntu 12.04 LTS u盘安装
- 取得MS SQL 2000数据库一个表的所有列名
- 获取list泛型_泛型
- 关系数据库还是NoSQL数据库
- leetcode 有效的字母异位词
- 令人窒息!iPhone充电时自燃烧毁房子,到底是谁的锅?
- 七年级计算机与信息安全教案,计算机与信息安全教案.docx
- Android的setVisibility的三个参数
- 实现应用于AlphaGo得增强式学习算法,代码实现1
- 天堂2私服架设技术教程
- iOS 适配iPhone XR/XS/XS MAX
- safari浏览网页打开速度很慢怎样解决
- python中一元二次方程的虚根_一元二次方程的概念和习题(老师用)
- 美颜SDK是什么?美颜SDK和美颜APP有什么区别?
- Linux kernel Panic后自动重启机器的设置
- 1.5-20:球弹跳高度的计算
- Python selenium实现全自动购买火车票
- idea 创建spark项目
热门文章
- 树莓派Zero W电台
- 清华大学python基础_清华大学出版社-图书详情-《Python基础入门-微课视频版》
- 精选课程 | Python数据分析实战(学术)
- 《金融学》笔记 第九章 货币需求、供给、均衡
- 串流大师使用方法 视频课件
- 【Arduino】Arduino IDE使用教程-超详细
- 大型数据中心云平台建设中网络的知识及实践
- 如何实现在屏幕上有漂亮的刀光效果并有星星环绕
- realtek ALC883 装上win7后没有声音怎么解决?
- SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER解决方案