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

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接口。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2343.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Windows 10配置远程开机[通俗易懂]

    Windows 10配置远程开机[通俗易懂]简介最近有个需求,在外边或者是上班的时候想从家里的电脑拿点资料,虽然家里的路由器有公网IP地址,但是电脑总不能一直开着吧,然后就想到可以远程通过网卡唤醒电脑。前提条件拥有一个公网IP(一般可以找运营商申请),如果拥有的公网IP是动态的话,需要绑定DDNS域名,DDNS域名可以自行注册。 电脑主板支持网络唤醒功能。配置方法主板开启网络唤醒功能,如图:设置网络适配器支持唤醒…

    2022年5月5日
    163
  • net share 共享文件夹

    net share 共享文件夹共享文件夹并设置共享文件夹为读写 netshareali M test unlimited grant everyone full 同时还需要配合 cacls 来设置文件夹访问权限 caclsM test geveryone rR 读取 W 写入 C 更改 写入 F 完全控制 netshareali M test unlimited grant everyone fullcaclsM test geveryone r

    2025年12月11日
    4
  • Linux 解压 zip 分卷

    Linux 解压 zip 分卷对于一个大的文件,使用分卷压缩得到如下文件:传到Linux目录下,希望解压出来,需要使用zip-F命令修复分卷,从而合成正确的一个压缩文件zip-FUCF-101.zip–outucf101.zip得到ucf101.zip,然后解压ucf101.zip即可unzipucf101.zip…

    2022年5月23日
    196
  • 小程序如何生成海报分享朋友圈

    小程序如何生成海报分享朋友圈

    2021年7月6日
    81
  • 深入理解机器学习——基于决策树的模型(一):分类树和回归树

    深入理解机器学习——基于决策树的模型(一):分类树和回归树决策树(DecisionTree)是一种基本的分类与回归方法。本文会讨论决策树中的分类树与回归树,后续文章会继续讨论决策树的Boosting和Bagging的相关方法。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点,其中内部结点表示一个特征或属性,叶结点表示一个类。分类树分类树是一种描述对实例进行分类的树形结构。用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测…

    2022年6月23日
    43
  • vsftpd日志配置_centos7配置vsftp

    vsftpd日志配置_centos7配置vsftp1、开始vsftp记录日志。修改/etc/vsftpd/vsftpd.conf如下:xferlog_enable=YESxferlog_std_format=YESxferlog_file=/var/log/xferlogFTP服务器的日志设置,可以通过修改主配置文件/etc/vsftpd.conf实现。主配置文件中与日志设置有关的选项包括xferlog_enable、xferlog_file…

    2022年9月24日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号