使用springBoot+Redis实现分布式缓存

使用springBoot+Redis实现分布式缓存

1. 添加redis框架 依赖

image-20231102215956817

2. 配置redis连接信息

#redis 连接的配置信息
spring.redis.database=15
spring.redis.port=6379
spring.redis.host=82.157.236.116
# 可省略
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms

3. 操作redis

3.1 代码式操作redis

@RestController
public class RedisController {//引入redis模版@Autowiredprivate StringRedisTemplate stringRedisTemplate;@RequestMapping("/set")public String setRedis(){//redis写缓存的操作stringRedisTemplate.opsForValue().set("username","zhangsan");return "redis存储成功";}@RequestMapping("/get")public String getRedis(){String result = stringRedisTemplate.opsForValue().get("username");return result;}
}

3.2使用注解操作redis

  • @Cacheable: 查询/添加;判断 redis 是否有缓存,如果没有那么就把当前方法返回值存到 redis; 如果存在缓存直接返回。
  • @CachePut: 修改; 将方法返回值更新到 redis 缓存中。
  • @CacheEvict:删除;将 redis 中对应的缓存删除。

在启动类中添加注解

@EnableCaching // 开启全局注解缓存

@RestController
public class RedisAnnController {//存入或读取缓存@RequestMapping("/ann-get")@Cacheable(value = "spring.cache", key = "#name+'-'+#pnumber")public String get(String name, String pnumber) {if (!StringUtils.hasLength(name) || !StringUtils.hasLength(pnumber)) {return null;}System.out.println("执行了 get 方法");return "name=" + name + "|pnumber=" + pnumber;}//更新缓存@RequestMapping("/put")@CachePut(value = "spring.cache", key = "#name+'-'+#pnumber")public String put(String name ,String pnumber){if (!StringUtils.hasLength(name) || !StringUtils.hasLength(pnumber)) {return null;}System.out.println("执行了 put 方法");return "[name=" + name + "<->pnumber=" + pnumber + "]";}//redis 缓存删除@RequestMapping("/del")@CacheEvict(value = "spring.cache",key = "#name + '-' + #pnumber")public void del(String name ,String pnumber){System.out.println("执行了删除缓存");}
}

4. 使用Redis存储Session

4.1 添加依赖

image-20231105194948808

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>

4.2 配置 redis 连接和 session 的相关信息

spring:redis:host: 82.157.236.116port: 6379database: 15password: "XXXXXXXXXXXXX"session:store-type: redisredis:flush-mode: on_savenamespace: spring:sessionservlet:session:timeout: 1800

经过上述操作有关session的信息都存储到了redis中的15号数据库,spring:session包中

4.3 redis存储对象

使用Spring Data Redis时,尝试将一个非序列化存储在redis中会产生错误。这个错误是由于在使用Spring Data Redis时,尝试将一个非序列化的对象(Userinfo类型)存储到Redis中导致的。要解决这个问题,你需要确保Userinfo类实现了Serializable接口。

在Userinfo类上添加@Serializable注解:

import java.io.Serializable;public class Userinfo implements Serializable {// ... 其他代码 ...
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov8+动物+姿态识别(训练教程+代码)

本文关键词&#xff1a; 关键点检测 关键点估计 姿态估计 YOLO 动物姿态估计是计算机视觉的一个研究领域&#xff0c;是人工智能的一个子领域&#xff0c;专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一种或多种动物的身体部位&#xff08;例如头部、四…

linux上重启mysql

1、先关闭 [rootHIS bin]# ./mysqladmin -h 127.0.0.1 -u root -p shutdown 2、 再重启 [rootHIS support-files]# ./mysql.server start

Mac 下安装golang环境

一、下载安装包 安装包下载地址 下载完成&#xff0c;直接继续----->下一步到结束即可安装成功&#xff1b; 安装成功之后&#xff0c;验证一下&#xff1b; go version二、配置环境变量 终端输入vim ~/.zshrc进入配置文件&#xff0c;输入i进行编辑 打开的不管是空文本…

C++ map 的使用

下面的是关于 map 的介绍。来自 map - C Reference (cplusplus.com) 的翻译&#xff0c;您可以看也可以不看哈&#xff01; map 是关联容器&#xff0c;它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。在 map 中&#xff0c;键值 key 通常用于排序…

R语言 PPT 预习+复习

什么狗吧发明的结业考&#xff0c;站出来和我对线 第一章 绪论 吊码没有&#xff0c;就算考R语言特点我也不背&#xff0c;问就是叫么这没用。 第二章 R语言入门 x<-1:20 赋值语句 x 1到20在x上添加均值为0、标准差为2的正态分布噪声 y <- x rnorm (20, 0, 2) 这…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持&#xff0c;所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点&#xff1a;线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作&#xff0c;分别是创建、…

python基础速通

1. 梳理&#xff1a;目前学习了哪几种数据类型&#xff0c; 每一个数据类型定义一个变量&#xff0c;并输出内容以及类型 # 数据类型 # 整型 int_data 1 print(int_data, type(int_data)) # 浮点型 float_data 1.2 print((float_data, type(float_data))) # 复数 complex_da…

java高级之单元测试、反射

1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法&#xff0c;执行在所有方法之后 3.被Before标记的方法&#xff0c;执行在每一个Test方法之前 4.被After标记的方法&#xff0c;执行在每一个Test方法之后 public …

什么情况造成互斥锁死锁

由于互斥锁的使用不当&#xff0c;导致多个线程无法进行下一步的代码运行&#xff0c;也就是说竞争锁的两个线程互相锁住&#xff0c;导致整个进程无法往下运行。 举个例子&#xff1a; 两个锁&#xff0c;两个线程&#xff0c;两个线程运行的条件都是需要同时获得这两把锁&a…

高防CDN:游戏应用抵御DDoS攻击的坚固堡垒

在当今的数字时代&#xff0c;游戏应用已经成为人们生活的一部分&#xff0c;而面临的网络威胁也日益复杂。其中&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击是游戏应用的一项严重威胁&#xff0c;可能导致游戏服务不可用&#xff0c;用户流失&#xff0c;以及…

AI:54-基于深度学习的树木种类识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Spring AOP 简介

一、Spring AOP AOP 是一种思想&#xff0c;而 Spring AOP 是一个框架&#xff0c;提供了一种对 AOP 思想的实现。 1、什么是 AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;是一种编程思想&#xff0c;表示面向切面编程。指的是对某…