Why Use Cache

举例1--CPU--L1/L2--内存--磁盘
CPU需要数据时先从L1/L2中读取,如果没有到内存中找,如果还没有会到磁盘上找。

CPU多级缓存架构-现代CPU多级缓存
级别越小的缓存,越接近CPU, 意味着速度越快且容量越少。
这样设置的原因是 级别越低的缓存 成本高,容量有限。

举例2--Maven
还有如用过Maven的朋友都应该知道,我们找依赖的时候,先从本机仓库找,再从本地服务器仓库找,最后到远程仓库服务器找。

举例3--京东仓储
还有如京东的物流为什么那么快?他们在各个地都有分仓库,如果该仓库有货物那么送货的速度是非常快的

Github Code Example

github: spring-cache-practice

项目简介

  • spring-cache-practice
    • spring-single-deck-cache (Spring Boot 单缓存使用 use Redis Cache)
    • spring-custom-cache (Spring Boot Custom Cache 自定义缓存类型)
    • spring-multi-deck-cache (二级缓存 Redis 一级缓存EhcacheCache)

Spring Cache Abstraction

spring-framework cache guide

spring boot import Initializr use:

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

其核心在 spring-context-support中.

缓存使用注意事项:

This approach works only for methods that are guaranteed to return the same output (result) for a given input (or arguments) no matter how many times it is executed.

在使用缓存的时候,需注意仅适用于多次调用都返回相同结果的时候。

Spring Cache & JSR 107 注解规范

Spring Cache & JSR 107 注解规范

自定义缓存来实现多级缓存

多进程缓存

If you have a multi-process environment (that is, an application deployed on several nodes), you need to configure your cache provider accordingly. Depending on your use cases, a copy of the same data on several nodes can be enough. However, if you change the data during the course of the application, you may need to enable other propagation mechanisms.

如果在多进程环境下使用缓存,在修改数据时,需要将缓存传播修改。

spring-multi-deck-cache (二级缓存 Redis 一级缓存EhcacheCache) 中使用Redis Pub/Sub 功能让使得缓存可以传播修改.

Appendix

Linux Install Redis

  1. Dowload Redis 官网 https://redis.io/
  2. UnZip / make && make PREFIX=/usr/local/redis install

Redis Command

  1. Login Redis e.g ./redis-cli -h 127.0.0.1 -p 6379 -a pwd
  2. 查看Redis信息 info
  3. 查看当前 pub/sub PUBSUB CHANNELS