高并发下如何保证数据的一致性
2017-09-12 00:00
1256 查看
1.通过悲观锁实现 for update
2.通过乐观锁实现,加字段
3.针对秒杀系统,可以采取将并发请求串行化。放在一个队列中,处理对数据库的写操作
4.通过redis实现,读和写都操作redis。写redis数据时,同时产生一条业务相关联的日志数据。单独开个任务或者消息队列来对日志数据进行读取,获取里面的对数据库的操作。然后进行写数据库。
5.因为redis支持事务,所有写操作可以通过lua脚本来支持对数据库的操作。
6.写update语句时,还可以这样写。update produce p set p.num=$SumNum-$num where p.num=$sumNum and $sumNum-$num>0;
更新某个库存值时,首先获取当前库存量。更新时传入查询到的数量。减出此次要操作的数量。加上两个限制条件:
1.查询到的数量和数据库里面的库存数量一致
2.此次操作后,库存数量大于0。
第四条:使用乐观锁,虽然可以做到一致性。但是在高并发情况下,会产生大量的失败请求。会产生大量的数据库Io操作。为了减少io,可以将其放在redis中,进行操作。然后产生业务日志,根据业务日志对数据库进行更新。
另:redis支持事务,支持set,一般只用来做缓存。这里备注下,都忘了有这些功能了。
2.通过乐观锁实现,加字段
3.针对秒杀系统,可以采取将并发请求串行化。放在一个队列中,处理对数据库的写操作
4.通过redis实现,读和写都操作redis。写redis数据时,同时产生一条业务相关联的日志数据。单独开个任务或者消息队列来对日志数据进行读取,获取里面的对数据库的操作。然后进行写数据库。
5.因为redis支持事务,所有写操作可以通过lua脚本来支持对数据库的操作。
6.写update语句时,还可以这样写。update produce p set p.num=$SumNum-$num where p.num=$sumNum and $sumNum-$num>0;
更新某个库存值时,首先获取当前库存量。更新时传入查询到的数量。减出此次要操作的数量。加上两个限制条件:
1.查询到的数量和数据库里面的库存数量一致
2.此次操作后,库存数量大于0。
第四条:使用乐观锁,虽然可以做到一致性。但是在高并发情况下,会产生大量的失败请求。会产生大量的数据库Io操作。为了减少io,可以将其放在redis中,进行操作。然后产生业务日志,根据业务日志对数据库进行更新。
另:redis支持事务,支持set,一般只用来做缓存。这里备注下,都忘了有这些功能了。
相关文章推荐
- spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?
- 利用事物(隔离级别)+锁方式串行化保证在高并发环境下数据的一致性代码
- spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?
- 问题:客户端从服务器分页获取列表,如何保证流量最少,且客户端和Server数据的一致性?
- 面试问题(如何保证分布式数据最终一致性)
- 建唯一索引保证并发时,多线程插入数据的业务上的一致性
- 冗余表如何保证数据的一致性
- 网络游戏并发如何保证数据正确
- 主用Server和备用Server的数据如何同步和保证一致性?
- 分布式高并发系统如何保证对外接口的幂等性?
- 数据库的并发操作与数据的不一致性
- SpringMVC是单例的,高并发情况下,如何保证性能的?
- 并发操作与数据的不一致性
- 如何处理大量数据并发操作
- sparkstreaming + kafka如何保证数据不丢失、不重复
- 如何处理大量数据并发操作
- TCP协议如何来保证传输的可靠性和数据的顺序性
- Android与服务器通讯:如何保证两端时间一致性
- 巧用CAS解决数据并发一致性问题
- 【Django】Django如何保证并发操作数据一致性问题