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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MFC进度条控件颜色的设置

    MFC进度条控件颜色的设置平台:VS2013内容介绍:创建进度条控件ProgressControl控件并给它颜色的设置。在VC6.0里头可以直接用SendMessage函数就可以设置颜色了,但是在VS里头是不行的,要对进度条进行重绘。第一步:创建一个基于对话框的工程,并在对话框中拖动一个进度条控件,把属性smooth设置为True。Vertical属性是False的话就是水平。如果是True的话就是垂直增长的。第二步:1…

  • SQL FOREIGN KEY

    SQL FOREIGN KEY 一个表中的FOREIGHKEY指向另一个表中的PRIMARYKEY。 通过实例来解释外键。请看下面两个表:注意:  ·"Orders"表中的"P_Id"列指向"Persons"表中的"P_Id"列。  ·"Persons"表中的"P_Id"列是"Persons"表中的PRIMARYKEY。  ·"Orders&quo

  • win10系统下JDK环境变量配置失败的原因

    win10系统下JDK环境变量配置失败的原因win10系统下配置JDK环境变量,按照网上的教程,最后cmd验证总是出错,经过探索才发现,网上的教程都是win7的,在配置PATH时,网上的教程是:%JAVA_HOME%\bin;最后的分号,win7需要,win10是不需要的。当点击编辑出现的是这个界面的时候,直接添加即可,不用带;…

  • 外链图床-PicGo-Gitee

    外链图床-PicGo-Gitee前言刚开始写建立博客的时候,头疼过图片该如何处理:直接放github的仓库里吧。可是随着图片越来越多,每次pull、clone都需要耗费大量的时间。而且github的仓库加载很慢,影响博客的流畅性。外链图床吧。可是国内基本上没有什么好用的免费图床,七牛云之类的都需要收费的。国外的图床加载速度又是特别的慢。自己搭建。图床搭建所使用的工具为PicGo、Gitee、Typora.在这之前,我一般在VSCode上面写Markdown文档,但是现在开始添加图片到博客中去,转而使用Typora,以便

  • Linux 的 sendfile[通俗易懂]

    Linux 的 sendfile[通俗易懂]作者:DraganStancevic,2003-01-01原文地址:http://www.linuxjournal.com/article/6345译者:Love.Katherine,2007-03-25译文地址:http://blog.csdn.net/lovekatherine/archive/2007/03/25/1540291.aspx如今几乎每个人都听说过Li

  • Uniapp进行APP打包——iOS 系统[通俗易懂]

    1、创建唯一标识符(1)首先,申请苹果开发者账号。没有苹果开发者账号是无法进行ios打包上线的。(2)进入https://developer.apple.com这个网址,点击“account”并输入苹果开发者账号进入用户界面。(3)点击证书文件(4)进入到这界面以后,点击“APPIDs”,并新建一个APPid(5)设置name和BundleID注意,这个BundleID的格式不要写错在后面多处都会用到。(6)配置相应服务,并点击con

发表回复

您的电子邮箱地址不会被公开。

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