乐观锁: 乐观锁不是数据库自带的,需要我们编程自己去实现的,乐观锁是指操作数据库时(更新数据库),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。 通常实现是这样的:在表中的数据进行操作时(更新),先给数据表增加一个 ...
分类:
数据库 时间:
2018-12-24 02:46:28
阅读次数:
160
无锁队列 介绍 在工程上,为了解决两个处理器交互速度不一致的问题,我们使用队列作为缓存,生产者将数据放入队列,消费者从队列中取出数据。这个时候就会出现四种情况,单生产者单消费者,多生产者单消费者,单生成者多消费者,多生产者多消费者。我们知道,多线程往往会带来数据不一致的情况,一般需要靠加锁解决问题。 ...
分类:
其他好文 时间:
2018-12-23 17:53:55
阅读次数:
224
上文我们总结了 synchronized 关键字的基本用法以及作用,并未涉及 synchronized 底层是如何实现的,所谓刨根问底,本文我们就开始 synchronized 原理的探索之旅吧(*>﹏<*)。 1. 对象锁是什么 不同于ReentrantLock的显式加锁,synchronized ...
分类:
其他好文 时间:
2018-12-23 16:54:13
阅读次数:
164
1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。 然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说 ...
分类:
其他好文 时间:
2018-12-23 12:02:02
阅读次数:
136
关于循环缓冲区(Ring Buffer)的概念,其实来自于Linux内核(Maybe),是为解决某些特殊情况下的竞争问题提供了一种免锁的方法。这种特殊的情况就是当生产者和消费者都只有一个,而在其它情况下使用它也是必须要加锁的。对应在Linux内核中有对它的定义: struct kfifo { uns ...
分类:
其他好文 时间:
2018-12-19 17:53:56
阅读次数:
146
完整地XML配置文件信息: 声明式事务中的相关属性(tx:advice的标签) name=”” 哪些方法需要有事务控制 1.1 支持*通配符 声明式事务中的相关属性(tx:advice的标签) 1.1 支持*通配符 2.readonly=”boolean” 是否是只读事务. 2.1 如果为 true ...
分类:
编程语言 时间:
2018-12-18 14:40:53
阅读次数:
173
标题格 1、非公平锁 2、TCC分布式事务原理 1、非公平锁 在加锁过程,线程1运行,线程2处于等待队列。 线程1运行结束,结果线程3抢先于线程2进行。这就是非公平锁的简单含义。 在ReentrantLock lock = new ReentrantLock()默认的就是非公平锁,构造函数中加入tr ...
分类:
其他好文 时间:
2018-12-18 11:03:18
阅读次数:
196
加锁本身不会带来多少性能的损耗,性能的损耗主要在获取锁的过程。1.尽量不要锁住方法,因为在普通成员函数上加锁,线程获得的是该方法所在对象的对象锁;2.缩小同步代码块,尤其是一些循环操作、同步IO操作,并且不止是在代码行数上缩小同步块,在执行逻辑上也应该缩小,例如多增加一些条件判断,在符合条件的情况下 ...
分类:
其他好文 时间:
2018-12-17 22:01:19
阅读次数:
222
互斥锁 (Lock) 并发变成串行,效率降低了,保证数据不会错乱。 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如下 如何控制,就是加锁处理。而互斥锁的意思就是互相排斥。如果把多个进程比喻为多个人,互斥锁 ...
分类:
其他好文 时间:
2018-12-17 02:39:48
阅读次数:
194
上一篇文章介绍了“innobackupex 热备指定库表操作”,分析其整个过程,就是将表的字典和数据文件导出在导入的原理,那么针对单表的备份与恢复(新实例或者新库中恢复),我们可以直接采用物理导出innodb表的办法。
分类:
数据库 时间:
2018-12-16 11:04:03
阅读次数:
176