springboot 整合redis,实现存储用户token

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: springboot 整合redis,实现存储用户token

整合Spring Boot与Redis以实现用户Token存储是一个常见的需求,尤其在需要高性能、低延迟的数据存储方案时。

一、准备工作

创建Spring Boot项目:使用Spring Initializr生成一个Spring Boot项目,并选择以下依赖:

  • Spring Web
  • Spring Data Redis
  • Spring Boot DevTools (可选)
  • Lombok (可选)

配置Redis环境:确保本地或远程环境中有一个运行中的Redis实例。如果没有,可以通过Docker快速安装:

docker run -d --name redis -p 6379:6379 redis


二、配置Spring Boot

添加依赖:在pom.xml文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

配置Redis连接:在application.properties文件中添加Redis连接配置:

spring.redis.host=localhost
spring.redis.port=6379

三、定义用户Token实体类

使用Lombok简化代码,可以定义一个简单的用户Token实体类:

import lombok.Data;
import java.io.Serializable;
 
@Data
public class UserToken implements Serializable {
    private String userId;
    private String token;
    private long expirationTime;
}

四、配置RedisTemplate

RedisTemplate是Spring Data Redis提供的操作Redis的核心类,下面是配置RedisTemplate的示例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
 
@Configuration
public class RedisConfig {
 
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
 
        // 使用String序列化
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
 
        // 使用Jackson序列化
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
 
        template.afterPropertiesSet();
        return template;
    }
}

五、编写用户Token服务类

编写一个服务类来封装操作Redis的逻辑:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
 
import java.util.concurrent.TimeUnit;
 
@Service
public class UserTokenService {
 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
 
    private static final String TOKEN_PREFIX = "user:token:";
 
    public void saveToken(UserToken userToken) {
        String key = TOKEN_PREFIX + userToken.getUserId();
        redisTemplate.opsForValue().set(key, userToken, userToken.getExpirationTime(), TimeUnit.MILLISECONDS);
    }
 
    public UserToken getToken(String userId) {
        String key = TOKEN_PREFIX + userId;
        return (UserToken) redisTemplate.opsForValue().get(key);
    }
 
    public void deleteToken(String userId) {
        String key = TOKEN_PREFIX + userId;
        redisTemplate.delete(key);
    }
}

六、编写控制器

最后,编写一个控制器来处理用户Token的存储和获取:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
@RestController
@RequestMapping("/api/token")
public class UserTokenController {
 
    @Autowired
    private UserTokenService userTokenService;
 
    @PostMapping
    public void saveToken(@RequestBody UserToken userToken) {
        userTokenService.saveToken(userToken);
    }
 
    @GetMapping("/{userId}")
    public UserToken getToken(@PathVariable String userId) {
        return userTokenService.getToken(userId);
    }
 
    @DeleteMapping("/{userId}")
    public void deleteToken(@PathVariable String userId) {
        userTokenService.deleteToken(userId);
    }
}

七、测试

启动Spring Boot应用:确保Redis服务器已启动,然后运行Spring Boot应用。

测试保存Token

curl -X POST -H "Content-Type: application/json" -d '{"userId":"123","token":"abc123","expirationTime":60000}' http://localhost:8080/api/token

测试获取Token

curl http://localhost:8080/api/token/123

测试删除Token

curl -X DELETE http://localhost:8080/api/token/123

结论

通过以上步骤,我们成功地将Spring Boot与Redis整合起来,实现了用户Token的存储、获取和删除。这个过程展示了如何利用Spring Data Redis和RedisTemplate简化Redis操作,并通过控制器提供RESTful API接口来处理用户Token的管理。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
99 1
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
52 2
数据的存储--Redis缓存存储(二)
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
1月前
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用哈希槽分区算法,共有16384个哈希槽,每个槽分配到不同的Redis节点上。数据操作时,通过CRC16算法对key计算并取模,确定其所属的槽和对应的节点,从而实现高效的数据存取。
48 13
|
1月前
|
NoSQL Java API
springboot项目Redis统计在线用户
通过本文的介绍,您可以在Spring Boot项目中使用Redis实现在线用户统计。通过合理配置Redis和实现用户登录、注销及统计逻辑,您可以高效地管理在线用户。希望本文的详细解释和代码示例能帮助您在实际项目中成功应用这一技术。
32 4
|
1月前
|
消息中间件 NoSQL Java
Spring Boot整合Redis
通过Spring Boot整合Redis,可以显著提升应用的性能和响应速度。在本文中,我们详细介绍了如何配置和使用Redis,包括基本的CRUD操作和具有过期时间的值设置方法。希望本文能帮助你在实际项目中高效地整合和使用Redis。
48 2
|
2月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
64 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
124 1
springboot的缓存和redis缓存,入门级别教程
|
2月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
117 2
|
1月前
|
存储 NoSQL Redis
【赵渝强老师】Redis的存储结构
Redis 默认配置包含 16 个数据库,通过 `databases` 参数设置。每个数据库编号从 0 开始,默认连接 0 号数据库,可通过 `SELECT &lt;dbid&gt;` 切换。Redis 的核心存储结构包括 `dict`、`expires` 等字段,用于处理键值和过期行为。添加键时需指定数据库信息。视频讲解和代码示例详见内容。