缓存算法

缓存算法主要从以下方面考虑

  • 成本,如果缓存对象有不同的成本,应该把那些难以获得的对象缓存起来
  • 容量,如果缓存对象有不同的大小,应该把那些大的缓存对象清除,这样可以缓存更多的数据对象
  • 时间,缓存对象可以持有一个过期时间,方便系统判定缓存对象是否可用

Least Frequently Used(LFU)

为每个缓存对象计算它们被使用的频率,把使用频率最低的数据换出

Least Recently User (LRU)

换出最近最少使用的缓存对象

将最近被访问的缓存对象放置在缓存池的顶部,每次直接淘汰缓存池底部的缓存数据

Least Recently Used 2(LRU2)

相对于LRU,解决了批量访问非热点数据对热点数据缓存的影响

把被两次访问过的对象放入缓存池,当缓存池满了之后,换出最少使用的缓存对象.因为需要跟踪所有访问对象,并统计访问次数,访问负载会随访问数据量线性增长,在大容量数据下会有容量问题

Two Queues(2Q)

将访问数据放到LRU中,如果这个对象再次被访问,将被转移至另一个更大的LRU缓存中.

Adaptive Replacement Cache(ARC)

由两个LRU L1 L2组成,L1包含最近仅被使用过一次的数据,L2包含最近被使用过两次的数据.

Most Recently Used(MRU)

换出最近最多被使用的数据

缓存系统中找出最近最少使用数据对象是时间复杂度非常高的运算,该算法的目的是减少换出数据的时间复杂度

每次缓存数据被使用,会将被使用的数据放到栈的顶端,栈满后,将栈顶元素替换为新的数据对象

First in First out(FIFO)

直接通过队列维护缓存对象,先进先出

Second Chance

与FIFO的立即换出数据不同,该算法会检查准备换出数据的访问标志位,没有使用过会被立即换出,否则清除该标记位然后将该缓存对象当做新的缓存数据加入队列,形成类似环队列的数据访问形式,

CLock

使用环形列表存储缓存对象,不需要像second chance对有标记的缓存对象进行移位操作

持有一个装有缓存对象的环形列表,头指针指向列表中最老的缓存对象.当缓存mess发生并没有新的缓存空间时,如果标志是0,直接用新的缓存对象替代这个缓存对象;如果标志位为1,将当前标记位清空为0,并将指针递增后,重复该过程,直到新的缓存对象被放入.

Simple time-based

通过绝对的时间周期去失效缓存对象,新增的对象会被保存特定的时间周期,统一的失效时间会导致所有缓存会在同一时间失效,可能导致大量数据请求的激增

Extended time-based expiration

通过相对时间去失效缓存对象,对新增的缓存对象,会保存特定的时间

Sliding time-based expiration

通过最后访问时间更新缓存对象的生命周期

Read More

缓存

缓存命中

一个数据条目根据一个标记被找到,称为缓存命中

Cache Miss

  • 如果还有缓存空间,查找到的数据对象会被存储到缓存中
  • 如果缓存空间满了,会按照特定的缓存算法操作缓存中的数据

存储成本

数据放入缓存需要的时间和空间成本称为缓存的存储成本

索引成本

索引缓存数据需要的时间成本

缓存失效

缓存数据的源数据发生更新时,缓存中的数据即为失效缓存,应该执行缓存失效操作

Read More

随机数生成算法

到如今,计算机还没有办法生成“正真的”随机数,但伪随机数生成算法就足够了。这些算法在许多领域都有应用,如网络连接,加密技术,安全哈希算法,网络游戏,人工智能,以及问题分析中的条件初始化。

Read More

数据压缩算法

数据压缩算法有很多种,哪种最好?这要取决于应用方向,压缩mp3,JPEG和MPEG-2文件都不一样。

哪里能见到它们?不仅仅是文件夹中的压缩文件。你正在看的这个网页就是使用数据压缩算法将信息下载到你的电脑上。除文字外,游戏,视频,音乐,数据储存,云计算等等都是。它让各种系统更轻松,效率更高。

Read More

比例微积分算法

Proportional Integral Derivative Algorithm

飞机,汽车,电视,手机,卫星,工厂和机器人等等事物中都有这个算法的身影。

简单来讲,这个算法主要是通过“控制回路反馈机制”,减小预设输出信号与真实输出信号间的误差。只要需要信号处理,或电子系统来控制自动化机械,液压和加热系统,都需要用到这个算个法。

没有它,就没有现代文明。

Read More

链接分析算法

Link Analysis

在因特网时代,不同入口间关系的分析至关重要。从搜索引擎和社交网站,到市场分析工具,都在不遗余力地寻找因特网的正真构造。

链接分析算法一直是这个领域最让人费解的算法之一,实现方式不一,而且其本身的特性让每个实现方式的算法发生异化,不过基本原理却很相似。

链接分析算法的机制其实很简单:你可以用矩阵表示一幅“图“,形成本征值问题。本征值问题可以帮助你分析这个“图”的结构,以及每个节点的权重。这个算法于1976年由Gabriel Pinski和Francis Narin提出。

谁会用这个算法呢?Google的网页排名,Facebook向你发送信息流时(所以信息流不是算法,而是算法的结果),Google+和Facebook的好友推荐功能,LinkedIn的工作推荐,Youtube的视频推荐,等等。

普遍认为Google是首先使用这类算法的机构,不过其实早在1996年(Google 问世2年前)李彦宏就创建的“RankDex”小型搜索引擎就使用了这个思路。而Hyper Search搜索算法建立者马西莫·马奇奥里也曾使用过类似的算法。这两个人都后来都成为了Google历史上的传奇人物。

Read More

整数质因子分解算法

Integer factorization

这其实是一个数学算法,不过已经广泛应用与计算机领域。如果没有这个算法,加密信息也不会如此安全。通过一系列步骤将,它可以将一个合成数分解成不可再分的数因子。

很多加密协议都采用了这个算法,比如RSA算法。

Read More

哈希安全算法

Secure-Hash-Algorithm

确切地说,这不是一种算法,而是一组加密哈希函数,由美国国家标准技术研究所首先提出。无论是你的应用商店,电子邮件和杀毒软件,还是浏览器等等,都使用这种算法来保证你正常下载,以及是否被“中间人攻击”,或者“网络钓鱼”。

Read More

RSA非对称加密算法

毫不夸张地说,如果没有这个算法对密钥学和网络安全的贡献,如今因特网的地位可能就不会如此之高。现在的网络毫无安全感,但遇到钱相关的问题时我们必需要保证有足够的安全感,如果你觉得网络不安全,肯定不会傻乎乎地在网页上输入自己的银行卡信息。

RSA算法,密钥学领域最牛叉的算法之一,由RSA公司的三位创始人提出,奠定了当今的密钥研究领域。用这个算法解决的问题简单又复杂:保证安全的情况下,如何在独立平台和用户之间分享密钥。

Read More