Redis--SpringCache(二)带有参数的方法缓存

一.带有参数的方法缓存

在@Cacheable的key属性中通过#参数名可以获取到方法参数。key中内容Spring EL,既然是表达式字符串要用单引号,没有被单引号包含的内容都表示变量。

注意:基本上当方法有参数时,设置key的时候需要添加上参数条件。因为参数不一样,方法的返回值也可以不一样了。

  @Override
    // Spring EL
    // 字符串使用单引号
    // #+方法参数名称:可以调用方法参数
    @Cacheable(key = "'selectById'+#id")
    public String selectById(Long id) {
        System.out.println("执行了selectById:"+id);
        return "selectById"+id;
    }

二.返回值为对象或集合

1.会出现的问题

默认情况下存储到redis中数据前面会出现乱码,此乱码不影响使用,判断结果时忽略乱码内容即可。这是因为默认对Redis的value序列化器使用JdkSerializationRedisSerializer序列化器。在源码org.springframework.data.redis.cache.RedisCacheConfiguration里面45行
源码如下

public static RedisCacheConfiguration defaultCacheConfig(@Nullable ClassLoader classLoader) {
    DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
    registerDefaultConverters(conversionService);
    return new RedisCacheConfiguration(Duration.ZERO, true, true, CacheKeyPrefix.simple(), SerializationPair.fromSerializer(RedisSerializer.string()), SerializationPair.fromSerializer(RedisSerializer.java(classLoader)), conversionService);
}

2.解决办法

1)把redis的value序列化器修改为GenericJackson2JsonRedisSerializer,就支持返回值为对象或集合了,顺便解决了缓存内容前面有乱码问题
2)如果不更换也可以有效果,但是实体类必须实现Serializable接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值