SpringBoot 如何使用 Redis 作为缓存?

这篇具有很好参考价值的文章主要介绍了SpringBoot 如何使用 Redis 作为缓存?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot 如何使用 Redis 作为缓存?

引言

在今天的互联网应用中,缓存是一个非常重要的概念。缓存可以减轻数据库的负担,提高系统的性能。Redis 是一个非常流行的内存数据库,它可以用作缓存,提供快速的读写速度和高可用性。在本文中,我们将介绍如何在 SpringBoot 中使用 Redis 作为缓存。

SpringBoot 如何使用 Redis 作为缓存?

Redis 简介

Redis 是一个高性能的键值对存储系统,它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。Redis 的优点包括:

  • 快速:Redis 是一个基于内存的数据库,读写速度非常快。
  • 可扩展:Redis 支持分布式架构,可以通过横向扩展来提高性能。
  • 多样性:Redis 支持多种数据结构,可以应对不同的应用场景。
  • 持久化:Redis 支持数据持久化,可以保证数据不会丢失。

SpringBoot 集成 Redis

在 SpringBoot 中使用 Redis,我们需要添加 Redis 的依赖。在 pom.xml 文件中添加以下依赖:

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

添加依赖后,我们需要配置 Redis 的连接信息。在 application.properties 中添加以下配置:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=

这里的配置是连接本地的 Redis 服务,如果 Redis 服务在其他机器上,需要修改 host 和 port 的值。如果 Redis 服务需要密码认证,需要设置 password 的值。

RedisTemplate

SpringBoot 提供了 RedisTemplate 类来操作 Redis。RedisTemplate 是一个泛型类,可以操作多种数据类型。使用 RedisTemplate,我们可以将对象序列化为 byte 数组,然后存储到 Redis 中。RedisTemplate 的配置如下:

@Configuration
public class RedisConfig {
 
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
 
        // 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的 value 值(默认使用 JDK 的序列化方式)
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(objectMapper);
 
        // 使用 StringRedisSerializer 来序列化和反序列化 Redis 的 key 值
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(serializer);
 
        // 设置 hash key 和 value 序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);
 
        template.afterPropertiesSet();
        return template;
    }
}

在上面的配置中,我们使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的 value 值。同时,我们也需要使用 StringRedisSerializer 来序列化和反序列化 Redis 的 key 值。

使用 RedisTemplate

在 SpringBoot 中使用 RedisTemplate,我们可以通过注入 RedisTemplate 来操作 Redis。以下是一些常见的操作方法:

添加缓存

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void add(String key, Object value) {
    redisTemplate.opsForValue().set(key, value);
}

在上面的代码中,我们使用 opsForValue() 方法获取 RedisTemplate 的 ValueOperations 对象,然后使用 set 方法添加缓存。

获取缓存

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public Object get(String key) {
    return redisTemplate.opsForValue().get(key);
}

在上面的代码中,我们使用 opsForValue() 方法获取 RedisTemplate 的 ValueOperations 对象,然后使用 get 方法获取缓存。

删除缓存

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void delete(String key) {
    redisTemplate.delete(key);
}

在上面的代码中,我们使用 delete 方法删除缓存。

设置过期时间

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void expire(String key, long timeout, TimeUnit timeUnit) {
    redisTemplate.expire(key, timeout, timeUnit);
}

在上面的代码中,我们使用 expire 方法设置缓存的过期时间。

Redis 缓存注解

除了使用 RedisTemplate 来操作 Redis,我们还可以使用 SpringBoot 提供的缓存注解来实现缓存。SpringBoot 提供了 CacheManager 和 Cache 接口来管理缓存。我们可以使用 @EnableCaching 注解开启缓存功能,然后使用 @Cacheable、@CachePut、@CacheEvict 等注解来操作缓存。

@EnableCaching

首先,我们需要在 SpringBoot 应用中开启缓存功能。使用 @EnableCaching 注解即可开启缓存功能。

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

@Cacheable

@Cacheable 注解可以将方法的返回值缓存到 Redis 中,下次调用该方法时,会先从 Redis 中获取缓存,如果缓存不存在,则执行方法,并将返回值缓存到 Redis 中。

@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    // 执行方法
}

在上面的代码中,我们使用 @Cacheable 注解将 getUserById 方法的返回值缓存到名为 “users” 的缓存中,缓存的 key 是方法的参数 id。如果缓存中已经存在 key 是 id 的数据,则直接返回缓存中的数据,否则执行方法并将返回值缓存到 Redis 中。

@CachePut

@CachePut 注解可以更新 Redis 中的缓存数据,它会先执行方法,然后将方法的返回值更新到 Redis 中的缓存数据中。

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

在上面的代码中,我们使用 @CachePut 注解将 updateUser 方法的返回值更新到 Redis 中名为 “users” 的缓存中,缓存的 key 是 user 的 id 属性。

@CacheEvict

@CacheEvict 注解可以删除 Redis 中的缓存数据。

@CacheEvict(value = "users", key = "#id")
public void deleteUserById(Long id) {
    // 删除用户信息
}

在上面的代码中,我们使用 @CacheEvict 注解删除 Redis 中名为 “users” 的缓存中 key 是 id 的数据。

总结

在本文中,我们介绍了如何在 SpringBoot 中使用 Redis 作为缓存。我们学习了如何使用 RedisTemplate 和缓存注解来操作 Redis,包括添加缓存、获取缓存、删除缓存以及设置缓存过期时间。使用 Redis 作为缓存可以提高应用的性能,减轻数据库的负担,同时也可以提高应用的可扩展性和可靠性。文章来源地址https://www.toymoban.com/news/detail-514501.html

到了这里,关于SpringBoot 如何使用 Redis 作为缓存?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux服务器使用Redis作为数据缓存,并用log4j2进行日志记录

    前言 个人网站使用Vue作为前端,SpringBoot作为后端,MySQL作为数据库,但前端每次请求都会从MySQL数据库中读取数据,而MySQL数据库的数据是存储于服务器磁盘中,所以响应速度有一定影响。之前了解过一点Redis数据库,该数据库数据存储于内存中(也可以持久化于磁盘中),数

    2024年02月08日
    浏览(54)
  • redis作为缓存的选用及优缺点

    Redis vs. Memcached: 持久化支持: Redis支持两种持久化方式(RDB和AOF),而Memcached不支持持久化。这意味着Redis可以在服务器重启后恢复数据,而Memcached在重启后数据会丢失。 数据结构: Redis的数据结构更丰富,支持字符串、哈希表、列表、集合、有序集合等,而Memcached仅支持简

    2024年02月16日
    浏览(37)
  • redis(12):springboot使用redis注解做缓存

    1 新建springboot项目   2 相关注解 @EnableCaching 在启动类上加上注解启动缓存 #作用在你要缓存的数据上 @Cacheable(key=\\\"#id\\\",cacheNames=\\\"com.sxt.service.impl.MenuServiceImpl\\\") @Cacheput 解决脏读 @CachEvict(解决脏读) @Cacheconfig(全局的配置缓存) 3 修改yml

    2024年02月15日
    浏览(45)
  • springboot:缓存不止redis,学会使用本地缓存ehcache

    随着redis的普及,更多的同学对redis分布式缓存更加熟悉,但在一些实际场景中,其实并不需要用到redis,使用更加简单的本地缓存即可实现我们的缓存需求。 今天,我们一起来看看本地缓存组件ehcache ehcache是基于java开发的本地缓存组件,无需单独安装部署,只要引入jar包就

    2024年02月01日
    浏览(43)
  • SpringBoot使用Redis实现分布式缓存

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SpringBoot 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:SpringBoot使用

    2023年04月09日
    浏览(43)
  • SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】

    上一篇实现了单体应用下如何上锁,这一篇主要说明如何在分布式场景下上锁 上一篇地址:加锁 需要注意的点是: 在上锁和释放锁的过程中要保证 原子性操作 核心是上锁和解锁的过程 关于解锁使用脚本参考:SET key value [EX seconds] [PX milliseconds] [NX|XX] 3.1 一个服务按照多个端口同时

    2023年04月10日
    浏览(52)
  • 【虹科干货】Oracle与Redis Enterprise协同,作为企业缓存解决方案

    单独使用 Oracle作为企业缓存数据库时,会出现哪些问题呢?使用Redis Enterprise与Oracle共同用作企业级缓存或副本数据库,会出现哪些喜人的提升呢?Orcle配合使用Redis Enterprise,为什么能够打造更快、更高效、更具成本效益的现代企业数据库呢?     文章速览:   Oracle为什么需

    2024年02月05日
    浏览(49)
  • springboot+redis+mysql+quartz-使用pipeline+lua技术将缓存数据定时更新到数据库

    代码讲解:7.3点赞功能-定时持久化到数据库-Java程序整合pipeline+lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1Lg4y1w7U9 代码: blogLike_schedule/like08 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like08 数据库表:

    2024年02月13日
    浏览(43)
  • springboot+redis+mysql+quartz-通过Java操作jedis使用pipeline获取缓存数据定时更新数据库

    代码讲解:6-点赞功能-定时持久化到数据库-pipeline+lua-优化pipeline_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代码: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 数据库表的

    2024年02月16日
    浏览(48)
  • springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库

    springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库 代码讲解:7.1点赞功能-定时持久化到数据库-Java整合lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1ZX4y1H7JT/ 代码: blogLike_schedule/like07 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包