Springboot整合Redis及序列化问题

1.添加依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.0.3.RELEASE</version>
        </dependency>

2.application.yml配置

Lettuce 和 Jedis 都是连接redis-server的client,springboot 1.5x默认客户端使用jedis,springboot 2.x默认客户端使用lettuce ,
Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接
Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。

spring:
  redis:
    database: 0					# Redis数据库索引(默认为0)
    host: localhost				# Redis服务器地址
    port: 6379					# Redis服务器连接端口
#    jedis:
#      pool:
#        max-active: 8
#        max-wait: -1
#        max-idle: 8
#        min-idle: 0
    lettuce:
      pool:
        max-active: 8			# 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1			# 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 8				# 连接池中的最大空闲连接
        min-idle: 0				# 连接池中的最小空闲连接
    timeout: 5000				# 连接超时时间(毫秒)

3.连接redis序列化问题

SpringData提供了RedisTemplateStringRedisTemplate模板,StringRedisTemplate是RedisTemplate的子类。
如果key和value都是String类型,建议直接使用StringRedisTemplate(如果有对象,那就转jsonString);
如果存在object类型的直接操作,直接使用RedisTemplate会存在序列化问题,哪怕key和value都是String类型,去redis查看会发现有 \xac\xed\x00\x05t\x00\tb 前缀,这是因为RedisTemplate默认使用jdkSerializable序列化方式,需要手动指定序列化的方法。

@Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        RedisSerializer redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //key使用StringRedisSerializer序列化
        redisTemplate.setKeySerializer(redisSerializer);
        //value使用jackson2JsonRedisSerializer序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//        redisTemplate.setHashKeySerializer(redisSerializer);
//        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        return redisTemplate;
    }

配置好就可以对redis进行操作了。
提示: Redis RDB方式持久化时,dump.rdb数据文件是在启动目录下生成的,conf配置文件里默认为dir ./,并不代表安装路径,所以在不同位置启动redis,生成dump.rdb的位置不一样,即在哪个位置启动,就在哪个位置生成。
所以如果要在新环境恢复一份dump.rdb数据,修改conf配置文件的dir为dump.rdb所在目录,然后启动时指定conf配置文件即可。

你可能感兴趣的:(Springboot)