Spring Boot2(三):使用Spring Boot2集成Redis缓存
前言
前面一节总结了springboot实现mybatis的缓存机制,但是实际项目中很少用到mybatis的二级缓存机制,反而用到比较多的是第三方缓存redis。
redis是一个使用ansi c编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。
安装启动redis
安装redis的就不讲太多了,直接去,下载redis-x64-3.2.100.zip,cmd,在redis目录下输入:redis-server.exe redis.windows.conf启动即可
另外可以通过redis桌面客户端可视化连接工具操作:
代码部署
快速建立spring boot项目
添加redis依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency>
application.yml配置
spring: redis: host: 127.0.0.1 database: 0 password: port: 6379 jedis: pool: max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 10 # 连接池中的最大空闲连接 min-idle: 5 # 连接池中的最小空闲连接
redisconfig配置类
@autowired private redisconnectionfactory factory; /** * * @return */ @bean public redistemplate<string, object> redistemplate() { redistemplate<string, object> redistemplate = new redistemplate<>(); //更改在redis里面查看key编码问题 redistemplate.setkeyserializer(new stringredisserializer()); redistemplate.sethashkeyserializer(new stringredisserializer()); redistemplate.sethashvalueserializer(new stringredisserializer()); redistemplate.setvalueserializer(new jdkserializationredisserializer()); redistemplate.setconnectionfactory(factory); return redistemplate; }
redisutils工具类
@autowired private redistemplate redistemplate; // 简单的k-v操作 @resource(name="redistemplate") private valueoperations<string, string> valueoperations; // 针对map类型的数据操作 @resource(name="redistemplate") private hashoperations<string, string, object> hashoperations; // 针对list类型的数据操作 @resource(name="redistemplate") private listoperations<string, object> listoperations; // set类型数据操作 @resource(name="redistemplate") private setoperations<string, object> setoperations; // zset类型数据操作 @resource(name="redistemplate") private zsetoperations<string, object> zsetoperations;
实体类syscodeentity
@data public class syscodeentity implements serializable { private static final long serialversionuid = 1l; private int id; // 分类编码 private string kindcode; // 分类名称 private string kindname; // code编码 private string code; ...... }
serviceimpl实现类
/** * 查询所有数字字典 * @return */ @override public list<syscodeentity> querycodeall() { logger.info("先从缓存中查找,如果没有则去数据进行查询"); list<syscodeentity> codelist = (list<syscodeentity>)redistemplate.opsforlist().leftpop("codelist"); if (codelist == null) { logger.info("说明缓存中没有数据,则到数据库中查询"); codelist = syscodedao.querycodeall(); logger.info("将数据库获取的数据存入缓存"); redistemplate.opsforlist().leftpush("codelist", codelist); } else { logger.info("则说明缓存中存在,直接从缓存中获取数据"); } logger.info("codelist=" + codelist); return codelist; }
上面例子具体解释已经在注释中体现,通过opsforlist的leftpop和leftpush存入和获取redis缓存的数据。
controller层实现
/** * 查询所有数字字典 * @return */ @requestmapping("/getall") private list<syscodeentity> getuser() { long starttime = system.currenttimemillis(); //开始时间 list<syscodeentity> codelist = syscodeservice.querycodeall(); long endtime = system.currenttimemillis(); //结束时间 system.out.println("查询数据库--共耗时:" + (endtime - starttime) + "毫秒"); //1007毫秒 return codelist; }
postman进行测试
http://localhost:8080/getall
日志信息
总结和扩展
1、redis支持:字符串string、哈希hash、列表list、集合set、有序集合sorted set、发布订阅pub/sub、事务transactions,7种数据类型
2、redis实用场景:缓存系统、计数器、消息列队系统、排行版及相关问题、社交网络、按照用户投票和时间排序、过期项目处理、实时系统
3、redis的高级功能:慢查询(内部执行时间超过某个指定的时限查询)、pipeline管道(降低客户端与redis通信次数,适用于批处理)、bitmap位图(针对大数据量设计)、hyperloglog(极小空间完成独立数据统计)、发布订阅、消息队列、geo地理位置存储
4、redis持久化:
快照rdb(使用快照,一种半持久耐用模式。不时的将数据集以异步方式从内存以rdb格式写入硬盘)
日志aof(1.1版本开始使用更安全的aof格式替代,一种只能追加的日志类型。将数据集修改操作记录起来。redis能够在后台对只可追加的记录作修改来避免无限增长的日志)
5、redis分布式解决方案:主从复制、集群...
后期持续探索redis技术 to be continued...
推荐阅读:redis 入门到分布式实践
关于作者:
个人博客:
github主页:
github博客:
掘金:
博客园:
知乎:
推荐阅读
-
浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)
-
Spring Boot2 系列教程(一) | 如何使用 IDEA 构建 Spring Boot 工程
-
Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制
-
spring boot2集成ES详解
-
Spring Boot2(三):使用Spring Boot2集成Redis缓存
-
spring boot2 使用log4j2
-
spring boot2 redis使用
-
为什么spring单例要使用三级缓存
-
Redis整合Spring结合使用缓存实例
-
Spring Boot2(十一):Mybatis使用总结(自增长、多条件、批量操作、多表查询等等)