前言
上几节讲了利用
Mybatis-Plus
这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb
和redis
进行这方面的需求。所以这一章节准备讲下缓存数据库Redis
的集成,同时会介绍下基于Redis
和注解驱动的Spring Cache
的简单使用。
Redis 介绍
大家应该对
Redis
应该比较熟悉了。这几年也是大行其道的缓存数据库,目前的memcached
由于使用场景及其存储数据结构的单一(不知道现在是否有改善,现在基本没有接触了),在工作中也使用的少了。引用官网的简介,Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
推荐redis中国社区:http://www.redis.cn/
SpringBoot的Redis集成
0.本章节以上一章节的示例基础上进行集成。所以大家可下载第十章节示例或者在章节末尾直接下载本章节示例。
1.pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
直接引入,相关依赖会自动加载的,这就是springboot
让人愉悦之处呀。
2.application.properties
配置加入redis相关配置
配置自动加载类为:
org.springframework.boot.autoconfigure.data.redis.RedisProperties
,可在属性文件中点击某属性快捷跳转。注意到其启动类为org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
。这里就不介绍了,后面会写一篇关于Springboot
自动加载配置的文章。
# REDIS (RedisProperties)# Redis数据库索引(默认为0)spring.redis.database=0# Redis服务器地址spring.redis.host=127.0.0.1# Redis服务器连接端口spring.redis.port=6379 # Redis服务器连接密码(默认为空)spring.redis.password=# 连接池最大连接数(使用负值表示没有限制)spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制)spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接spring.redis.pool.min-idle=0 # 连接超时时间(毫秒)spring.redis.timeout=0
3.一般上通过以上两步就可使用了,但工作中一般上是通过StringRedisTemplate
(默认采用string
的序列化,保存key和值时都是通过此序列化策略)接口进行操作,所以这里直接配置了StringRedisTemplate
bean类。
RedisConfig.java
/** * * @author oKong * */@Configurationpublic class RedisConfig { /** * 定义 StringRedisTemplate ,指定序列化和反序列化的处理类 * @param factory * @return */ @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>( Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); //序列化 值时使用此序列化方法 template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
4.编写控制类,测试集成是否生效。
RedisController.java
@RestController@RequestMapping("/redis")@Api(tags = "redis 测试API")public class RedisController { @Autowired StringRedisTemplate redisTemplate; @GetMapping("set/{key}/{value}") @ApiOperation(value="设置缓存") public String set(@PathVariable("key")String key,@PathVariable("value") String value) { //注意这里的 key不能为null spring 内部有检验 redisTemplate.opsForValue().set(key, value); return key + "," + value; } @GetMapping("get/{key}") @ApiOperation(value="根据key获取缓存") public String get(@PathVariable("key") String key) { return "key=" + key + ",value=" + redisTemplate.opsForValue().get(key); } }
5.访问:http://127.0.0.1:8080/swagger-ui.html。 也可直接浏览器输入:
set值
set值
get值
get值
作者:oKong
链接:https://www.jianshu.com/p/b21110f86f0a