缓存学习笔记-1

    缓存是存储使用频繁数据的临时地方,从而加快系统响应速度。缓存在构建高性能web系统有着很重要的作用。如果要对一个系统进行优化,那么使用缓存是最快最有效的手段。

缓存术语

    命中(Cache hit):当客户端发起一个请求(比如说一个产品的信息)时,我们会检测这个产品是否在缓存中,如果没有的话加入到缓存中,反之我们称之为命中了。

    漏掉(Cache miss):很简单,虽然在缓存中存在,但是没有客户端请求。这里需要注意亮点

    1、如果还有缓存空间,那么,没有命中的对象会被存储到缓存中

    2、如果缓存满了,而有没有命中缓存,那么就会按照某一种策略把旧对象清除,进而把新的对象加入缓存中。

    存储成本:把数据放入缓存所需的时间和空间,就是存储成本

    索引成本:和存储成本类似,只不过是在查找缓存的时候

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

    替代策略:当缓存没有命中是,并且缓存容量已经满了,就需要在清除旧对象,进而加入新对象。而到底应该清除什么样的对象,就由替代策略决定。

    最有替代策略:就是想把缓存中最没用的条目给踢出去,但是未来是不能够被预知的,所以这种策略是不可能实现的。但是有很多策略,都是朝着这个目前去努力。

缓存策略的分类

    基于访问时间:此类算法按缓存项的被访问时间来组织缓存队列。如LRU

    基于访问频率:此类算法按缓存项的被访问频率来组织缓存队列。如LFU,2Q

    访问时间与频率兼顾:通过兼顾访问时间与频率,使得在数据访问模式变化是缓存策略任由较好的性能。此类算法具有一个可调或自适应的参数,通过该参数的调节使缓存策略在基于访问时间与频率间取得一定的平衡。

常用缓存算法简介

    Least Frequently Used (LFU)

    计算每个缓存对象被使用的频率,把不常用的缓存对象清除。

    Least Recently User (LRU)

    根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”

    Least Recently Used k(LRU-k)

    LRU-k中的k代表最近使用的次数,一次LRU可以认为是LRU-1,此次类推。LRU-k主要的目的是为了解决LRU算法“缓存污染”的问题。其核心思想是将“最近使用过1次的的判断作战为最近使用过k次”

    Two queues(2Q)

    2Q算法类似于LRU-2,不同点在于2Q将LRU-2算法中的访问历史队列改成一个FIFO缓存队列,即:2Q算法有两个缓存队列,一个是FIFO队列,一个是LRU队列。

    Multi Queue(MQ)

    MQ算法根据访问频率将数据划分为多个队列,不同的队列具有不同的访问优先级,其核心思想是:优先缓存访问次数多的数据。

时间: 2024-11-05 15:59:55

缓存学习笔记-1的相关文章

.NET缓存学习笔记

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script src="http://libs.

缓存学习笔记-2

在缓存设计中有两点是必须要考虑的: 缓存的数据和目标数据的一致性问题 缓存的过期策略 其中,缓存的过期策略是重点,因为缓存的存储空间往往是有限的,当缓存中的存储块被用完,就需要把过期的缓存移除掉,所以我们需要设计一种良好的缓存淘汰算法来实现.业界中常用的淘汰算法有 FIFO:First In First Out ,先进先出 LRU:Least Recently Used,最近最少使用 LFU:Least Frequently Used,最不经常使用 LRU和LFU的区别是,LFU算法是根据一段时

memcache redis 缓存学习笔记

0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 1.redis安装 a.rz redis.gz.tar b.tar解压 c.make编译 d../redis-server &  服务端启动 e.redis-cli 客户端启动 1)notice:注意默认启动 redis-server redis.conf 会报错 , 原因参考redis有三种启动的

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

Android-Universal-Image-Loader学习笔记(3)--内存缓存

前面的两篇博客写了文件缓存,现在说说Android-Universal-Image-Loader的内存缓存,该内存缓存涉及到的类如图所示 这些类的继承关系如下图所示: 如同文件缓存一样,内存缓存涉及的接口也有两个:MemoryCacheAware 和MemoryCache,其中MemoryCache只是简单的继承了MemoryCacheAware并没有声明其他的方法.MemoryCacheAware接口的方法如下: @Deprecated public interface MemoryCache

[原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

memcached学习笔记5--socke操作memcached 缓存系统

使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen()套接字连接memcached 同样执行CRUD require_once(CLASS_PATH.'memcached-client.php');//CLASS_PATH 是我定义的类文件文件夹路径 $mc = new memcached( array( 'servers' => array( '1

mybatis学习笔记(13)-查询缓存之二级缓存

mybatis学习笔记(13)-查询缓存之二级缓存 mybatis学习笔记13-查询缓存之二级缓存 二级缓存原理 开启二级缓存 调用pojo类实现序列化接口 测试方法 useCache配置 刷新缓存就是清空缓存 应用场景和局限性 本文主要讲mybatis的二级缓存,二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的. 二级缓存原理 首先开启mybatis的二级缓存. sqlS