spring cache的使用(Redis)

在这里插入图片描述
要在Spring Boot应用中使用Redis作为缓存,你需要遵循一些步骤来配置和使用Redis。以下是使用Spring Cache抽象与Redis进行整合的详细说明:

1. 添加依赖

首先,需要在pom.xml中添加Spring Boot的Redis starter依赖以及缓存的starter依赖。这会自动引入Spring Data Redis和相关的库。

<dependencies>
    <!-- Spring Boot Redis Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- Spring Boot Cache Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
</dependencies>

2. 配置Redis

接下来,需要在application.propertiesapplication.yml文件中配置Redis服务器的连接信息。

# Redis配置
spring.redis.host=localhost
spring.redis.port=6379
# 如果Redis设置了密码,还需要配置密码
# spring.redis.password=yourpassword

3. 启用缓存支持

在Spring Boot的主配置类上添加@EnableCaching注解以启用缓存支持。

@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4. 使用缓存注解

现在,你可以在服务层或其他组件中使用@Cacheable@CacheEvict@CachePut注解来操作缓存。

@Service
public class UserService {

    @Cacheable(value = "users", key = "#userId")
    public User getUserById(String userId) {
        // 从数据库或其他地方获取用户信息
        return new User(userId, "Example User");
    }

    @CachePut(value = "users", key = "#user.id")
    public User updateUser(User user) {
        // 更新用户信息逻辑
        return user;
    }

    @CacheEvict(value = "users", key = "#userId")
    public void deleteUser(String userId) {
        // 删除用户逻辑
    }
}

5. 配置缓存管理器(可选)

虽然Spring Boot为Redis提供了自动配置,但你可能需要自定义缓存管理器以调整其行为。你可以通过配置一个CacheManager Bean来实现这一点。

@Configuration
public class RedisConfig {

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofHours(1)) // 设置缓存有效期为1小时
            .disableCachingNullValues(); // 不缓存空值

        return RedisCacheManager.builder(connectionFactory)
                .cacheDefaults(config)
                .build();
    }
}

6. 运行和测试

一旦完成上述配置,你的Spring Boot应用就已经配置好了Redis缓存。当你调用使用了缓存注解的方法时,Spring会自动处理缓存的读取和更新,将数据存储在Redis中。

注意事项

  • 确保Redis服务器正在运行,并且连接信息配置正确。
  • 根据需要调整缓存的各种设置,例如缓存的有效期、序列化机制等。
  • 考虑到Redis是基于内存的存储系统,确保你的Redis实例有足够的内存来存储缓存数据。

通过以上步骤,你可以在Spring Boot应用中轻松地使用Redis进行高效的数据缓存和访问。
@Cacheable是Spring Cache提供的一个注解,用于声明某个方法的返回值是可以被缓存的。当标记了@Cacheable的方法被调用时,Spring Cache会首先检查缓存中是否存在已经缓存的数据。如果缓存中存在对应的数据,则直接返回缓存的数据,而不需要执行方法本身。如果缓存中没有对应的数据,那么会执行方法本身,然后将方法的返回值放入缓存中。

在给出的示例中:

@Cacheable(value = "users", key = "#userId")
public User getUserById(String userId) {
    // 从数据库或其他地方获取用户信息
    return new User(userId, "Example User");
}
  • @Cacheable(value = "users", key = "#userId"): 这里的@Cacheable注解表示getUserById方法的返回值是可缓存的。
    • value = "users": 指定缓存的名称为"users"。在配置缓存实现时,可以根据这个名称来设置不同缓存的不同参数,例如过期时间、最大容量等。在同一个应用中,不同的缓存名称对应不同的缓存区域。
    • key = "#userId": 指定缓存的key。这里使用的是Spring Expression Language (SpEL) 表达式#userId,它表示方法的参数userId的值将被用作缓存的key。这意味着,对于相同的userId参数值,方法只会在第一次被调用时执行并缓存结果;之后相同userId值的调用将直接返回缓存中的数据。

在实际执行时,如果你第一次调用getUserById("123"),方法会执行,查询数据库或其他数据源获取用户信息,并将结果(假设是new User("123", "Example User"))缓存到名为"users"的缓存中,其中key为"123"。当你再次调用getUserById("123")时,Spring Cache会检查"users"缓存中是否存在key为"123"的缓存项。由于该缓存项存在,Spring Cache会直接返回缓存中的数据,而不是再次执行方法体内的代码。

这种方式显著提高了性能,特别是在获取用户信息这样的操作中,通常涉及到对数据库的访问,这可能是一个相对较慢的操作。通过缓存这些操作的结果,可以减少对数据库的访问次数,从而提高应用程序的响应速度和整体性能。

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

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

相关文章

我的创作纪念日和前端碎碎念

机缘 作为一个前端开发者&#xff0c;我一直热衷于将设计和技术相结合&#xff0c;尽可能提升用户体验。我最初成为创作者的初心源于学习记录&#xff0c;把创作当作一个笔记&#xff0c;希望把自己遇到的问题&#xff0c;以及学习到的实用技巧记录下来&#xff0c;方便学习回…

新书速览|Docker与Kubernetes容器运维实战

帮助读者用最短的时间掌握Docker与K8s运维技能 内容简介 随着云计算和容器技术的发展&#xff0c;Docker与Kubernetes已经成为各个企业首选的部署工具&#xff0c;使用它们可以提高系统的部署效率和运维能力&#xff0c;降低运维成本。本书是一本为初学者量身定制的Docker与Kub…

nodejs+vue+mysql校园失物招领网站38tp1

本高校失物招领平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这两者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优化界…

nodejs+vue+ElementUi学生兼职招聘求职系统b8t93

浏览器&#xff1a;谷歌浏览器课题主要分为三大模块&#xff1a;即管理员模块和学生、企业模块&#xff0c;主要功能包括&#xff1a;学生、企业、岗位类型、招聘信息、应聘信息、投诉建议等&#xff1b; 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1…

【MBtiles数据索引和服务发布】GeoServer改造Springboot番外系列二

xyz地图服务访问示例&#xff1a;http://192.168.1.240:8081/gmserver/raster/xyz/firstWP:Imagery-raster/{z}/{x}/{y}.jpg 访问示例如下&#xff1a; mbtiles目录结构 根据z&#xff0c;x&#xff0c;y获取对应mbtiles文件路径的工具方法 说明&#xff1a;重点是使用getMb…

STM32——I2C

通信协议见&#xff08;STM32——SPI&#xff09; 一、I2C协议 1.1 I2C协议介绍&#xff1b; I2C是&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线&#xff1b; 有多根通信线&#xff1b; 一根SDA&#xff08;串行通信线&#xff09;&#xf…

PySpark(一)Spark原理介绍、PySpark初体验及原理

Spark简介 Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎&#xff0c;其特点就是对任意类型的数据进行自定义计算。 Spark VS Hadoop 尽管Spark相对于Hadoop而言具有较大优势&#xff0c;但Spark并…

Three.js 纹理贴图 - 环境贴图 - 纹理贴图 - 透明贴图 - 高光贴图

文章目录 Three.js 纹理贴图纹理贴图 map属性纹理贴图的映射方式 texture.Mapping纹理加载器 THREE.TextureLoader监听单个材质监听多个材质 - LoadingManager类 1. 颜色贴图与材质的颜色2.渲染效果&#xff1a;UV坐标 - 描述纹理贴图的坐标自定义顶点UVgeometry.attributes.uv…

Java 数据抓取

大家好我是苏麟 , 今天聊聊数据抓取 . 大家合理使用 注意&#xff0c;爬虫技术不能滥用&#xff0c;干万不要给别人的系统造成压力、不要侵犯他人权益! 数据抓取 实质上就是java程序模拟浏览器进行目标网站的访问&#xff0c;无论是请求目标服务器的接口还是请求目标网页内容…

python基础——池

池的介绍&#xff1a; 提前创建进程池&#xff0c;防止创建的进程数量过多导致系统性能受到影响&#xff0c;在系统执行任务时&#xff0c;系统会使用池中已经创建进程/线程&#xff0c;从而防止资源的浪费&#xff0c;创建的进程/线程可以让多个进程使用&#xff0c;从而降低…

Unity技术手册-UGUI零基础详细教程-Canvas详解

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

备战蓝桥杯---数据结构与STL应用(入门4)

本专题主要是关于利用优先队列解决贪心选择上的“反悔”问题 话不多说&#xff0c;直接看题&#xff1a; 下面为分析&#xff1a; 很显然&#xff0c;我们在整体上以s[i]为基准&#xff0c;先把士兵按s[i]排好。然后&#xff0c;我们先求s[i]大的开始&#xff0c;即规定选人数…

电源模块欠压保护点测试方法分享 纳米软件

电源欠压保护原理 欠压保护是指当电源电压低于一定值时&#xff0c;电源的保护功能会及时断开电路&#xff0c;避免设备受到损坏。电源欠压保护一般是通过一个或多个传感器来检测电压&#xff0c;当电压低于设定值时就会触发电源的保护功能&#xff0c;断开电路&#xff0c;保护…

Git--07--GitExtension

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、GitExtension下载GitExtension官网下载教程 二、GitExtension安装三、GitExtension配置四、GitExtension使用 一、GitExtension下载 官网下载&#xff1a; http…

Docker中安装MySql的遇到的问题

目录 一、mysql查询中文乱码问题 1. 进入mysql中进行查看数据库字符集 2. 修改 my.cnf 中的配置 3. 重启mysql容器&#xff0c;使得容器重新加载配置文件 4. 测试结果 二、主从同步中遇到的问题 2.1 Slave_IO_Running:Connecting 的解决方案 1. 确定宿主机防火墙开放my…

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…

推荐一个好用的旧版本软件安装包下载地址

最近要下载旧版本的mysql和postman&#xff0c;发现官网和其他博客里边提供的地址&#xff0c;要不都非常难找到相应的下载链接&#xff0c;要不就是提供的从别的地方复制过来的垃圾教程&#xff0c;甚至有的下载还要积分&#xff0c;反正是最后都没下载成功&#xff0c;偶然发…

安全通道堵塞识别摄像机

当建筑物的安全通道发生堵塞时&#xff0c;可能会给人员疏散和救援带来重大隐患。为了及时识别和解决安全通道堵塞问题&#xff0c;专门设计了安全通道堵塞识别摄像机&#xff0c;它具有监测、识别和报警功能&#xff0c;可在第一时间发现通道堵塞情况。这种摄像机通常安装在通…

Mysql-索引创建,索引失效案例

索引创建建议 1 什么情况下需要创建索引&#xff1f; 频繁出现在where 条件字段&#xff0c;order排序&#xff0c;group by分组字段select 频繁查询的列&#xff0c;考虑是否需要创建联合索引&#xff08;覆盖索引&#xff0c;不回表&#xff09;多表join关联查询&#xff0…

【PyRestTest】高级使用

本节主要涉及PyRestTest的高级特征的详细使用,主要指:generators(生成器), variable binding(变量绑定), data extraction(数据提取), content validators(文本验证) 它们是如何组合在一起的? 模板和上下文 测试和基准测试可以使用变量来模板化动态配置。使用基础的…