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主键方案,去实现分布式锁等等一些场景,技术需要慢慢的去实践掌握提升,所以就从最简单的做起吧。