memcached(十六)缓存基本知识
缓存简介
缓存,让数据更接近于使用者;
工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存);
缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/IO)的且对于相同的请求有相同的计算结果的数据。如CPU--L1/L2--内存--磁盘就是一个典型的例子,CPU需要数据时先从L1/L2中读取,如果没有到内存中找,如果还没有会到磁盘上找。还有如用过Maven的朋友都应该知道,我们找依赖的时候,先从本机仓库找,再从本地服务器仓库找,最后到远程仓库服务器找;还有如京东的物流为什么那么快?他们在各个地都有分仓库,如果该仓库有货物那么送货的速度是非常快的。
缓存命中率
即从缓存中读取数据的次数与总读取次数的比率,命中率越高越好:
命中率=从缓存中读取次数/(总读取次数[从缓存中读取次数+从慢速设备上读取的次数])
Miss率=没有从缓存中读取的次数/(总读取次数[从缓存中读取次数+从慢速设备上读取的次数])
这是一个非常重要的监控指标,如果做缓存一定要健康这个指标来看缓存是否工作良好;
缓存策略
Evictionpolicy
移除策略,即如果缓存满了,从缓存中移除数据的策略;常见的有LFU、LRU、FIFO:
FIFO(FirstInFirstOut):先进先出算法,即先放入缓存的先被移除;
LFU(LeastFrequentlyUsed):最久未使用算法,使用时间距离现在最久的那个被移除;
LRU(LeastRecentlyUsed):最近最少使用算法,一定时间段内使用次数(频率)最少的那个被移除;
TTL(TimeToLive)
存活期,即从缓存中创建时间点开始直到它到期的一个时间段(不管在这个时间段内有没有访问都将过期)
TTI(TimeToIdle)
空闲期,即一个数据多久没被访问将从缓存中移除的时间。