前言

之前我们使用过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缓存的更多相关文章

  1. 简单的redis缓存操作(get、put)

    简单的redis缓存操作(get.put) 本文介绍简单的redis缓存操作,包括引入jedisjar包.配置redis.RedisDao需要的一些工具.向redis中放数据(put).从redis中 ...

  2. 【spring boot】SpringBoot初学(8)– 简单整合redis

    前言 到目前为止,把项目中需要用到的:properties读取.数据源配置.整合mybatis/JdbcTemplate.AOP.WebService.redis.filter.interceptor ...

  3. 简单实现Redis缓存中的排序功能

    1.在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发 ...

  4. redis(四)--简单实现Redis缓存中的排序功能

    在实现缓存排序功能之前,必须先明白这一功能的合理性.不妨思考一下,既然可以在数据库中排序,为什么还要把排序功能放在缓存中实现呢?这里简单总结了两个原因:首先,排序会增加数据库的负载,难以支撑高并发的应 ...

  5. thinkphp5简单使用redis缓存

    <?php namespace app\index\controller; use think\Controller; use think\Cache\Driver\Redis; class I ...

  6. SpringBoot(七) - Redis 缓存

    1.五大基本数据类型和操作 1.1 字符串-string 命令 说明 set key value 如果key还没有,那就可以添加,如果key已经存在了,那会覆盖原有key的值 get key 如果ke ...

  7. redis缓存和mysql数据库同步

    附redis关于缓存雪崩和缓存穿透,热点key 穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法: 持久层查询不到就缓存空结果,查询时先判断缓存 ...

  8. SpringBoot进阶教程(二十五)整合Redis之@Cacheable、@CachePut、@CacheEvict的应用

    在上一篇文章(<SpringBoot(二十四)整合Redis>)中,已经实现了Spring Boot对Redis的整合,既然已经讲到Cache了,今天就介绍介绍缓存注解.各家互联网产品现在 ...

  9. 小白的springboot之路(八)、继承Redis以及@Cacheable注解实现Redis缓存

    0.前言 在项目中,缓存作为一种高效的提升性能的手段,几乎必不可少,Redis作为其中的佼佼者被广泛应用: 一.spring boot集成Redis 1.添加依赖 <dependency> ...

随机推荐

  1. C++ MD5类封装

    c++ md5 算法封装 md5.h #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* T ...

  2. BZOJ 4710

    枚举几个同学分到了 对于每种特产求一个方案数(经典做法)乘起来 然后容斥 #include<bits/stdc++.h> using namespace std; #define rep( ...

  3. oracle 报错无法从套接字获取更多数据

    报错信息如下: ---查看_optimizer_join_elimination_enabled参数值 切换sys用户 select a.ksppinm name, b.ksppstvl value, ...

  4. JAVA_AesCBC纯净例子

    import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException ...

  5. Vue知识点总结

    1.属性名已$开头的都是内部提供的属性 2.为什么使用事件修饰符的原因:methods 只有纯粹的数据逻辑,而不是去处理 DOM 事件细节 3.v-if 如果值为false,元素在页面中不存在:值为t ...

  6. [LeetCode] Push Dominoes 推多米诺骨牌

    There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...

  7. [LeetCode] New 21 Game 新二十一点游戏

    Alice plays the following game, loosely based on the card game "21". Alice starts with 0 p ...

  8. swust oj 1011

    二叉排序树的实现和查找 1000(ms) 10000(kb) 2782 / 6301 按照给定的关键字集合,建立二叉排序树.在建立的二叉排序树上查找指定的关键字,查找成功,输出找到该关键字比较的次数: ...

  9. python语法_函数

    ---恢复内容开始--- 函数: 1 减少重复代码 2 定义一个功能,需要直接调用 3 保持代码一致性 def  funcation_name(参数s): 功能代码块0 参数可以为多个,传入时按照前后 ...

  10. C#等同于正则表达式的写法

    不用写正则表达式,用C#自带的方法 用char 自带的函数实现 /// <summary> /// 只能由数字和大小写字母组成 /// </summary> /// <p ...