springboot 整合redis

 1 pom依赖

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

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
</dependency>

如过使用redis连接池(无论lettuce还是jedis客户端,都需要),则需要导入如下依赖
 <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
 </dependency>

2 配置修改 

# Redis数据库索引(默认为0)
spring.redis.database=1
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=123456

# 连接超时时间(毫秒)
spring.redis.timeout=5000

# Lettuce 是新版本的,采用netty方式,性能好
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=10000
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# 关闭超时时间
spring.redis.lettuce.shutdown-timeout=100

redis  配置类,修改序列化方式,redisTemplate 序列化默认使用的jdkSerializeable, 存储二进制字节码,(查询出的内容不知道是什么东西) 所以自定义序列化类

/**
 * 
redis实现序列化的方法
1. StringRedisSerializer  【本文key用这个】
2. JdkSerializationRedisSerializer(默认使用是这个)
3. GenericToStringSerializer
4. Jackson2JsonRedisSerializer  【本文value用这个】
5. OxmSerializer
6. GenericJackson2JsonRedisSerializer
7. 自定义序列化
 */

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

        // 设置value的序列化规则和 key的序列化规则
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

        //设置hash key序列化方式string
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //设置hash value的序列化方式json
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        /**必须执行这个函数,初始化RedisTemplate*/
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

 4 StringRedisTemplate与RedisTemplate 使用方式总结


        a 如果你操作的数据全都是简单的字符串,就用 StringRedisTemplate
        b 如果是操作复杂的对象,如pojo,数据类型有Integer,Long等,那就用 RedisTemplate 
        c 用哪个 Template存,就用哪个Template  取,不然会报错,因为底层序列化方式不一样

StringRedisTemplate与RedisTemplate
两者的关系是StringRedisTemplate继承RedisTemplate。

两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,
RedisTemplate只能管理RedisTemplate中的数据。

SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存。

RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

方法有:
opsForValue :对应 String(字符串)
opsForZSet:对应 ZSet(有序集合)
opsForHash:对应 Hash(哈希)
opsForList:对应 List(列表)
opsForSet:对应 Set(集合)
opsForGeo:对应 GEO(地理位置)


@Autowired
private StringRedisTemplate stringRedisTemplate;

@Autowired
private RedisTemplate redisTemplate;

@Test
public void fangfa1()
    {
       stringRedisTemplate.opsForValue().set("key1","value1");
        String key1 = stringRedisTemplate.opsForValue().get("key1");
        System.out.println(key1);
    }


 @Test
 public void fangfa2 ()
    {
        try {
            Users users = new Users(1, "zhangshan", "男", 23, "湖南");
            redisTemplate.opsForValue().set("user1",users);

            Users user1 = (Users)redisTemplate.opsForValue().get("user1");
            System.out.println(user1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值