高并发下如何保证数据的一致性
2019独角兽企业重金招聘Python工程师标准>>>
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,一般只用来做缓存。这里备注下,都忘了有这些功能了。
转载于:https://my.oschina.net/begin01running/blog/1536095
高并发下如何保证数据的一致性相关推荐
- 高并发下如何保证接口的幂等性?
前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题.本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考. 不知道你有没有遇到过这些场景: ...
- HDFS的特性以及如何保证数据的一致性
链接:https://www.nowcoder.com/questionTerminal/962225fa78e74ba7b1d7d7792407acc6?orderByHotValue=1& ...
- Flink如何保证数据的一致性
当在分布式系统中引入状态时,自然也引入了一致性问题.一致性实际上是"正确性级别"的另一种说法,也就是说在成功处理故障并恢复之后得到的结果,与没有发生任何故障时得到的结果相比,前者到 ...
- 高并发下如何保证缓存和数据库的数据一致性?
51CTO 缓存由于其高性能,支持高并发的特性,在高并发的项目中不可或缺.被大家广泛使用的有Redis,Memcached等.本文主要探讨几种常见的缓存的读写模式,以及如何来保证缓存和数据库的数据一致 ...
- 高并发下如何保证接口的幂等性
前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题.本文分享了一些 ,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考. 不知道你有没有遇到过这些场景: 有时我们在填写某些 f ...
- ElasticSearch 集群是如何保证数据的一致性和实时性?
1. 当我们在说一致性,我们在说什么? 在分布式环境下,一致性指的是多个数据副本是否能保持一致的特性. 在一致性的条件下,系统在执行数据更新操作之后能够从一致性状态转移到另一个一致性状态. 对系统的一 ...
- 如何保证数据最终一致性(分布式事务)
分布式事务种类 按照实现原理分主要有三类:传统事务型.事件通知型.补偿型. 传统事务型(不适用高并发场景,锁定资源较多): 两阶段提交(2PC) 三阶段提交(3PC) 事件通知型: 可靠消息实现模式 ...
- c# mysql代码中写事务_代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性...
[c#]代码库代码中使用事务前提:务必保证一个功能(或用例)在同一个打开的数据连接上,放到同一个事务里面操作. 首先是在D层添加一个类为了保存当前操作的这一个连接放到一个事务中执行,并事务执行打开同一 ...
- ServiceComb中的数据最终一致性方案
本文由华为微服务引擎技术团队&&ServiceComb社区授权发布. 数据一致性是构建业务系统需要考虑的重要问题 , 以往我们是依靠数据库来保证数据的一致性.但是在微服务架构以及分布式 ...
最新文章
- java.lang.UnsupportedClassVersionError
- 行业观察 | 新一轮AI周期里,华为拿什么破解核心难题?
- 我和阿里巴巴的孽缘(三)
- postman调用webservice接口_接口对前后端和测试的意义
- mysql报错注入实战_MySQL手工注入实战
- leetcode 18. 四数之和(双指针)
- PJSIP UA分析(1)--PJSUA主函数
- android 动画之漂移,Android之自定义Drawable实现灵动的红鲤鱼动画(上篇)
- Shell命令-线上查询及帮助之man、help
- 使用mapReduce分析简单天气数据
- scala访问MySQL数据库
- Mybatis系列(四)注解
- 卡巴斯基授权key导入方式方法及其导入key基本原理
- 【Pytorch神经网络理论篇】 40 Transformers中的词表工具Tokenizer
- c语言数组实现冒泡排序
- c语言工业设计中的案例,工业设计中CMF为什么这么重要?看看设计案例就知道了!...
- 阿里云OSS使用详解(java版本)
- html公用页脚使用代码,页脚在HTML
- 电脑回收站在哪里?回收站删除的文件怎么恢复?
- Adobe Acrobat Professional 7.0
热门文章
- 利用jsonp、iframe和location.hash解决跨域问题
- CSS3 calc() 函数,height: calc(100% - 70px);
- OpenCV训练SVM模型并预测的完整过程
- jmu-Java-07多线程-互斥访问 (5分)
- 重命名Heroku的app
- [转]【HttpServlet】HttpServletResponse接口 案例:完成文件下载
- linux的chmod,chown命令 详解
- python学习 day1 (3月1日)
- day05 Python 元组
- BZOJ 2660 (BJOI 2012) 最多的方案