java缓存(下)

Posted shuzhongruyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java缓存(下)相关的知识,希望对你有一定的参考价值。

  外存:除计算机内存和CPU缓存以外的存储器,如常见的C、D、E、F盘,还有U盘,软盘,硬盘,光盘之类。断电后仍能保存数据的完整性。

  内存:用于与CPU沟通。计算机中所有程序的进行都是在内存中进行,CPU中所有的运算数据以及和外存之间交换的数据都存储在其中。数据断电不保存。

  高速缓冲:一般情况下,CPU的处理数据速度非常快,而内存的速度相对非常慢,易造成性能问题,为解决这个问题采用高速缓冲。原理:系统在高速缓冲区存储CPU经常访问的数据,当CPU访问某数据时,先在缓冲区找,找不到再到内存中找,极大的提高了CPU的运算效率。

  当某些资源或者数据会被频繁的使用,而这些资源或数据存储在系统外部,比如数据库、硬盘文件等,那么每次操作这些数据的时候都从数据库或者硬盘上去获取,速度会很慢,会造成性能问题。

  大多时候我们做开发的都在无意识与缓存打交道,常见的多线程内存可见,字符流以及IOC都是缓存

  1、Map

  基于内存缓存,一个map可以搞定引用对象的缓存,存在的问题是保存对象的有效性和生命周期无法控制,处理不当会导致内存急剧上升,不适合用于大数据量的缓存。

  需要定义一个缓存管理器,用于实现缓存逻辑,实现对象的增删改查,支持值对象的泛型,实际就是将数据放在Map里面

    技术分享图片

  在service层导入上面CacheContext

    技术分享图片

  2、springCache  注解@Cacheable(value = "accountCache")

  这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中, 否则返回缓存中的对象。这里的缓存中的 key 就是参数 accountName,value 就是 Account 对象。“accountCache”缓存是在 spring*.xml 中定义的名称。我们还需要一个spring 的配置文件来支持基于注释的缓存

  在上面的基础上添加AccountService2

    技术分享图片

  spring 中需要配置CachMenager,bean里面需要配置accountCache

  注意这个 spring 配置文件有一个关键的支持缓存的配置项:

 <cache:annotation-driven /> 

    技术分享图片

 

以上是关于java缓存(下)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA缓存技术

java缓存(下)

Java怎么清除缓存

如何解决多线程高并发场景下的 Java 缓存问题?

Java内存缓存-通过Map定制简单缓存

Java内存缓存-通过Map定制简单缓存