一、基本概念

1. Cache

从cpu的一级和二级缓存、Internet的DNS、到浏览器缓存都可以看做是一种缓存。

a store of things that will be required in the future, and can be retrieved rapidly.

存贮数据(使用频繁的数据)的临时地方,因为取原始数据的代价太大了,所以我可以取得快一些

维基百科

cache

2. Cache hit

缓存命中(下图左) When a data element is requested from cache and the elements exists for the given key.

3. Cahe miss

缓存未命中(下图右)与Cache hit相反

缓存未命中

4. 缓存算法

缓存容量超过预设,如何踢掉“无用”的数据。

例如:LRU(Least Recently Used) FIFO(First Input First Output)Least Frequently Used(LFU) 等等

5. System-of-Record

真实数据源例如关系型数据库、其他持久性系统等等。也有英文书叫做authority data(权威数据)

6. serialization-and-deserialization

可以参考:序列化与反序列化(美团工程师写的,非常棒的文章)后面也有单独文章去分析。

序列化

7. 扩容

Scale Up (垂直扩容) 和 Scale out (水平扩容)

驴拉车,通常不是把一头驴养壮(有极限),而通常是一群驴去拉(当然每个个体也不能太差)。

服务器也是一样的道理,至少互联网是这样。单个机器的处理能力是有极限的,但是可以通过将多个机器组合的方式来处理问题

8. Write-through 和 write-behind

write

9. 阿姆而达定律

用于计算缓存加速比

二、缓存的种类或者类型

1. LocalCache(独立式)

例如Ehcache、BigMemory Go

  • (1) 缓存和应用在一个JVM中。
  • (2) 缓存间是不通信的,独立的。
  • (3) 弱一致性。

LocalCache

2. Standalone(单机)

  • 缓存和应用是独立部署的。
  • 缓存可以是单台。(例如memcache/redis单机等等)
  • 强一致性
  • 无高可用、无分布式。
  • 跨进程、跨网络

Standalone

3. Distributed(分布式)

例如Redis-Cluster, memcache集群等等

  • 缓存和应用是独立部署的。
  • 多个实例。(例如memcache/redis等等)
  • 强一致性或者最终一致性
  • 支持Scale Out、高可用。
  • 跨进程、跨网络

Distributed

4. Replicated(复制式)

缓存数据时同时存放在多个应用节点的,数据复制和失效的事件以同步或者异步的形式在各个集群节点间传播。(也是弱一致性)

这种用的不太多。

三、数据层访问速度

作为开发人员要记住这些量级

类型 时间
WorkingMemory& MainMemory(Heap) 纳秒级
OffHeap 微秒级
serialize 纳秒级(小)->微秒级(大)
Cache(Memcache/Redis) 微秒级
Store(Mysql/HBase) 微秒/秒级
内网RPC(Netty/dubbo) 毫秒级/秒级
外网RPC(HTTP) 毫秒级/秒级

参考文献