SpringCache继承Redis实现数据缓存,减轻数据库的访问压力

1:Redis数据缓存的学习感受:

   官方测Redis读的速度是110000次/s,写的速度是81000次每秒,在非关系型数据库当中使用是较为频繁的,Redis可以存储多种数据类型数据【String,Map,List,Set,Zset等】,今天总结的是在Java在SpringCahe中常用的String数据类型的使用,以及常用的注解使用经验和场景分享。

2:SpringCahe是干什么的:

我们的SpringCache时使用的Aop实现拦截判断是否存在缓存,如果不存在查询数据库数据,并且返回数据到前端和把接口方法返回值以你自定义key-value的方式,存入redis缓存;如果存在对应的key,直接返回当前序列化后的数据给用户,大大减轻了关系型数据库的压力。

3:安装redis缓存数据库:

    3.1:Linux下安装Redis并且远程访问,请转载到我写的下面的文章:

Linux下安装Redis-5.0.4,使用工具Xshell,云服务使用的是Centos7,使用Another-Redis-Desktop-Manager连接远程redis服务实现可视化本地管理icon-default.png?t=N7T8https://blog.csdn.net/qq_64183539/article/details/137359709

    3.2:Windows下载Redis,并且开启数据缓存服务

      链接:https://pan.baidu.com/s/1zYhwvAxphCG0SAp9Ix6chw?pwd=2323 
      提取码:2323

       3.2.1:Windows下如何开启Redis缓存服务:【双击解压好文件夹里面的redis-server服务】

      3.2.2:Windows下测试是否开启Redis缓存服务成功【双击解压好文件夹里面的redis-cli服务】【显示127.0.0.1:6379>:表示连接成功,开启成功相关的Redis缓存服务】

      3.2.3:注意本地Redis服务器可以不设置密码访问,但是云远程Redis缓存服务需要加上密码,不然会报警告:挖矿问题

4:初始化一个springCache的springboot的小Demo【主要使用的是Redis的String数据存储类型】【Demo克隆地址:git clone https://gitee.com/wan-jiang-fun/spring-cache-demo.git] 没有下载git代码托管工具的可以看我的另一个博客:

Git安装到本地以及常用的Git命令使用-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_64183539/article/details/137372180

4.1:创建一个Springboot基础工程:【SDK选择自己的即可】

 4.2:导入springCahe需要的的相关依赖: 【因为使用的Redis做缓存服务需要导入redis数据源】
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
4.3:因为是缓存是为了减轻数据库访问信息,需要加入Mysql的相关依赖测试:
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>8.0.27</version>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.1</version>
</dependency>

4.4:其他相关依赖配置如下:
//自动生成set.get方法
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>
 4.5:简单配置相关的application.yml文件
server:
  port: 8888
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springcachedemo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
      username: root #数据库用户名
      password: 123456 #数据库密码
  redis:
    host: localhost #本地测试,如果是远程服务器写远程服务器ip
    port: 6379 #端口默认
    password:   #密码没有设置不写,有写你设置的密码
    database: 1 #一个redis有15个数据库,默认数据库存储信息是0号数据库
4.6:在springboot的启动类上面加上:@EnableCaching【启动缓存服务
 
 4.7:四大常用注解讲解:【注意:插入数据库时设置的key和获取数据数据时的key一定要保持一致,key的一致是获取数据的根本
SpringCache常用注解
注解使用方法使用场景【个人想法不对勿喷】
@CachePut方法返回值存到redis当中插入数据时候使用
@Cacheable缓存有对应key的值返回,没有则利用sql查询出来的返回值存入缓存一般查询数据的时候使用
@CacheEvict删除对应在缓存key的值更新删除一个数据时候使用
@CacheConfigcontroller配置整个类的存入redis数据开头信息配置整个Controller类的cacheNames 
 4.8:在进行redis的对象存储的时候,一定要对对象进行序列化【对象二进制化存储】,不然Redis难以存储一些复杂编码数据
     4.8.1:序列化就是在对象类上面实现Serializable接口就好

4.9:@CacheConfig(cacheNames="myCache"):设置存入缓存数据库统一前缀

       4.9.1:@CachePut(key ="#result.id+'abc'")存入Redis缓存数据库的key=myCache::result.id+'abc';【根据返回值对象user里面的id设置key
       #注意下面cacheNames = "myCache"的统一前缀配置到类注解4.9里面去了,还有key拼接字符串需要使用【单引号 ‘ ’】哦!
       4.9.2:@CachePut(cacheNames = "myCache",key = "#user.id")存入Redis缓存数据库的key=userCache::user.id;【根据传入函数参数user对象的属性id设置key
       4.9.3:@CachePut(cacheNames = "myCache",key = "#p0.id")存入Redis缓存数据库的key=userCache::user.id;【根据传入函数第一个参数对象的属性id设置key
       4.9.4:@CachePut(cacheNames = "myCache",key = "#a0.id")存入Redis缓存数据库的key=userCache::user.id;【根据传入函数第一个参数对象的属性id设置key
       4.9.5:@CachePut(cacheNames = "myCache",key = "#root.args[0].id")存入Redis缓存数据库的key=userCache::user.id;【根据传入函数第一个参数对象的属性id设置key

        4.9.6:存入到Redis使用可视化工具Another Redis Desktop Manager显示出来的数据结构为这样:

                   【没有可视化工具观看下面的博客:

Linux下安装Redis-5.0.4,使用工具Xshell,云服务使用的是Centos7,使用Another-Redis-Desktop-Manager连接远程redis服务实现可视化本地管理-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_64183539/article/details/137359709

4.10:@CacheEvict(key = "#id")根据传入的id清理单个缓存在myCache的缓存数据【方法执行前】

4.11:@CacheEvict(allEntries = true)//清理所有缓存在myCache的缓存数据【方法执行前】

4.12: @Cacheable( key = "#id+'abc'")//如果Redis有对应key的数据直接返回数据,如果没有,调用方法的返回值返回给用户,并且该数据会放到缓存中

 

                4.12.1:返回给用户信息了但是没查询sql说明,是利用缓存中的数据返回给用户的 

4.13:condition:条件判断是否缓存数据到缓存列表,可以为空,如果需要指定,需要使用SPEL表达式,只有返回true的时候才会对数据源进行缓存/清除缓存。在方法调用之前或之后都能进行判断。

condition=false时,不读取缓存,直接执行方法体,并返回结果,同时返回结果也不放入缓存。

condition=true时,读取缓存,有缓存则直接返回。无则执行方法体,同时返回结果放入缓存

注意:condition = "#result != null" 会导致所有对象都不进入缓存,每次操作都要经过数据库。



 5:个人学习SpringCache的总结:

5.1:更新数据需要根据id清除以前的缓存数据,利用id,在查询的时候又加上缓存数据

5.2:删除就是删除一个或者多个缓存数据和sql数据 @CacheEvict(cacheNames = "userCache", key = "#id")

5.3:查询一般根据id或者唯一标识查询第一次数据方法返回值存入到缓存数据当中去,后面就不用了; @Cacheable(cacheNames = "userCache", key = "#id")

5.4:@CachePut(cacheNames = "userCache", key = "#result.id"):增加一条数据使用id增加相关的redis的key

                            本人在读大学,纯写文章,喜欢技术分享,如果有什么写的不对的还请多多包含,谢谢!!!
  • 36
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值