并发下,使用redis防止数据重复插入(数据库未对表字段设置唯一情况下)
2019独角兽企业重金招聘Python工程师标准>>>
@Controller
@RequestMapping("/myTest")
public class TestController {@Autowired(required = false)private TestService testService;@Autowiredprivate RedisUtil redisUtil;@RequestMapping("add")public void add(HttpServletRequest request) throws Exception {List<Course> cList = testService.queryByName("aaaaa");//查询System.out.println(Thread.currentThread().getName()+"clist.size:"+cList.size());if(cList.size() == 0){if(redisUtil.setnx("name_"+"aaaaa", "aaaaa") == 1){//如果数据存在则返回0,不存在返回1Course course = new Course();course.setCname("aaaaa");try{testService.add1(course);//插入}catch (Exception e) {redisUtil.del("name_"+"aaaaa");//插入出异常则删除throw e;}System.out.println(Thread.currentThread().getName()+"success");redisUtil.expire("name_"+"aaaaa", 3);//设失效时间3秒}else{System.out.println(Thread.currentThread().getName()+"exists");}}else{System.out.println(Thread.currentThread().getName()+"false");}}}
RedisUtil 工具类可以网上搜
以下测试代码:
public class Test {/*** @param args* @throws IOException * @throws HttpException */public static void main(String[] args) throws Exception {for(int i=0;i<10;i++){try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubpost();}}).start();}}public static void post(){HttpClient client = new HttpClient();client.getParams().setContentCharset("UTF-8");PostMethod method = new PostMethod("http://localhost:8080/practice/myTest/add.do?time="+new Date().getTime());method.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=UTF-8");try {client.executeMethod(method);} catch (HttpException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
转载于:https://my.oschina.net/u/1582930/blog/405948
并发下,使用redis防止数据重复插入(数据库未对表字段设置唯一情况下)相关推荐
- 解决数据重复插入问题(sql与锁方法)
解决数据重复插入(sql与锁方法) 一.问题 在实际应用中,用户可能会有连点操作,当连点操作的时间间隔非常短时,系统很容易造成重复数据的插入,如图所示: 可以看到有2条数据被重复插入了(encryte ...
- 大量数据批量插入数据库
大量数据批量插入数据库 前言 工作时遇到了大量数据需要插入到数据库的情况,一条条的插入速度慢效率低下,不能满足需求,为了解决此问题采用了sql中使用foreach,并在service中设置批量来进行批 ...
- 01219 oracle,ORA-01219: 数据库或可插入数据库未打开: 仅允许在固定表或视图中查询 oracle...
一周没用过oracle,打开数据库的时候报错: 执行请求的操作时遇到错误: ORA-01219: 数据库或可插入数据库未打开: 仅允许在固定表或视图中查询 01219. 00000 - "d ...
- 灵活运用分布式锁解决数据重复插入问题
作者:快应用服务器研发团队-Lin Yupan 一.业务背景 许多面向用户的互联网业务都会在系统后端维护一份用户数据,快应用中心业务也同样做了这件事.快应用中心允许用户对快应用进行收藏,并在服务端记录 ...
- 数据重复插入问题及解决方案
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/25 1.问题背景 某天客户反馈说,有一条一模一样的数据 ...
- sql 数据表归档_如何在考虑规模的情况下归档SQL Server数据
sql 数据表归档 We manage data in a growing environment where our clients query some of our data, and on o ...
- cassss服务未启动_Mysql无法启动情况下,如何恢复数据呢?
本文适用于,mysql无法启动,但数据文件未丢失的情况. Mysql因意外情况,导致无法启动,数据库未做备份的情况下,如何将数据迁移至其他数据库中. 原数据库地址:192.168.1.100(以下简称 ...
- MySQL→数据库、启动连接数据库、SQL→DDL数据定义语言及数据类型、DML数据操作语言、DQL数据查询语言、数据库约束→主键、唯一、非空、默认、外键、SQL、三大范式及一多关系、视图、内外连接
MySQL连接退出命令 mysql –uroot -proot mysql –h127.0.0.1 –uroot -proot mysql --host=localhost --user=root - ...
- Python读取excel文件数据并插入数据库
例子: 将excel文件StudentInfo.xls的学生信息插入到student表中 注: 使用的版本:Python3.7,MySQL5.5 一.连接mysql数据库 安装第三方库pymysql: ...
最新文章
- 正则表达式限制输入整数或小数
- Codeforces Round #253 (Div. 1) A. Borya and Hanabi 暴力
- Xamarin Essentials教程设备信息DeviceInfo
- 浏览器事件循环与node事件循环
- python request-python-request-各方法使用及格式
- volley框架下发送和读取cookie
- 瑞幸:不会死,也没有稳
- 第三轮316工程知识竞赛简讯_【资讯】第五届日本文化知识竞赛决赛
- arp协议的主要功能是_程序员需要掌握的一些网络协议汇总
- (38)FPGA面试技能提升篇(C/C++、questasim仿真工具)
- 搜狐创始人张朝阳操起“老本行”:居然开物理课了
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序搜索
- 软件开发项目过程管理文档
- 软件测试简历项目经验该怎么写?【两年经验】
- ssm整合的简单案例(附源码)
- java读取文件之BufferedReader
- MySQL数据库被删除如何恢复
- 配置使用consol口和网线登录交换机
- mysql数据库约束详解_深入理解mysql数据库的约束
- 解决MacBookPro git push提示You hasn‘t joined this enterprise