Redis缓存

就先不连接数据库了  我们测试缓存

实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private  int id;
    private  String name;
    private  String sex;
    private  String addr;
}

service:

@Service
public class UserService {

    public User findUserById(int id){
        User user=new User(1001,"库里","男","勇士");
        System.out.println("加入了service方法");
        return  user;
    }
}

controller

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/findUser")
    public User findUserById(int id){
        User user=userService.findUserById(id);
        return user;
    }
}

 =============================================================

加入redis缓存

配置文件:

spring:
  redis:
    host: 192.168.200.166
    password: 123.com
    database: 10
    port: 6380

在service中的方法上加注解

 //在查询的方法上加入缓存
    @Cacheable(cacheNames = "user",key = "#id")

  //在查询的方法上加入缓存
    @RequestMapping("/findUser")
    public User findUserById(int id){
        User user=userService.findUserById(id);
        return user;
    }

在启动类上加:

@EnableCaching  ///开启spring的声明式缓存

即可完成!!!

解决乱码问题

配置类:

@Configuration
public class RedisConfig {

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        //缓存配置对象
        RedisCacheConfiguration redisCacheConfiguration =
                RedisCacheConfiguration.defaultCacheConfig();
        redisCacheConfiguration =
                redisCacheConfiguration.entryTtl(Duration.ofMinutes(30L)) //设置缓存的默 认超时时间:30 分钟
                        .disableCachingNullValues() //如果是空值,不缓存
                        .serializeKeysWith(RedisSerializationContext
                                .SerializationPair.fromSerializer(new StringRedisSerializer())) //设置 key 序列化器
                        .serializeValuesWith(RedisSerializationContext.
                                SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); //设置 value 序列化器
        //重载就可以了
        return RedisCacheManager
                .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
                .cacheDefaults(redisCacheConfiguration).build();
    }
}

解决:

 保存一个集合

service:

    @Cacheable(cacheNames = "userList") 
public List<User> findUserList(){
        User user1=new User(1001,"库里1","男","勇士");
        User user2=new User(1002,"库里2","nan","勇士");
        User user3=new User(1003,"库里3","男","勇士");
        User user4=new User(1004,"库里4","nan","勇士");

        List<User> list=new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);

        return  list;
    }

controller

 //做一个集合的
    @RequestMapping("/findUserList")
    public List<User> findUserList(){
        List<User> userList = userService.findUserList();
        return userList;

    }

会有点小问题

 key并不是我们想要的

@Cacheable(cacheNames = "userList",key = "'aa'")

 还可以这么写:

@Cacheable(cacheNames = "user",key = "'u:'+#id")

+  和  ' '  单引号

 

@Cacheable(cacheNames = "user",key = "'u:'+#id",condition = "#id == 1000")

id为1000才会缓存

修改

service:

/**
     * 修改操作
     * @param user
     * @return
     */
    @CachePut(key = "'u'+#user.id")
    public  User updateUser(User user){
        System.out.println("修改会一直进入service....");
        user.setName("詹姆斯");
        user.setAddr("湖人");
        user.setSex("man");
        //同步数据库
        //上面我么可以连接数据库进行对数据库的修改操作
        return  user;
    }

controller

 @RequestMapping("/update")
    public  User updateUser(User user){
        User user1 = userService.updateUser(user);
        return user1;

    }

 目的就是同步数据库

================================================================

删除

service:

 //删除   除了删除其他的都需要返回值
    @CacheEvict(key = "'u'+#id")
    public void  deleteUser(int id){
        System.out.println("删除了数据");
    }

controller

 @RequestMapping("/deleteUser")
    public void  deleteUser(int id){
        userService.deleteUser(id);
    }

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/19339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小家电LED显示驱动多功能语音芯片IC方案 WT2003H4 B002

随着时代的进步&#xff0c;智能家电的普及已经成为了一个趋势。而在智能家电中&#xff0c;LED显示屏也成为了不可或缺的一部分。因此&#xff0c;在小家电的设计中&#xff0c;LED显示驱动芯片的应用也越来越广泛。比如&#xff1a;电饭煲、电磁炉、数字时钟、咖啡机、电磁炉…

java版spring cloud 企业电子招投标采购系统源码之首页设计

随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审计监督要…

“正大杯”第十三届市场调查与分析大赛[省一]经验总结+复盘

目录 1 前期组队 2 队员组成 队长-成员1 应用统计学专业 成员2 化学实验专业 成员3-本人 物联网工程专业 成员4 金融ACCA专业 成员5 应用物理学 总结 3 比赛进度 3月中旬 部分图表的制作 问卷设计与制作 稍微改动主题 问卷相关总结 前期调查部分论文框架 3月…

怎么把webp文件转换为jpg?这几种方法值得学习!

怎么把webp文件转换为jpg&#xff0c;我想这样的问题对于那些和图片打交道不多的人来说确实有些困难吧。在我们要处理这个问题之前&#xff0c;我们先来了解一下图片格式webp吧。要是知道Youtube、Gmail、Google Play 中都可以看到 WebP 的身影&#xff0c;而 Chrome 网上商店甚…

高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

python版本&#xff1a;3.10 在列表中&#xff0c;append和pop方法有一个特殊的用途。可以在列表上使用这两个方法让列表变成一个堆栈使用。 这就是一个栈&#xff0c;它是先进后出&#xff0c;类似单门轿厢电梯一样的设计&#xff0c;出入口共用 堆栈最有用的应用之一就是做逆…

如何解决请求参数为JSON时,采用IO流读取,只能请求一次的问题?

如何解决请求参数为JSON时&#xff0c;采用IO流读取&#xff0c;只能请求一次的问题&#xff1f; 一、错误演示1. 创建项目&#xff0c;添加所需依赖2. 配置redis环境3. 写一个简单的测试请求4. 写一个拦截器&#xff0c;拦截请求5. WebConfig 注册拦截器6. 测试请求 二、问题解…

VR全景园区:数字化旅游业的新未来

VR全景园区是未来数字化旅游业的一种新兴形式。它利用高清晰度的3D图像和360度全景拍摄技术&#xff0c;将景区中的自然风光、历史文化和人文风情等元素呈现在游客面前。VR全景园区不仅可以为游客提供身临其境的参观体验&#xff0c;还可以有效地推广当地的文化和旅游资源。 【…

调试和优化遗留代码

1. 认识调试器 1.1 含义 一个能让程序运行、暂停、然后对进程的状态进行观测甚至修改的工具。 在日常的开发当中使用非常广泛。(PHP开发者以及前端开发者除外) 1.2 常见的调试器 Go语言的自带的 delve 简写为 “dlv”GNU组织提供的 gdbPHP Xdebug前端浏览器debug 调试 1.3…

English Learning - L3 作业打卡 Lesson2 Day8 2023.5.12 周五

English Learning - L3 作业打卡 Lesson2 Day8 2023.5.12 周五 引言&#x1f349;句1: The color green is natural for trees and grass.成分划分弱读语调 &#x1f349;句2: But it is an unnatural color for humans.成分划分弱读连读语调 &#x1f349;句3: A person who h…

1.SpringBoot基础篇

SpringBoot 文档更新日志 版本更新日期操作描述v1.02021/11/14A基础篇 前言 ​ 很荣幸有机会能以这样的形式和互联网上的各位小伙伴一起学习交流技术课程&#xff0c;这次给大家带来的是Spring家族中比较重要的一门技术课程——SpringBoot。一句话介绍这个技术&#xff0c;…

自学软件测试,从10K到40K的技术路线,也就是这些东西...

如果有一天我从梦中醒来时&#xff0c;发现自己的几年自动化测试工程师经验被抹掉&#xff0c;重新回到了一个小白的状态。我想要重新自学自动化测试&#xff0c;然后找到一份自己满意的测试工作&#xff0c;我想大概只需要6个月的时间就够了&#xff0c;如果比较顺利的话&…

头部企业走入无人区,国产数智化厂商挑大梁

本文转自数智前线 文&#xff5c;石兆 编&#xff5c;游勇 央国企数智化与信创化双重需求叠加&#xff0c;国产厂商挑大梁&#xff0c;助力企业升级数智化底座&#xff0c;实现价值化国产替代。 4月&#xff0c;在北京用友产业园的数智剧院里&#xff0c;近千位来自30个行业…

uniapp实现微信小程序横屏适配问题demo效果(整理)

使用VMIN进行布局 先了解css3的两个属性vmax和vmin vmax 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax vmin 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin竖屏布局的时候&#xff0c;750rpx就是竖屏布局屏幕的宽度…

Golang每日一练(leetDay0062) BST迭代器、地下城游戏

目录 173. 二叉搜索树迭代器 Binary Search Tree Iterator &#x1f31f;&#x1f31f; 174. 地下城游戏 Dungeon Game &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 …

ASEMI代理LT8609AJDDM#WTRPBF原装ADI车规级芯片

编辑&#xff1a;ll ASEMI代理LT8609AJDDM#WTRPBF原装ADI车规级芯片 型号&#xff1a;LT8609AJDDM#WTRPBF 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;DFN-10 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;10 工作温度:-40C~125C 类型…

python基础语法

一、配置python环境 &#xff08;1&#xff09;设置环境变量 path添加 C:\Program Files\Python3_11 C:\Program Files\Python3_11\Scripts &#xff08;2&#xff09;了解pip 什么是pip&#xff1f; pip是pyton包管理器&#xff0c;pypi&#xff08;Python Package Ind…

前端开发之Echarts 图表渐变两种实现方式和动态改变图表类型

前端开发之Echarts 图表渐变两种实现方式 前言效果图一、echarts中存在两种渐变方式1、color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{}&#xff0c;{}&#xff0c;{}])简单案例 2、{type: linear,x: 0,y: 0,x2: 0,y2: 1, [{}&#xff0c;{}&#xff0c;{}]}案例 二…

Codeforces Round 872 (Div. 2)

Problem - D2 - Codeforces 思路&#xff1a; 我们设good点到所有k点的距离和为dis。 假设good点不止一个&#xff0c;那么我们good点的dis应该都是相等的&#xff08;废话&#xff09;。设当前点u是good点&#xff0c;如果他往儿子v移动&#xff0c;儿子有w个点属于k&#…

怎么把mkv格式改成mp4?不妨试试这几种方法吧!

怎么把mkv格式改成mp4&#xff1f;mp4是一种多媒体封装格式&#xff0c;不过我们通常会将它说成是视频格式&#xff0c;它可以在一个文件中容纳无限数量的视频、音频、图片或字幕轨道&#xff0c;mp4格式也是被我们每个人所熟知&#xff0c;因为我们每个人几乎每天都会接触或者…

美团太细了,HashMap可以存null,ConcurrentHashMap不可以,为什么?

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 420 篇原创分享 作者 l Hollis 来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; 我们知道&#xff0c;ConcurrentHashMap在使用时&#xff0c;和HashMap有一个比较大的区别&#xff0c;那就是HashM…