缓存详解

缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

Spring3.1开始引入了对Cache的支持

其使用方法和原理都类似于Spring对事务管理的支持,就是aop的方式。

Spring Cache是作用在方法上的,其核心思想是:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。

@CacheConfig

 在类上面统一定义缓存的名字,方法上面就不用标注了当标记在一个类上时则表示该类所有的方法都是支持缓存的

@CachePut

 根据方法的请求参数对其结果进行缓存和 @Cacheable 不同的是,它每次都                     会触发真实方法的调用一般可以标注在save方法上面

@CacheEvict

  针对方法配置,能够根据一定的条件对缓存进行清空一般标注在delete,update方法上面

Spring Cache现有缺陷

 如有一个缓存是存放 List<User>,现在你执行了一个 update(user)的方法,你一定不希望清除整个缓存而想替换掉update的元素这个在现有缓存实现上面没有很好的方案,只有每次dml操作的时候都清除缓存,配置如下@CacheEvict(allEntries=true)

业务逻辑实现类UserServiceImpl

package com.jege.spring.boot.data.jpa.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.jege.spring.boot.data.jpa.entity.User;
import com.jege.spring.boot.data.jpa.repository.UserRepository;
import com.jege.spring.boot.data.jpa.service.UserService;/*** 接口实现*/
@Service
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
@CacheConfig(cacheNames = "user")
public class UserServiceImpl implements UserService {@AutowiredUserRepository userRepository;@Override@Cacheable()public Page<User> findAll(Pageable pageable) {return userRepository.findAll(pageable);}@Override@Cacheable()public Page<User> findAll(Specification<User> specification, Pageable pageable) {return userRepository.findAll(specification, pageable);}@Override@Transactional@CacheEvict(allEntries=true)public void save(User user) {userRepository.save(user);}@Override@Transactional@CacheEvict(allEntries=true)public void delete(Long id) {userRepository.delete(id);}}

如果感觉不错的话记得点赞哟!!!

Spring Boot Cache之缓存相关推荐

  1. java+caching+system_浅谈Spring boot cache使用和原理

    缓存要解决的问题:一个程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的速度的.当我们需要重复地获取相同的数据的时候,我们一次又一次的请求数据库或者远程服务,导致大量的时间耗费在数据库查询或者 ...

  2. Spring Boot Cache使用与整合

    参考: 史上最全的Spring Boot Cache使用与整合 Spring Cache扩展:注解失效时间+主动刷新缓存 项目地址 使用本地Caffeine缓存 引入依赖包 <dependenc ...

  3. Spring Boot 入门之缓存和 NoSQL 篇(四)

    原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多 ...

  4. Spring Boot中的缓存支持(一)注解配置与EhCache使用

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  5. Spring Boot 集成 Redis 缓存

    Spring Boot 集成 Redis 缓存 在此章,我们将 SpringBoot 集成 Redis 缓存,Redis是一个开源的,基于内存的数据结构存储,可以用作数据库.缓存和消息代理,在本章仅讲 ...

  6. Spring Boot 结合 Redis 缓存

    Redis官网: 中:http://www.redis.cn/ 外:https://redis.io/ redis下载和安装 Redis官方并没有提供Redis的Windows版本,这里使用微软提供的 ...

  7. Spring Boot集成Redis缓存之模拟高并发场景处理

    前言 同样我们以上一篇文章为例子,搭建好环境之后,我欧美可以模拟高并发场景下,我们的缓存效率怎么样,到底能不能解决我们实际项目中的缓存问题.也就是如何解决缓存穿透? Spring Boot集成Redi ...

  8. Spring boot - 整合 Redis缓存(上)

    一.配置Pom文件 在使用spring boot 2.0整合redis时遇到了好多问题,网上很多例子都是1.x版本的.故2.0没有折腾好所以将2.0降到了1.5.降级后由于thymeleaf版本也会从 ...

  9. Spring Boot基础学习笔记18:Spring Boot整合Redis缓存实现

    文章目录 零.学习目标 一.Spring Boot支持的缓存组件 二.基于注解的Redis缓存实现 (一)安装与启动Redis (二)创建Spring Boot项目 - RedisCacheDemo0 ...

最新文章

  1. c51单片机时钟c语言程序,89c51 C语言单片机 时钟程序
  2. avoid error when import AssemblyKeyFile
  3. 运行js_最新双十一喵币自动领取方法,安卓手机通过js脚本完美运行
  4. wxWidgets:wxTreeCtrl 示例
  5. 每秒钟承载600万订单级别的无锁并行计算框架 Disruptor学习
  6. oracle fs1 2多少u,甲骨文FS1系列闪存的“大道至简”
  7. Ubuntu下使用VNC
  8. 如何用DOM4J编程使用xml schema
  9. PAT-乙级-1012. 数字分类 (20)
  10. C#学习笔记二: C#类型详解
  11. python绘制聚类分析树状图
  12. Selenium_python 断言
  13. 手淘首页流量突然暴跌的原因,怎么办?
  14. office安装教程
  15. Java三目运算符 (Ternary Operator ? :)
  16. Vue.js+ECharts:切换图表类型(图表工具栏)
  17. 图片顺序命名不带括号,方法步骤
  18. 一个人竟然撸了一个网易云音乐云村
  19. javacv开发详解之19:如何使用批量的多张图片制作apng动态图,再也不用担心不会制作动态图了
  20. 有关计算机英语作文素材,英语作文素材范文

热门文章

  1. php对接V免签支付教程_【全网首发】最新版影视小程序搭建教程完整版
  2. php.ini用哪个,php.ini:哪一个?
  3. arm放弃服务器芯片,ARM溃败:Applied Micro拆分ARM架构服务器芯片业务
  4. js二维数组传递java,ActiveX获取JavaScript传递的二维数组
  5. ajax 传字符串到后台,JSON.stringify()将JSON对象转换为字符串通过Ajax传入到后台处理...
  6. 如何用php查不同,php-MySql调查不同查询
  7. yb3防爆电机型号含义_yb3防爆电机型号含义有哪些?
  8. 机器人 瓷砖墙面清洗_墙壁清洁机器人解析
  9. c语言锐龙,AMD官方:锐龙5000抗热可以达到95°C 没问题!
  10. 临时文件_其实邮箱可能才是最佳的临时文件分享途径