上千的请求同时抢购一个商品怎么保证数据的完整:首先想到 1.把库存字段设为unsigned,当库存为0,字段不能为负数,会返回False 2.悲观锁:在修改数据的时候就锁住,排斥其他修改,高并发下,全部请求都阻塞等待,系统会崩溃 3.使用mysql数据库事务,对需要库存修改的操作进行锁住,当修改成功才解锁,确保谁先提交成功就获得该商品,其他人都回滚。 4.使用队列:把多个请求放进队列中,先进先出,不会导致某些请求取不到锁,把多线程变成单线程 但请求很多,还是会把队列内存挤爆,系统再次崩溃,因为处理的速度根本比不上请求的速度 5.乐观锁:所有请求都可以去修改,但会获得该数据的版本号,只有版本号符合才能更新成功,其他全部返回,抢购失败,不过还是会增加CPU的计算开销 6.建议还是把抢购商品数据提前存储到redis,使用redis队列,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行。当全部执行完后再修改mysql数据库库存。 数据库的左右链接查询语句 select 字段 from tb1 left join tb2 on 条件 select 字段 from tb1 ringt join tb2 on 条件 redis的上锁机制 SETNX key value key代表锁的标识名,如果没有该key,则插入,返回1,插入成功可以expire设置过期时间,如果有key则不插入锁了。返回0 ,根据返回值判断是否还是否上锁,有个参数timeout,指获取锁的超时时间,如果超过还没获取到就返回不再等待, GET key value 获取锁 del key 释放锁 query遵循restful设计风格是怎么样的 对资源的操作通过统一的通用接口规范来访问: 例如:在发ajax时请求方式严格按照http标准动词GET,POST,DELETE,PUT进行请求 例如:如果要求服务器返回json数据,发送ajax时url写?format=json 数据库查询出来数据怎么去重 使用distinct方法:select distinct 字段 from 表 使用group by 方法:select 字段 from 表 group by 字段