SpringBoot | 大新闻项目后端(redis优化登录)
在Spring Boot项目中,对登录接口进行Redis优化,可以通过缓存用户的登录状态来减少数据库的查询压力。以下是一个简化的示例:
- 添加依赖(pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置Redis(application.properties):
spring.redis.host=localhost
spring.redis.port=6379
- 创建Redis配置类:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
return template;
}
}
- 使用Redis缓存登录状态(LoginService.java):
@Service
public class LoginService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public boolean isLogin(String username) {
return redisTemplate.hasKey(username);
}
public void setLogin(String username) {
redisTemplate.opsForValue().set(username, "true", 10, TimeUnit.MINUTES); // 设置有效期为10分钟
}
public void logout(String username) {
redisTemplate.delete(username);
}
}
- 在登录接口中使用Redis缓存(LoginController.java):
@RestController
public class LoginController {
@Autowired
private LoginService loginService;
@PostMapping("/login")
public ResponseEntity<?> login(@RequestParam String username, @RequestParam String password) {
// 假设验证逻辑
if ("user".equals(username) && "pass".equals(password)) {
loginService.setLogin(username); // 登录成功后,设置缓存
return ResponseEntity.ok("登录成功");
}
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("登录失败");
}
@GetMapping("/isLogin")
public ResponseEntity<?> isLogin(@RequestParam String username) {
if (loginService.isLogin(username)) {
return ResponseEntity.ok("已登录");
}
return ResponseEntity.ok("未登录");
}
@PostMapping("/logout")
public ResponseEntity<?> logout(@RequestParam String username) {
loginService.logout(username); // 登出时,删除缓存
return ResponseEntity.ok("注销成功");
}
}
在这个示例中,我们使用了Spring Data Redis的RedisTemplate
来操作Redis。用户登录后,会在Redis中以用户名作为key,存储一个表示登录状态的值,并设置一个过期时间。用户进行登出操作时,会从Redis中删除对应的key。检查用户是否登录时,会直接从Redis中查询是否存在对应的key。这样就减少了对数据库的查询,提高了系统的性能。
评论已关闭