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

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

一、准备工作

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

    • Spring Web
    • Spring Data Redis
    • Spring Boot DevTools (可选)
    • Lombok (可选)
  2. 配置Redis环境:确保本地或远程环境中有一个运行中的Redis实例。如果没有,可以通过Docker快速安装:

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

    二、配置Spring Boot

  3. 添加依赖:在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);
    }
}

七、测试

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

  2. 测试保存Token

    curl -X POST -H "Content-Type: application/json" -d '{"userId":"123","token":"abc123","expirationTime":60000}' http://localhost:8080/api/token
    
  3. 测试获取Token

    curl http://localhost:8080/api/token/123
    
  4. 测试删除Token

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

    结论

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

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot中,可以使用Redis实现分片集群。分片集群是将数据分散存储在多个Redis节点上,以提高性能和可扩展性。 有两种常见的分片集群方式可以用于SpringBoot整合Redis实现分片集群。 第一种方式是使用Redis Sentinel哨兵集群。在SpringBoot的配置文件中,可以指定哨兵集群的IP地址和端口号。通过使用哨兵集群,可以实现Redis的高可用性和故障转移。 第二种方式是使用Redis Cluster集群。同样在配置文件中,可以指定Redis Cluster集群的IP地址和端口号。Redis Cluster使用一致性Hash分片算法来将数据分布在多个节点上,从而实现数据的分片存储。 通过以上两种方式的配置,SpringBoot可以实现Redis的分片集群,从而提高系统的性能和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于SpringBoot实现单点登录的两种方式](https://download.csdn.net/download/m0_37776094/10640593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springboot整合redis集群](https://blog.csdn.net/weixin_45390688/article/details/125467210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值