A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张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单机版作为缓存工具


1 个回复

正序浏览
厉害厉害,不错不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马