环境:SpringBoot 2.x, JDK 1.8, MySQL 8.0.15
需求
做一个类似发卡平台的api,每次访问从数据库获取一条数据,要保证这条数据只能被获取一次。
目前测试约为每30秒60次的访问,接下来的测试同样的时间访问量会成倍增加。
我的解决方法
数据库中设计一个字段,保存这条数据的使用状态。写了一个存储过程,大致流程是这样:先开始事务,再获取需要的数据同时上行锁,再修改这条数据的使用状态,最后返回数据,提交事务。
这样查询语句中需要加数据是否使用过的条件。
做一个类似发卡平台的api,每次访问从数据库获取一条数据,要保证这条数据只能被获取一次。
目前测试约为每30秒60次的访问,接下来的测试同样的时间访问量会成倍增加。
数据库中设计一个字段,保存这条数据的使用状态。写了一个存储过程,大致流程是这样:先开始事务,再获取需要的数据同时上行锁,再修改这条数据的使用状态,最后返回数据,提交事务。
这样查询语句中需要加数据是否使用过的条件。
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
不敢赐教,一起探讨一下.
发卡平台有两个步骤,一个是分配,一个是标记.我建议分配这个步骤不用在数据库做吧?这样会很麻烦而且不好管理.
可以使用程序每次load 10000(数据待定,和业务俩有关)条数据的主键到内存里,然后在程序中加锁进行分配,分配结束之后错峰写入数据库.和加一层缓存是一个道理.
当内存中剩余数量低于某个限制值的时候再去load,这样做性能应该会好很多.