随着双11,春运抢票这种业务的存在,分布式高并发成为了技术人员必须要面对的问题,那么如果保证数据的准确性呢?一般主流的方式就是加锁。 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。 首先,为了确保分布式锁可用,我们至少要确保锁 ...
分类:
其他好文 时间:
2018-06-26 12:24:12
阅读次数:
158
https://www.cnblogs.com/qjjazry/p/6581568.html https://blog.csdn.net/hongchangfirst/article/details/26004335 https://blog.csdn.net/truelove12358/artic ...
分类:
编程语言 时间:
2018-06-25 21:44:02
阅读次数:
175
乐观锁(又名乐观并发控制,Optimistic Concurrency Control,缩写“OCC”),是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务 ...
分类:
其他好文 时间:
2018-06-24 16:55:01
阅读次数:
120
是什么 全称compare and swap,一个CPU原子指令,在硬件层面实现的机制,体现了乐观锁的思想。 JVM用C语言封装了汇编调用。Java的基础库中有很多类就是基于JNI调用C接口实现了多线程同步更新的功能。 原理 CMS有三个操作数:当前主内存变量的值V,线程本地变量预期值A,线程本地待 ...
分类:
编程语言 时间:
2018-06-22 01:06:36
阅读次数:
217
公平锁/非公平锁(多线程执行顺序的维度) 概念理解 公平锁:加锁前先查看是否有排队等待的线程,有的话优先处理排在前面的线程,先来先得。 非公平所:线程加锁时直接尝试获取锁,获取不到就自动到队尾等待。 例子 ReentrantLock 同时支持两种锁 适用场景 更多的是直接使用非公平锁:非公平锁比公平 ...
分类:
其他好文 时间:
2018-06-21 23:45:11
阅读次数:
229
1.redis是什么? Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 2.redis能做什么?优势在哪? redis的性能极高(Redis能读的速度是110000次/s,写的速度是81000次/s) 支持的数据类型丰富(Strings, Lists, Has ...
分类:
其他好文 时间:
2018-06-19 22:43:26
阅读次数:
189
在分布式系统中,之前单一的用synchronized或lock已经不适用了。分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本博客讨论为第二种 代码实现 现象:模拟多个线程去运算同一个数据 可以发现数据计算是不规则的 输出值为混 ...
分类:
其他好文 时间:
2018-06-19 13:59:52
阅读次数:
186
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也 ...
分类:
数据库 时间:
2018-06-15 12:57:24
阅读次数:
194
一:介绍 悲观锁,正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即 ...
分类:
其他好文 时间:
2018-06-07 21:55:11
阅读次数:
174
第一种:通过数据库乐观锁实现(小型电商) update productstocks set realstock=realstock-#{buys} where sku = #{sku} and realstock-#{buys}>=0 根据受影响的行数判断是否执行成功 大型互联网不是这么玩的数据库有 ...
分类:
其他好文 时间:
2018-06-07 13:57:08
阅读次数:
176