码迷,mamicode.com
首页 > 编程语言 > 详细

java缓存机制(上) map和spring注解@Cacheable

时间:2018-02-28 20:49:24      阅读:3160      评论:0      收藏:0      [点我收藏+]

标签:交换   多线程   硬盘   添加   处理   数据库   account   算数   tca   

借鉴于   https://www.cnblogs.com/ms-grf/p/7249220.html

缓存的目的在于节省访问时间以及减轻大并发量访问带来资源上的消耗。

一、外存

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

二、内存

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

三、高速缓冲

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

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

四、java中常用的缓存机制

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

  缓存的深度从前端到数据库都有涉及,页面缓存效果最好,因为占用的资源比较少

  1、static HashMap

    基于内存缓存,一个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缓存机制(上) map和spring注解@Cacheable

标签:交换   多线程   硬盘   添加   处理   数据库   account   算数   tca   

原文地址:https://www.cnblogs.com/shuzhongruyu/p/8485607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!