SpringBoot使用@Cacheable实现最简单的Redis缓存
前言
之前我们使用过RedisTemplate来实现redis缓存,然后使用工具类来实现操作redis的存储。这样的方式好处是很自由,但是还不是最简单的处理方式。对于一些简单的应用来说,其实redis的缓存应用很简单,只需要存储和取出就可以了。
于是Spring提供了@Cacheable注解来实现,非常easy
操作步骤
1、启动类上需要加@EnableCaching注解
2、在需要执行缓存的类上面写上缓存前缀名称
@CacheConfig(cacheNames="user")
3、在查询方法上使用@Cacheable(key = "'list'")配置键的名称
4、在修改方法上使用@CachePut(key = "'list'")配置键的名称
然后就可以了?对,就可以了。
当调用查询方法的时候,首先就会去redis里面看是否有相应的对象,如果有就直接从缓存中取,不会走下面的查询方法,如果没有就会进行查询并将查询后的数据存放到redis中。
整体代码
https://github.com/LinkinStars/springBootTemplate
具体缓存方法在UserCacheServiceImpl中

测试步骤
第一次调用查询
http://127.0.0.1:8080/cache/user/list
就会在控制台中看到相应输出“调用了方法,没有从redis取”
第二次调用查询,就会发现控制台没有相应输出了,证明是直接从缓存中获取的数据。
调用添加方法会操作缓存进行更新
http://127.0.0.1:8080/cache/user/add
调用删除方法,因为没有添加CachePut注解所以缓存数据并不会更新
http://127.0.0.1:8080/cache/user/delete
使用查询之后数据还是原来的数据并没有改变
注意事项
1、需要缓存的对象必须可以被序列化
2、查询和修改返回的对象一定要相同,否则会报错。
3、cacheNames可以配置在Cacheable和CachePut中,配置在CacheConfig中更加方便。
4、key可以根据入参和EL表达式来设置如:key="#user.id"
5、Cacheable中condition参数可以设置当满足一定条件之后才会使用缓存
总结
1、这个缓存写法用法非常简单,用起来很舒服,不需要什么很复杂的配置
2、如果你只是缓存一些小东西,不需要对缓存进行一些特殊操作,比如缓存一些首页广告信息等等,那还是很方便的。
3、如果你需要对你的缓存进行很复杂的控制,缓存一些商品具体信息,并且还需要对缓存设置过期时间等等,那么这样的方式就不能很好的满足了,还是老老实实使用RedisTemplate来做吧。
其他用法可以参考:https://www.baeldung.com/spring-cache-tutorial
SpringBoot使用@Cacheable实现最简单的Redis缓存的更多相关文章
- 简单的redis缓存操作(get、put)
简单的redis缓存操作(get.put) 本文介绍简单的redis缓存操作,包括引入jedisjar包.配置redis.RedisDao需要的一些工具.向redis中放数据(put).从redis中 ...
- 【spring boot】SpringBoot初学(8)– 简单整合redis
前言 到目前为止,把项目中需要用到的:properties读取.数据源配置.整合mybatis/JdbcTemplate.AOP.WebService.redis.filter.interceptor ...
- 简单实现Redis缓存中的排序功能
1.在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发 ...
- redis(四)--简单实现Redis缓存中的排序功能
在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发的应 ...
- thinkphp5简单使用redis缓存
<?php namespace app\index\controller; use think\Controller; use think\Cache\Driver\Redis; class I ...
- SpringBoot(七) - Redis 缓存
1.五大基本数据类型和操作 1.1 字符串-string 命令 说明 set key value 如果key还没有,那就可以添加,如果key已经存在了,那会覆盖原有key的值 get key 如果ke ...
- redis缓存和mysql数据库同步
附redis关于缓存雪崩和缓存穿透,热点key 穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法: 持久层查询不到就缓存空结果,查询时先判断缓存 ...
- SpringBoot进阶教程(二十五)整合Redis之@Cacheable、@CachePut、@CacheEvict的应用
在上一篇文章(<SpringBoot(二十四)整合Redis>)中,已经实现了Spring Boot对Redis的整合,既然已经讲到Cache了,今天就介绍介绍缓存注解.各家互联网产品现在 ...
- 小白的springboot之路(八)、继承Redis以及@Cacheable注解实现Redis缓存
0.前言 在项目中,缓存作为一种高效的提升性能的手段,几乎必不可少,Redis作为其中的佼佼者被广泛应用: 一.spring boot集成Redis 1.添加依赖 <dependency> ...
随机推荐
- centos6.5使用LVM
1.添加硬盘 centos6以前的版本用kudzu来不重启识别新硬件. [root@xen01 ~]# /etc/init.d/kudzu start -bash: /etc/init.d/kudzu ...
- HBASE强制删除表
1,先把hdfs的对应表的数据删除 hadoop fs -mv /hbase/<table_name> /tmp 2,修复meta信息 hbase hbck -fixMeta -fixAs ...
- powershell_基础篇
powershell 想必大家对windows操作系统下的cmd命令提示符可能并不陌生,大多数人都应该使用过它.而对于今天我们要学习的PowerShell跟cmd有什么关系呢?可以简单地说,Power ...
- linux系统资源监控
top命令 1.平均负载(load average): 正在耗费CPU进程与正在等待io的进程之和,三个值分别是一分钟,五分钟,十五分钟的平均负载,负载值只要小于CPU颗粒数属于正常情况 任务进程(T ...
- 微信小程序之canvas绘制海报分享到朋友圈
绘制canvas内容 首先,需要写一个canvas标签,给canvas-id命名为shareBox <canvas canvas-id="shareBox"></ ...
- 201771010126 王燕《面向对象程序设计(java)》第十一周学习总结
实验十一 集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: Vector类实现了长度可变的数组. Vecto ...
- docker container(容器)
docker 容器 Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用 容器是从镜像创建的应用运行实例.它可以启动,开始,停止,删除,而这些容器都是彼此相互隔离,互不可见的. ...
- Redis sentinel 哨兵模式
一.sentinel介绍 Sentinel作用: 1):Master状态检测 2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Maste ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- atx-agent minicap、minitouch源码分析
项目描述: 因为公司需要,特别研究了一下openatx系列手机群控源码 源码地址: https://github.com/openatx 该项目主要以go语言来编写服务端.集成 OpenSTF中核心组 ...