本帖最后由 张11。。。 于 2019-2-16 20:15 编辑
SpringBoot2.0 与Redis 结合
Redis的优势
1、性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 2、丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets数据类型操作。 3、原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 4、丰富的特性 – Redis还支持publish/subscribe, 通知, key 过期等等特性。 Redis可作为数据库,可降低数据IO的读操作,减轻IO的压力。可以减少CPU和内存的压力。并且可以修改表结构,特殊对待某一条数据。并且Redis是NoSQL,读取速度快,对于较大数据处理快。 Redis做缓存,可用于高频次访问的数据;也可用于分布式架构中session共享。
搭建步骤:
一、采用IDEA搭建Springboot项目,并引入redis所需的依赖。 如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
二、配置Redis数据源信息
server.port=1104 server.tomcat.uri-encoding=UTF-8
#################redis基础配置###################
# 数据库设置
spring.redis.database=5
#宿主机IP
spring.redis.host=localhost
#端口号
spring.redis.port=6379
#密码
spring.redis.password=jane@2018
# 连接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
#################redis线程池设置#################
# 连接池中的最大空闲连接,默认值也是8。
spring.redis.jedis.pool.max-idle=500
#连接池中的最小空闲连接,默认值也是0。
spring.redis.jedis.pool.min-idle=50
# 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
spring.redis.jedis.pool.max-wait=2000
# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
spring.redis.jedis.pool.max-active=1000
引入fastjson的目的之一为 redis默认的key序列化使用的是JdkSerializationRedisSerializer会导致一些key不是正常字符 创建一个redisConfig配置类 添加注解: @Configuration @AutoConfigureAfter(RedisAutoConfiguration.class)
这两个注解代表着 将我们编写的redisConfig作为一个配置类注入到容器中,第二个注解的作用是我们自己编写的配置类 要在springboot自动注入redis相关类之后注入,这样做的目的是防止我们自己编写的配置类被覆盖。 /**
* 配置自定义redisTemplate
* @return
*/
@Bean
RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
} 上段代码中是我们使用fastjson来进行key序列化。具体的可以在springboot官方文档 或是源码中找到相对应的地方。我们只是作出自己需要的修改。之后编写一个测试用例即可进行 本节主要讲解springboot 使用redis单机版作为缓存工具
|