下面是 “SpringBoot整合Redis入门之缓存数据的方法” 的完整攻略。
简介
在高并发访问下,数据库成为了性能瓶颈,为了解决这个问题,我们可以加入缓存来减轻数据库的压力,提高网站的响应速度。Redis作为一个高性能的内存数据库,被广泛应用于缓存系统中。在SpringBoot中,通过RedisTemplate来实现redis的缓存数据。
环境准备
首先需要安装redis server,并启动redis服务。可以从官网下载redis安装包,或者直接使用主流linux发行版的包管理工具进行安装。安装完成后可以直接使用redis-server命令启动redis服务。
添加Redis依赖
在SpringBoot的pom.xml文件中添加Redis依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置Redis
SpringBoot提供了自动化配置,只需在配置文件中添加以下配置即可:
spring:
redis:
host: localhost
port: 6379
其中,host和port为Redis的地址和端口号。如果需要设置Redis的密码,可以在配置中添加以下配置:
spring:
redis:
host: localhost
port: 6379
password: mypassword
使用RedisTemplate
在SpringBoot中,我们可以通过RedisTemplate来实现redis的操作。可以自定义一个RedisUtil工具类:
import java.util.concurrent.TimeUnit;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class RedisUtil {
private final RedisTemplate<Object, Object> redisTemplate;
public RedisUtil(RedisTemplate<Object, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void set(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public void set(String key, Object value, long expireTime, TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, value, expireTime, timeUnit);
}
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
public void del(String key) {
redisTemplate.delete(key);
}
}
这个类定义了一些简单的redis操作,set方法用来设置值,get方法用来获取值,del方法用来删除值。set方法中可以传入过期时间,可以用来实现缓存自动失效。
示例说明
下面我们来看两个简单的示例:
示例1:缓存用户信息
假设一个用户信息的查询操作需要从数据库中获取,一般情况下,如果这个查询操作的访问频率比较高,那么就会对数据库造成很大压力。这时可以将查询结果缓存到Redis中,下次查询时直接从缓存中取值,这样可以减轻对数据库的压力。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private RedisUtil redisUtil;
@GetMapping("/{id}")
public User getUserById(@PathVariable("id") Long id) {
User user = (User) redisUtil.get("user_" + id);
if (user != null) {
return user;
}
user = userService.getUserById(id);
redisUtil.set("user_" + id, user, 60, TimeUnit.SECONDS);
return user;
}
}
在getUserById方法中,首先从redis中获取缓存的用户信息,如果存在则直接返回缓存值,否则从数据库中获取信息,并将获取结果缓存到redis中。
示例2:缓存热门文章
假设一个网站的首页需要显示热门文章排行榜,对于这种需要频繁查询的操作,也可以将其缓存到Redis中,减轻对数据库的压力。
@RestController
@RequestMapping("/article")
public class ArticleController {
@Autowired
private ArticleService articleService;
@Autowired
private RedisUtil redisUtil;
@GetMapping("/hot")
public List<Article> getHotArticles() {
List<Article> articles = (List<Article>) redisUtil.get("hot_articles");
if (articles != null) {
return articles;
}
articles = articleService.getHotArticles();
redisUtil.set("hot_articles", articles, 60, TimeUnit.SECONDS);
return articles;
}
}
在getHotArticles方法中,同样先从redis中获取缓存值,如果存在直接返回缓存值,否则从数据库中获取结果,并将结果缓存到redis中。这样在高访问量的情况下,仍可以保持网站的正常响应。
结束语
通过上述几个简单的示例,我们可以看到在SpringBoot中整合Redis非常简单,只需添加依赖和配置即可。在高并发访问的场景下,使用Redis缓存可以有效减轻数据库的压力,提高响应速度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Redis入门之缓存数据的方法 - Python技术站