1.缓存意义

可扩展性,可靠性和高性能是现代J2EE应用程序的必备要求。不管客户端类型如何,请求处理通常都涉及到对性能有负面影响的操作,比如从不同的数据源收集信息和执行复杂的计算。 缓存是提高企业应用程序性能的最重要的实践之一。 每个应用程序都有自己的缓存要求,必须不断调整以确保不会发生性能下降。尤其是分布式缓存系统,缓存服务的目标。大量远程调用速度特别慢,会占用宝贵的网络带宽,引发性能问题。

2.缓存的基本准则

  • 通过添加缓存来减少远程调用

  • 缓存只读数据,如地区信息

  • 给定的一组参数值总是返回相同的信息,如果可以容忍陈旧数据,则可缓存动态数据。

  • 要缓存的数据量应该是可控的,否则最终会使用太多的内存

  • 跨集群缓存动态数据并同步每个节点中的数据是困难的

  • 应该避免缓存实时数据(如股市行情)和敏感数据

  • 缓存可以引入与安全和审计有关的问题??

2.声明式缓存优点

声明式缓存不涉及任何编程,因此它是一种更容易,更快速的应用和调整缓存服务的方式。

高速缓存服务的配置可以完全在Spring IoC容器中完成。

声明式缓存特点:

  • 提供一个统一,更简单,更易于使用的API

  • 提供声明式缓存刷新以防止陈旧数据的存储

  • 支持不同的声明式配置策略

  • 可以很容易地扩展来支持额外的缓存提供程序


反之 编程式缓存

  • 代码难以理解,核心功能难以看清

  • 代码难以维护。对缓存提供者的API被嵌入并遍布在应用程序中

  • 代码很难测试

  • 代码很难重用


所以编程式风格带来的优势:

  • 更清晰地分离责任

  • 更高的模块化

  • 设计决定的晚期约束,开发人员可以推迟做出有关缓存实现和调优的决策。



分布式缓存流程

caching-interceptor-118047.jpgflushing-interceptor-127107.jpg


缓存启动并运行后,您将查找需要将缓存对象存储在文件系统中的情况,或者在群集中的节点中缓存缓存中的更改。缓存提供者能够借助Java序列化来执行这些功能,这意味着要存储在缓存中的对象应该实现接口java.io.Serializable。