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> ...
随机推荐
- java自动化-实际使用junit的演示
本文简单介绍一下我写的http接口后端框架 在经过之前多篇博客介绍之后,读者应掌握如下技能 1,自动运行一个或者多个junit框架编写的java代码 2,对数据驱动以及关键字驱动有一定的了解和认识,甚 ...
- copy与mutableCopy的区别总结
1.不可变类型(不管是集合还是非集合),copy结果,不产生新对象,浅拷贝:不可变类型(不管是集合还是非集合),mutableCopy结果,产生新对象,深拷贝.2.可变类型(不管是集合还是非集合),c ...
- sql查询优化策略
Sql语句执行顺序: 查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WH ...
- data.table包使用应该注意的一些细节
fread中nThread 参数的使用 注意默认nThread=getDTthreads(),即使用所有能用的核心,但并不是核心用的越多越好,本人亲自测试的情况下,其实单核具有较强的性能,只有在数 ...
- 18 ArcGIS API for JavaScript4.X 系列加载天地图(经纬度)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Servlet 过滤器Filter
特点 1)Filter是依赖于Servlet容器,属于Servlet规范的一部分,在Servlet API中定义了三个接口类:Filter, FilterChain, FilterConfig. 2) ...
- CentOS7设置SVN自启动,提交报错,无权限.手动kill掉后重启,成功.
参考文档:http://tieba.baidu.com/p/5174054662 最近想尝试在CentOS7上搭建SVN服务.遇到的问题大致如题,我这边再详细描述一下. 虚拟机:VMware® Wor ...
- python语法_列表生成器_生成器_迭代器_异常捕获
列表生成式 a = [x for x in range(10)] print(a) x 可进行操作 a = [x*2 for x in range(10)] print(a) x甚至可以为函数, de ...
- partial 的随笔
partial class Dmeos { public int Ager { get; set; } public void Run() { Console.WriteLine(Ager); } } ...
- Data Center手册(3): Load Balancer
Load Balancer的类型 DNS Round-Robin 这是一种很常见的分流的方式,具体配置如下: name server有一个zone文件,对于同一个domain,有多个IP www.ex ...