SpringBoot 如何使用 Redis 作为缓存?

news/2024/11/22 19:40:53/

SpringBoot 如何使用 Redis 作为缓存?

引言

在今天的互联网应用中,缓存是一个非常重要的概念。缓存可以减轻数据库的负担,提高系统的性能。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 {@Beanpublic 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 作为缓存可以提高应用的性能,减轻数据库的负担,同时也可以提高应用的可扩展性和可靠性。


http://www.ppmy.cn/news/583758.html

相关文章

vh

nzs5e4e## sfc zfr在这里插入代码片 vdrx## ve## ~~ [ ] 标题 ~~

huang

看这里&#xff01;这里&#xff01;这里&#xff01;

皇后

在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。 你的任务是&#xff0c;对于给定的N&#xff0c;求出有多少种合法的放置方法。 Input 共有若干…

勃林格殷格翰与Lifebit合作识别全球传染病暴发;百济神州和Shoreline Biosciences达成合作 | 医药健闻...

| 行业焦点 勃林格殷格翰与Lifebit开展合作&#xff0c;识别全球传染病暴发。动物保健领域的全球领导企业勃林格殷格翰宣布与Lifebit生物科技公司开展长期合作&#xff0c;运用人工智能&#xff08;AI&#xff09;处理科学出版物和其他开源信息中的真实世界数据&#xff0c;识别…

文化中国 系列二:纪连海读历史品人物

系列二&#xff1a;纪连海读历史品人物 主讲人&#xff1a;纪连海 讲题&#xff1a;汉武大帝刘彻、清太宗孝庄文皇后博尔济吉特氏、历史上的非凡女人 6、【视频点播及迅雷下载】【纪连海】【文化中国】话说汉武大帝 完整性说明&#xff1a;55集&#xff0c;完整。 &#x…

vh和vw是什么单位?

在css3中&#xff0c;vh和vw是视口单位&#xff0c;是相对长度单位。 文章目录 前言一、视口单位&#xff08; Viewport units )1.在pc端2.在移动端 二、常见单位及使用1.常见单位2.使用 前言 提示&#xff1a;以下所有内容&#xff0c;仅为个人经验总结&#xff0c;非专业解释…

VIM for windows

普通人的编辑利器——VIM (for windows) 2007年03月21日 星期三 下午 04:43 FROM linxuelin 2005年5月&#xff0c;我开始用VIM。此后渐入佳境&#xff0c;原来因版权自律而放弃盗版UltraEdit的遗憾一扫而空。并且&#xff0c;从VIM我才体会到&#xff0c;什么才是真正的编辑利…

再争万兽之王 狮子VS老虎谁更凶猛?(图)

http://tech.163.com 2005-09-20 10:36:19 来源: 网易科学    网友评论 512 条 世人公认的两种最厉害的猫科动物是狮子和老虎。但是它们相比哪个更厉害&#xff1f;这个问题大家都感兴趣&#xff0c;而且众说纷纭&#xff0c;那么我今天就来详细地说一说吧。 世界上现存的…