暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot整合Redis缓存

老王两点中 2018-08-31
0

redis缓存数据库是一种nosql非关系型数据库,用key-value结构存储的一种数据库,支持5种结构类型,具体的使用场景,自己可去google查询,开发中经常用的,今天就写一些比较基础的SpringBoot环境与redis的整合。

我的SpringBoot练习项目建的比较早,在此基础上进行迭代测试,采用的是Springboot1.5.10版本,你也可采用最新的SpringBoot2.0.4进行新版本的尝试。

1、用Redis做缓存Cache

先需要在项目中引入,基于Maven管理,pom引入,结合你自己的环境去尝试。我的pom引入如下:

写一个redis配置类,并通过@EnableCaching注解开启缓存支持,继承CachingConfigurersupport类,如下:


配置缓存管理器,直接new一个RedisCachemanager如下:

配置一个RedisTemplate,这里我们的key是配置的序列话方式,不配置就是保存的乱码,需要与下面自定义key,如下:

自定义key生成能略配置如下:

spring配置redis基本信息:

redis的配置已经完成,下面开始写测试方法:

定义一个测试jpa,操作增删改查(CRUD)

接着service里面调jpa:

查找,通过注解@cacheable来开启缓存,一般会走缓存,缓存没有的话,就走数据库查找,然后放到缓存中,(我在这里做了redis缓存和ehcache,目的都一样,只不过是采用的框架不一样,这里只介绍redis)

删除操作,通过@CacheEvict注解,会把缓存的删除,allEntries=true 是让所有key都失效,实际业务中,可以指定key失效,如下:

最后Controller层,调service层方法来测试走的是数据库还是缓存,如下:

后台打印结果,对结果进行分析:第一次缓冲中没有,走数据库,红色字体打印出从数据库查找,再次调用时,缓存中已经有了,直接从缓存中取,就没有打印出红色字体。

测试删除:

测试如下:

调用删除后,再次查看redis数据库,发现自定义的key不见了,这就是删除缓存生效了,就是下面这句代码的作用,如下:

查看redis数据库:

2、用redis来实现session一致性问题

当项目的访问量大时,需要做分流限制,如LB(负载均衡),当部署多节点时,就需要解决session一致性问题了。下面就是简单的做一下用redis缓存来存储登录session,实现sesssion一致性。

具体实现如下:

配置是SpringBoot现成的,直接调就可以设置一下session失效时间,如下做测试就设置一下短一点的60s,如下:

写一个方法来获取sessionId,测试一下:

通过访问url后,查看redis数据源:

过一会,session失效时间一到,通过redis数据库也可以看到失效key,如下:

session过期之后,可看到redis库就看不到了,如下:

再访问getSessionId的时候就跳转让登录了,如下:

今天就先写到这里,redis还有很多作用,如我们保存在缓存中,万一redis挂了,那不就是没用了,这就需要高可用的保障,需要搭建redis集群,实现主从架构,官方推荐哨兵模式。还有如用Redis的list结构去做队列实现,利用redis的自增策略是实现唯一id主键方案,去实现分布式锁等等一些场景,技术需要慢慢的去实践掌握提升,所以就从最简单的做起吧。

文章转载自老王两点中,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论