首页 > 数据库 >redis实现接口幂等性设计

redis实现接口幂等性设计

时间:2024-08-16 17:29:23浏览次数:14  
标签:return String redis Token 接口 token 设计 redisTemplate

上代码


/**接口幂等性设计*/
@RestController
public class IdempotentController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 提交接口,需要携带有效的token参数
     */
    @PostMapping("/submit")
    public String submit(@RequestParam("token") String token) {
        // 检查Token是否有效
        if (!isValidToken(token)) {
            return "Invalid token";
        }

        // 具体的接口处理逻辑,在这里实现你的业务逻辑

        // 使用完毕后删除Token
        deleteToken(token);

        return "Success";
    }

    @PostMapping("/submit2")
    public String submit2(@RequestParam("token") String token) {
        // 使用SETNX命令尝试将Token保存到Redis中,如果返回1表示设置成功,说明是第一次提交;否则返回0,表示重复提交
        Boolean success = redisTemplate.opsForValue().setIfAbsent(token, "true", Duration.ofMinutes(10));
        if (success == null || !success) {
            return "Duplicate submission";
        }
        try {
            // 具体的接口处理逻辑,在这里实现你的业务逻辑
            return "Success";
        } finally {
            // 使用DEL命令删除Token
            redisTemplate.delete(token);
        }
    }

    /**
     * 检查Token是否有效
     */
    private boolean isValidToken(String token) {
        // 检查Token是否存在于Redis中
        return redisTemplate.hasKey(token);
    }

    /**
     * 删除Token
     */
    private void deleteToken(String token) {
        // 从Redis中删除Token
        redisTemplate.delete(token);
    }

    /**
     * 生成Token接口,用于获取一个唯一的Token
     */
    @GetMapping("/generateToken")
    public String generateToken() {
        // 生成唯一的Token
        String token = UUID.randomUUID().toString();

        // 将Token保存到Redis中,并设置过期时间(例如10分钟)
        redisTemplate.opsForValue().set(token, "true", Duration.ofMinutes(10));

        return token;
    }
}

标签:return,String,redis,Token,接口,token,设计,redisTemplate
From: https://www.cnblogs.com/pushbug/p/18363316

相关文章

  • 随想录day3:203.移除链表元素|707.设计链表 |206.反转链表
    203.移除链表元素方法一:直接遍历,永远记得处理head,删除链表必须有前驱。/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*ListNode(intval){this.val=val;}*ListNode......
  • java+vue计算机毕设基于web的电竞社信息管理系统的设计与实现【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着电子竞技产业的迅猛发展,电竞社作为连接电竞爱好者与赛事活动的桥梁,其重要性日益凸显。然而,传统的管理方式往往依赖于人工记录与沟通,不仅效率低下,......
  • 常用函数式接口
    生产型接口Supplier简述该函数接口是Java8中的java.util.function包中的。包含一个get()作用延迟计算:在需要时才生成值,提高效率。简化代码:封装生成逻辑,避免重复代码。灵活性:可以与其他函数式接口结合使用,增强可组合性。无输入参数:专注于提供结果,适用于无......
  • springboot+vue餐厅快捷就餐系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着城市化进程的加速与人们生活节奏的日益加快,餐饮业作为服务行业的重要组成部分,面临着前所未有的挑战与机遇。传统餐厅的就餐模式往往存在排队时间长、点餐效率低、座位管理混乱等问题,严重影响了顾客的用餐体验。在此背景下,开发一套......
  • springboot+vue餐厅管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着餐饮行业的蓬勃发展,餐厅管理面临着前所未有的挑战。传统的人工管理模式已难以满足现代餐厅高效、精准、个性化的服务需求。顾客对就餐体验的要求日益提升,包括预订系统的便捷性、餐桌安排的合理性、美食推荐的个性化等,均成为餐厅提......
  • springboot+vue菜鸟驿站存取件管理系统设计与实现【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着电子商务的迅猛发展,快递业务量急剧增长,快递“最后一公里”的配送问题日益凸显。传统的人工配送方式不仅效率低下,且成本高昂,难以满足消费者日益增长的便捷、快速、安全的服务需求。菜鸟驿站作为阿里巴巴旗下的物流服务平台,通过整合......
  • springboot+vue财务报销管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的日益提升,传统的财务报销管理方式逐渐暴露出效率低下、流程繁琐、审批周期长、信息透明度不足等问题。在数字化转型的大潮中,构建一套高效、智能的财务报销管理系统成为企业优化财务管理流程、提升......
  • 订单支付倒计时redis实现
    订单支付倒计时redis实现@GetMapping("/addOrder")publicStringaddOrder(){//创建订单...数据库操作//订单ID存到Redis,存30分钟redisTemplate.opsForValue().set("orderId1234","添加的订单",30,TimeUnit.MINUTES);retu......
  • 电动打气泵pcba方案设计与开发
    电动打气泵方案基于简单原理,使用时能自动检测轮胎压力。当胎压低于预设值时,电机自动启动,将压缩气体经进气管泵入轮胎。一旦电动打气泵达到设定的胎压上限,电机将自动关闭。该方案由压力传感器、ADC芯片、主控芯片等核心组件构成。其关键功能参数如下:显示方式:采用LED/LCD显......
  • java+vue计算机毕设基于web的办公用品网上销售管理系统的设计与实现【源码+开题+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网的普及,电子商务已成为现代商业活动的重要组成部分。传统办公用品销售模式面临着成本高、效率低、覆盖范围有限等挑战......