前言
最近使用SpringBoot整合Redis,使用的是RedisTemplate,实现SpringBoot与redis的整合。记录一下
在Springboot的官网上我们也能看到,官方现在推荐的是SpringDataRedis形式。
Redis基本配置
统一返回格式不用管
1,创建redis的配置
- redis.hostName=127.0.0.1
- redis.port=6379
- redis.timeout=10000
- #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
- redis.maxActive=600
- #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
- redis.maxWaitMillis=3000
- #最大空闲数
- redis.maxIdle=20
- #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
- redis.testOnBorrow=true
其实引入的jar包(spring-boot-starter-data-redis),这些信息是默认的,不配置也可以,当然和默认不一致就必须修改了。
2,配置RedisTemplate
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
RedisSerializer<String> strinRedisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer<String> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<String>(
String.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 如果key是String 需要配置一下StringSerializer,不然key会乱码 /XX/XX
template.setKeySerializer(strinRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
设置redisTemplate对象,主要是它的序列化方法,如果存储的key和vlue都是简单字符串,可以直接使用stringRedisTemplate,网上的资源很多都是配置了一大堆,但是感觉不是必须的,例如RedisConfig,里面的信息都是重复application.properties的信息。
还是要根据自己的需求来选择,有些场景复杂的,配置可能也会复杂。
3,添加RedisUtil.java
实际操作中调用的redis操作工具类,这个资源网上就有很多,内容都差不多,这里就不列出来了,这里给一个链接RedisUtil工具类,但是有一个小细节,会报空指针
需要调用redis工具类的时候@Resource自动注入redisTemplate。
4,测试
@Resource
private RedisUtil redisUtil;
@GetMapping("/getRedis")
public Map<String, Object> getRedis(){
redisUtil.set("20190403", "测试数据");
String value = redisUtil.get("20190403").toString();
log.info(value);
log.info("读取redis成功");
return JsonResultHolder.getJsonResult(true, null, "执行成功");
}
很简单是吧。
5,关于分库
网上的资料有的添加了分库,这个要看场景了,如果是信息分类是必要的,例如分区域,北方、南方什么的,或者更大,分国内外,那可能分库操作是有益的,而这也意味着Redis 内存占用越来越多,需要处理的数据量一定非常多,要谨慎起来。
而我的例子只是简单的信息,那就没有必要分库了
6,pom引入的jar包