springboot整合redis流程,以及String型存储键key“乱码“问题解决方法

整合流程

1.导包

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

2.注入RedisTemplate进行缓存测试

    //注入RedisTemplate
    @Autowired
    RedisTemplate redisTemplate;
    @Test
    void testRedisTemplate(){
        ValueOperations ops = redisTemplate.opsForValue();
        //设置键值对
        ops.set("hello","world");
        //通过键获取值
        Object hello = ops.get("hello");
        System.out.println(hello);
    }

运行之后看到控制台成功打印了值,代表我们缓存成功
在这里插入图片描述

疑问

但是我们使用RedisTemplate时会有一个问题,我们打开Redis Desktop Manager,发现我们刚才存的键值对中的键为一串乱码,最后才是我们设置的键。
在这里插入图片描述

打开RedisTemplate源码我们发现
在这里插入图片描述
RedisTemplate在缓存数据的时候,键默认使用的序列化器为JdkSerializationRedisSerializer
通常我们设置的键的数据类型都是String型,如果想要键直接显示我们设置的值,我们可以编写一个配置类,将RedisTemplate的默认序列化器设置为StringRedisSerializer

@Configuration
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<Object,Object> redisTemplate  = new RedisTemplate<>();
        //默认的key序列化器为:JDKSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

再测试运行一次,控制台成功打印数据,且redis缓存的键也变成了我们设置的样子

在这里插入图片描述
在这里插入图片描述
同理,键值对中的值的序列化器我们也可以通过配置类的方式将其设置为我们想要的序列化器

添加模板

    //注入RedisTemplate
    @Autowired
    RedisTemplate<String,String> redisTemplate;
    @Test
    void testRedisTemplate(){
        ValueOperations<String, String> ops = redisTemplate.opsForValue();
        //设置键值对
        ops.set("hello","world");
        //通过键获取值
        Object hello = ops.get("hello");
        System.out.println(hello);
    }

在这里插入图片描述

为RedisTemplate提前设置泛型,也可以将键值对的序列化器改为模板中数据类型对应的序列化器

StringRedisTemplate

StringRedisTemplate键值对的默认序列化器都为StringRedisSerializer

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值