一次简单的基于Redis的每日使用次数限制需求开发

新年快乐

『大伙们开工了不 ?』
过年刚回来,前两天需求还没出,摸鱼正开心呢,需求来了!


需求描述

需求是给系统内的用户发薪,需要用户添加/修改银行卡,对用户的银行卡的信息进行校验,这个校验的接口是从阿里云上找的供应商,不太能白嫖在这里插入图片描述
,每次请求这个接口收费1毛,但是预算有限,所以开发过程中产品强烈邀请增加一个校验:需要对每个用户添加/修改银行卡的操作进行限制,规则是每日每人三次只能校验三次银行卡


概要设计

需求本身也不难理解,相信xdm看到这个需求都能想到很多的解决方案,例如

  • 在数据库中存储用户Id及校验次数,定时任务根据每日时间定时删除。(比较繁琐,且不优雅,不推荐)
  • 使用redis缓存,以userId生成不同的key,value初始化为0,每次添加/修改银行卡后加1,超过3次进行校验提示,根据业务需要对key设置过期时间(本次需求我使用的就是这个)

需求虽然简单,技术方案也比较明确,但是我好久没用redis了,这个项目也比较老,redis相关的配置也没有,开发过程中出现了不少的低级问题,以此文记录下,并鞭策下自己。


开发中的问题
RedisTemplate相关API不熟悉

之前也用过RedisTemplate,虽然印象有点模糊,但我蜜汁自信这么简单的需求难得倒我,就没有再去看看redis相关的命令,一把梭开始(以后再也不这样了,好好反省)。在这里插入图片描述

首先每次调用请求进来,要做的是根据userId生成key,初始value的值为1,放进redis缓存里
为了方便本地测试,过期时间先不设置成1天,这里我是设置成50秒。

 boolean existsFlag = this.redisTemplate.opsForValue().setIfAbsent("addBank_"+qry.getUserId()+"_count",1,50, TimeUnit.SECONDS);
 Integer bindedDailyCounts = (Integer
<think>好的,我现在要帮用户解答如何设计和开发股票交易系统的问题。首先,我需要理清用户的需求。他们可能想了解从系统设计到开发的整个流程,包括技术选型、功能模块、数据库设计、前后端实现等。根据提供的引用资料,特别是引用[1]提到的基于Java的系统,使用Struts+Hibernate+JSP和MySQL,这可能是一个传统Java Web架构的案例。不过现在更流行的可能是Spring Boot或其他现代框架,但用户提供的例子是Struts,所以我需要结合这点来回答。 接下来,用户的问题是关于设计和开发,所以需要分步骤说明。首先系统设计应该包括需求分析、架构设计、模块划分。然后是技术选型,引用[1]提到Struts、Hibernate、JSP和MySQL,但可能也需要提到其他可能性,比如Spring MVC或MyBatis,但根据参考资料,保持原有技术栈更合适。 功能模块方面,引用[1]里提到的用户注册登录、股票信息浏览、交易功能、持仓管理、个人资料修改都是核心功能。此外,引用[3]提到股票价格的随机波动生成,可能需要模拟实时价格,这里可能需要定时任务或WebSocket实现实时更新。 数据库设计部分,用户表、股票信息表、交易记录表、持仓表等是必须的。需要说明每个表的主要字段,比如用户表有用户名、密码、余额;股票表有代码、名称、当前价格;交易记录包括用户ID、股票ID、数量、价格、时间等。 在核心逻辑实现方面,股票交易涉及买入和卖出,需要考虑事务处理,确保数据一致性,比如用户余额和股票数量的同步更新。引用[3]提到价格波动模拟,可以用随机数生成,但需要定时更新数据库中的价格。同时,买入卖出时的价格应以当前市价为准,这里可能需要锁机制或乐观锁来处理并发问题。 前端部分,引用[3]提到用JSP,可能结合HTML/CSS/JavaScript,显示股票价格颜色变化(红涨绿跌),菜单导航。现在可能更多使用前端框架如Vue.js或React,但根据引用资料,保持JSP更符合示例。 风险控制方面,引用[2]提到止损线、交易次数限制、分散投资,这些需要在系统中实现,比如在交易前检查用户是否达到止损点,或者限制每日交易次数。 测试和部署阶段,需要单元测试、集成测试,确保功能正常,然后部署到Tomcat等服务器,使用MySQL数据库。 可能的问题点:如何实时更新股票价格?是否考虑使用消息队列或WebSocket?如何处理高并发下的交易请求?是否需要引入缓存机制?这些可能需要进一步考虑,但根据现有引用,先按简单方法处理,比如定时任务更新价格。 最后生成相关问题,需要围绕系统设计、技术选型、功能实现、风险控制等方面提问,例如如何确保交易系统安全性,如何处理实时数据,如何进行性能优化等。</think>### 如何设计和开发股票交易系统? #### 一、系统设计核心步骤 1. **需求分析与架构设计** - **功能模块划分**:包括用户管理(注册/登录)、股票信息展示、实时价格模拟、交易逻辑(买入/卖出)、持仓管理、风险控制(如止损线设置)[^1][^3]。 - **技术选型**: - **前端**:JSP/HTML+CSS+JavaScript(用于价格颜色区分红涨绿跌)[^3]。 - **后端**:Java+Struts框架(处理业务逻辑),Hibernate(数据库ORM映射)[^1]。 - **数据库**:MySQL(存储用户数据、股票信息、交易记录)[^1]。 - **核心逻辑**:通过随机数模拟股票价格波动,例如每10秒更新价格: ```java // 价格波动示例(基于开盘价的小区间随机) public double generateStockPrice(double openingPrice) { double fluctuation = (Math.random() * 0.1) - 0.05; // 上下5%波动 return openingPrice * (1 + fluctuation); } ``` 2. **数据库设计** - **用户表**:`user_id`, `username`, `password_hash`, `balance`。 - **股票表**:`stock_id`, `stock_code`, `current_price`, `opening_price`[^3]。 - **交易记录表**:`order_id`, `user_id`, `stock_id`, `quantity`, `price`, `type`(买入/卖出)。 3. **核心功能实现** - **买入逻辑**: ```java // 检查余额是否充足并扣款 if (user.getBalance() >= quantity * currentPrice) { user.setBalance(user.getBalance() - quantity * currentPrice); // 更新持仓记录... } else { throw new InsufficientBalanceException(); } ``` - **风险控制**:实现止损线检查(如单日亏损超过10%禁止交易)[^2]。 #### 二、关键技术实现示例 1. **股票价格实时更新** ```java // 定时任务更新价格(使用Quartz调度) public class PriceUpdateJob implements Job { public void execute() { List<Stock> stocks = stockDao.getAllStocks(); for (Stock stock : stocks) { double newPrice = generateStockPrice(stock.getOpeningPrice()); stock.setCurrentPrice(newPrice); stockDao.update(stock); } } } ``` 2. **前端价格颜色渲染** ```jsp <div class="stock-price" style="color: <%= currentPrice > openingPrice ? "red" : "green" %>"> <%= currentPrice %> </div> ``` #### 三、扩展功能与优化 1. **引入缓存机制**:使用Redis缓存高频访问的股票实时数据。 2. **分布式事务**:采用Seata框架保证交易扣款与持仓更新的一致性。 3. **安全增强**:对交易接口添加Token验证与频率限制。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值