SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
程序员文章站
2022-04-29 18:49:55
一、Redis简介 Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch。这些案例整理好后,陆续都会上传Git。 SpringBoot2 版本,支持的组件越来越 ......
一、redis简介
spring boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多nosql数据库一样提供了自动化配置的支持,包括:redis, mongodb, elasticsearch。这些案例整理好后,陆续都会上传git。
springboot2 版本,支持的组件越来越丰富,对redis的支持不仅仅是扩展了api,更是替换掉底层jedis的依赖,换成lettuce。
本案例需要本地安装一台redis数据库。
二、spring2.0集成redis
1、核心依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency>
2、配置文件
# 端口 server: port: 8008 spring: application: # 应用名称 name: node08-boot-redis # redis 配置 redis: host: 127.0.0.1 #超时连接 timeout: 1000ms jedis: pool: #最大连接数据库连接数,设 0 为没有限制 max-active: 8 #最大等待连接中的数量,设 0 为没有限制 max-idle: 8 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 max-wait: -1ms #最小等待连接中的数量,设 0 为没有限制 min-idle: 0
这样redis的环境就配置成功了,已经可以直接使用封装好的api了。
3、简单测试案例
import org.springframework.data.redis.core.redistemplate; import org.springframework.data.redis.core.stringredistemplate; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import javax.annotation.resource; import java.util.concurrent.timeunit; @restcontroller public class rediscontroller { @resource private stringredistemplate stringredistemplate ; @requestmapping("/setget") public string setget (){ stringredistemplate.opsforvalue().set("cicada","smile"); return stringredistemplate.opsforvalue().get("cicada") ; } @resource private redistemplate redistemplate ; /** * 设置 key 的有效期 10 秒 */ @requestmapping("/setkeytime") public string setkeytime (){ redistemplate.opsforvalue().set("timekey","timevalue",10, timeunit.seconds); return "success" ; } @requestmapping("/gettimekey") public string gettimekey (){ // 这里 key 过期后,返回的是字符串 'null' return string.valueof(redistemplate.opsforvalue().get("timekey")) ; } }
4、自定义序列化配置
import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.redis.connection.lettuce.lettuceconnectionfactory; import org.springframework.data.redis.core.redistemplate; import org.springframework.data.redis.serializer.genericjackson2jsonredisserializer; import org.springframework.data.redis.serializer.stringredisserializer; import java.io.serializable; /** * redis 配置 */ @configuration public class redisconfig { private static final logger logger = loggerfactory.getlogger(redisconfig.class) ; /** * 序列化配置 */ @bean public redistemplate<string, serializable> redistemplate (lettuceconnectionfactory redisconnectionfactory) { logger.info("redisconfig == >> redistemplate "); redistemplate<string, serializable> template = new redistemplate<>(); template.setkeyserializer(new stringredisserializer()); template.setvalueserializer(new genericjackson2jsonredisserializer()); template.setconnectionfactory(redisconnectionfactory); return template; } }
5、序列化测试
import com.boot.redis.entity.user; import org.springframework.data.redis.core.redistemplate; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import javax.annotation.resource; import java.util.arraylist; import java.util.list; @restcontroller public class serializecontroller { @resource private redistemplate redistemplate ; @requestmapping("/setuser") public string setuser (){ user user = new user() ; user.setname("cicada"); user.setage(22); list<string> list = new arraylist<>() ; list.add("小学"); list.add("初中"); list.add("高中"); list.add("大学"); user.seteducation(list); redistemplate.opsforvalue().set("userinfo",user); return "success" ; } @requestmapping("/getuser") public user getuser (){ return (user)redistemplate.opsforvalue().get("userinfo") ; } }
三、源代码地址
github地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 码云地址:知了一笑 https://gitee.com/cicadasmile/spring-boot-base