1.介绍
将动态的资源存储为静态资源, 从而省去一些重复的计算,逻辑处理等步骤, 快速响应. 同时, 只要两种介质之间存在速度差, 就会产生缓存来缓解这种矛盾. |
2.分类
按照存储介质分类: 文件缓存 内存缓存 CPU高速缓存: CPU Cache //算不算分类之一 TBD |
3.文件缓存[含数据库]
文件缓存 数据库缓存 MongoDB //存在磁盘上 |
4.内存缓存
memcached redis 等 |
5.常用缓存服务器软件
memcached redis MongoDB //其实是当做数据库来使用的,或者说更偏向于DB. 从名字上便可以看出. |
6.Memcached
参见: |
7.Redis
参见: |
8.MongoDB
参见: |
9.缓存更新策略
缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。 常见的策略有如下几种://推荐前三种
先进先出策略 FIFO(First In,First Out) 先进先出,底层是利用双向链表,新来的数据放到链表的尾部,如果链表塞满了就删除头部的。
最少使用策略 LFU(Least Frequently Used) 思路: 如果一个数据在最近一段时间内使用次数最少,那么将来一段时间使用的可能性也很少, LFU 是基于访问次数的。 实现:两个HASHMAP, 一个是用来存储数据的, key-value. 一个是用来存储次数的, key-time. 当访问一个key 的时候就在 key-time, 也就是的第二个hashmap 对应的time 加1. 删除的时候就寻找最少time 的那个。
最近最少使用策略 LRU(Least Recently Used) 如果数据最近被访问过,那么将来访问的几率也很高。 实现:新增加的数据放到头部。每当缓存命中,就把数据放到尾部。删除的时候就删除尾部的数据
随机淘汰策略/算法: 从数据库中随机删除一个key
TTL淘汰策略/算法: 从数据库中删除一个最快过期的key
后续补充 ... |
10.补充
1.mongodb,以及redis和mongodb的差别,实际使用时选择应该做哪些方面的考虑 回复: Redis是Key-Value数据库,数据存放在内存中,查询和写入都是在内存中进行操作。当然Redis也支持持久化,只是持久化只是Redis的功能之一,并不是Redis的强项。通常,你可以把Redis称之为缓存。支持的数据类型丰富,包括字符串、哈希、列表、集合、有序集合,同时还支持基数统计,地理空间以及索引半径查询,数据流等。 MongoDB是面向文档数据库,功能强大,是非关系型数据库中最像关系型数据库的,处理增删改查也可以增加条件,类似于RDBMS一样灵活。 总的来说,Redis就像是一架飞机一样,查询及写入性能极佳,但是存储的数据规模有限。
后续补充 ... |
11.参考
//MongoDB是什么?看完你就知道了 https://time.geekbang.org/column/article/41013 //06 | 链表(上):如何实现LRU缓存淘汰算法? <<PHP核心技术与最佳实践>> P415 列旭松 陈文 |
后续补充
...