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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • fcntl 函数「建议收藏」

    fcntl 函数「建议收藏」fcntl函数浅解Linux系统中使用man查看fcntl函数的原型为fcntl(intfd,intcmd,……/arg/);自己在使用时用到了fcntl(intfd,intcmd,longarg);F_SETFL:设置文件状态标志。将文件的状态标志设置为第三个参数arg的值(取整数值),其中O_RDONLY,O_WRONLY,O_RDWR,O_CREAT

    2025年7月17日
    4
  • 怎样用Google APIs和Google的应用系统进行集成(1)—-Google APIs简介

    怎样用Google APIs和Google的应用系统进行集成(1)—-Google APIs简介

    2022年1月20日
    50
  • 安装计算机的显卡出现问题,电脑显卡驱动安装失败如何解决「建议收藏」

    安装计算机的显卡出现问题,电脑显卡驱动安装失败如何解决「建议收藏」部分的网友们是电脑重装新的系统后出现的,也有部分的网友们是用系统自带的显卡更新的功能程序导致的,要如何解决显卡驱动安装失败的问题呢?一般寻找原因所在,一般是驱动数字签名的问题引起的,或者是显卡驱动的型号下载的不对。下面小编整理了对此问题的解答。一起来看看显卡驱动安装失败的解决方法吧!法一;驱动数字签名导致的;(1)win+R快捷键打开运行窗口,输入gpedit.msc后点击确定。(2)打开组策略编…

    2022年6月5日
    48
  • 代码优化

    代码优化

    2021年11月29日
    43
  • Java中有哪些集合,集合中有哪些类?

    Java中有哪些集合,集合中有哪些类?Java中所有的类都位于java.util包下,主要由两个接口派生出来,分别是Collection和Map.Collection包含了List和Set两大分支。Map是一个映射接口。Set、Map、List可以看做集合的三大类。而遍历集合的工具有Iterator和Enumeration;Arrays和Collection是操作数组集合的两个工具类。一、Java中的集合主要分为四类:1、L…

    2022年7月7日
    26
  • Java工程师就业前景及薪资水平

    Java工程师就业前景及薪资水平Java工程师就业前景及薪资水平在互联网+的影响下,这几年,中国的互联网行业进入了高速发展的阶段,IT行业成为热门,备受追捧和关注。在全球云计算和移动互联网的产业环境下,想参加Java培训成为Java工程师也是很多小伙伴的追求,那么Java工程师就业前景如何?薪资水平高不高呢?下面就来具体了解一下吧。一、Java工程师就业前景1、Android开发:Android是全球最大的智能手机操作系统,根据StrategyAnalytics研究报告显示,全球智能手机出货量在2016年第三季度达到3.75亿台

    2022年7月9日
    19

发表回复

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

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