该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

锁表事务问题

锁类型

for update,lock in share mode,next-key locks,mvcc

forupdat e时候,id为主键,RR策略时候,锁住了的条件符合的行,但是如果条件找不到任何 列,锁住的是整个表,(主键,唯一索引,非唯一索引,(insert,updat e对于gab锁不通)

可重复读和提交读本来就是矛盾的,如果可重复读了看不到其他事务的提交;如果可提交 读,两次读取的就不一样,不是重复读。

默认的可重读中,加入了next-keylocks。可重读并不保证避免幻读。

mysql可重读为了防止幻读,加入了forupdate,lockin share mode;普通读的select存在 幻读。

数据隔离级别

隔离级别 脏读 重复读 幻读

读未提交(Readuncommitted) V V V

读已提交(Readcommitted) X V V

可重复读(Repeatableread) X X V

可串行化(Serializable) X X X

数据隔离级别

Read Uncommitted]读取未提交内容)

未提交的事务读取,很少用

Read Committed(读取提交内容)

提交的内容读取,并发读取时如果有事务提交,内容不一致

Repeatable Read(可重读)

确保并发时一致,但是会出现幻读

Serializable(可串行化)

添加并发控制,解决幻读问题;加的共享锁,最高级别可能导致大量的超时现象和锁竞争 幻读(Phantom Read):读取时有新的内容加入.

中间件2题

12. redis 原理

• redis为什么快

使用单线程操作,由于是直接对内存操作,单线程不需要考虑上下文切换,锁竞争等. 极限在cpu的缓存读取,cpu速度特别快,所以单线程就够了,影响redis速度的,多是网络消 耗,持久化过程; 所以redis适合部署在少核缓存快速CPU的cpu机器上.

•持久化方式

master是无阻塞的,slave是阻塞的,slave在同步时不能响应客户端查询;

可以配置master不持久化,slav e持久化,但是有延迟; redis有自己的虚拟内存,因为Linux的虚拟内存page太大(已经弃用) Snapshotting(快照)默认方式;

父子进程操作,父进程接受client操作,子进程持久化;有写入的话父进程直接写入临时区 域;

临死区域完事后替换掉原来的快照文件.此时就需要两倍的相同的内存. 每次是做全部的数据完整写入硬盘,不是增量很大影响内存.

Append-only file(缩写aof);

虚拟内存:2.4后已经放弃

diskstore :放弃了虚拟内存方式后

• redis cluster

每个master维护了一个位序列,用bit记录自己是否拥有槽位;

还维护了一个槽位到机器节点映射,16384数组实现,槽位是下标,value是节点

。集群添加过程

各个服务之间meet握手(没有自动发现);

分配角色,默认是都是master;

槽位指派,迁移槽位内容信息

涉及到的主要的数据结构 clusterstate:集群状态 node s:所有结点 migrating_slots_to :迁出中的槽 importing_slots_from :导入中的槽 slots_to_keys:槽中包含的所有Key,用于迁移Slot时获得其包含的Key slots:Slot所属的结点,用于处理请求时判断Key所在Slot是否自己负责 clusterNode:结点信息

slots:结点负责的所有Slot,用于发送Gossip消息通知其他结点自己负责的 Slot。通过位图方式保存节省空间,16384/8恰好是2048字节,所以槽总数16384 不是随意定的。

clusterLink:与其他结点通信的连接

java设置事务锁_事务与锁相关推荐

  1. java 锁表后事务提交_关于synchronized锁在Spring事务中进行数据更新同步,仍出现线程安全问题...

    #1 问题描述# 最近有小伙伴在做商品抽奖活动时,在对奖品库存进行扣减,有线程安全的问题,遂加锁synchronized进行同步,但发现加锁后并没有控制住库存线程安全的问题,导致库存仍被超发. 先简单 ...

  2. mysql事务转账_事务(转账实例)

    事务(以转账为例) 事务: 就是一件完整的事情,包含多个操作单元,这些操作要么全部成功,要么全部失败. 例如:转账,包含转出操作和转入操作. mysql中的事务: mysql中事务默认是自动提交,一条 ...

  3. mysql 分布式锁_【分布式锁的演化】分布式锁居然还能用MySQL?

    前言 之前的文章中通过电商场景中秒杀的例子和大家分享了单体架构中锁的使用方式,但是现在很多应用系统都是相当庞大的,很多应用系统都是微服务的架构体系,那么在这种跨jvm的场景下,我们又该如何去解决并发. ...

  4. mysql x锁 u锁_讲解更新锁(U)与排它锁(X)的相关知识

    一直没有认真了解UPDATE操作的锁,最近在MSDN论坛上看到一个问题,询问堆表更新的死锁问题,问题很简单,有类似这样的表及数据: CREATE TABLE dbo.tb( c1 int, c2 ch ...

  5. redis cluster 分布式锁_关于分布式锁原理的一些学习与思考redis分布式锁,zookeeper分布式锁...

    首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在j ...

  6. laravel mysql 悲观锁_浅析乐观锁与悲观锁

    悲观锁 当我们要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发.这种借助数据库锁机制在修改数据之前锁定,再修改的方式被称为悲观并发控制(PC ...

  7. laravel mysql 悲观锁_[笔记] 悲观锁与乐观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性. 乐观并发控制(乐观锁)和悲观并发控制(悲 ...

  8. java设置pdf加密_如何使用Java对PDF进行加密,密码保护和设置受限权限

    java设置pdf加密 Today we will be looking at the document workhorse that is PDF, and how to programmatica ...

  9. Mysql uplock 更新锁_数据库更新锁WITH UPDLOCK

    今天因为并发的问题,又讨论了一遍.之前以为同时两个线程开启,线程A加了更新锁,线程B没有加,线程A更新后,线程B也会继续下去代码.但是今天测试了一下,原来线程A更新后(解锁),线程B将不会继续,会出现 ...

最新文章

  1. 闲来无事 linux cp命令的三种实现方式
  2. html制作顶部选项卡,html: 原生javascript实现选项卡
  3. 约瑟夫问题(丢手帕问题)
  4. 内核中修改和保存defconfig的方法
  5. 进度管理计划7个过程及相关重点
  6. linux 备份文件
  7. 焦作师范高等专科学校对口计算机分数线,焦作师范高等专科学校录取分数线2018...
  8. jgGrid pivot reload重新加载及刷新数据
  9. sendevent/getevent模拟Power键
  10. meterpreter 监控桌面命令(screenshare)
  11. 每周分享第 37 期
  12. hibernate复习第(三)天
  13. 网上商城的功能模块架构设计之(一)
  14. SQL常用基础参考语句
  15. C++学习(complex类)
  16. 中创软件哪个部分是外包_什么是外包| 第1部分
  17. 分立式数码管循环显示数字0到9.
  18. laravel 请求出现 post The page has expired due to inactivity.
  19. 2.系统发生树构建(非加权分组平均法、邻接法python实现)
  20. 会议论文与期刊论文的写作差异

热门文章

  1. antd-vue中的form表单label标签for导致点击文字触发输入框解决方案
  2. c#解决TCP“粘包”问题
  3. IE浏览器“SEC7113: CSS 因 Mime 类型不匹配而被忽略”问题的解决方法
  4. 检查丢失的软件包并安装它们的优雅方法?
  5. 如何在Java中将毫秒转换为“ X分钟,x秒”?
  6. 如何忽略SVN目录?
  7. 如何在Python中串联两个列表?
  8. 没有tpm不能装win11的解决方法
  9. ros之旋转加平移公式
  10. python requests urlencode_关于requests的urlencode问题