在Redis中可以通过以下方式完成交易:

redis.watch('powerlevel')

current = redis.get('powerlevel')

redis.multi()

redis.set('powerlevel', current + 1)

redis.exec()

>是否可以使用HandlerSocket执行此操作?

>使用事务提供的处理程序的一般功能是什么?

解决方法:

将Redis的“交易”与通用事务引擎进行比较总是会产生误导. Redis WATCH / MULTI / EXEC块是:

>不是原子的(发生错误时不会回滚)

>一致(Redis并没有太多的一致性规则)

>完全隔离(所有内容都已序列化)

>如果选择了AOF fsync策略,则可能持久

因此,Redis不能完全提供通常用于定义事务的完整ACID属性.与大多数事务引擎相反,Redis提供了非常强的隔离性,并且没有尝试提供任何回滚功能.

问题中提供的示例并不是真正具有代表性的IMO,因为可以通过使用以下方法以更简单的方式实现相同的行为:

redis.incr(“ powerlevel”)

因为Redis单一操作始终是原子的且孤立的.

WATCH / MULTI / EXEC块通常在必须加强各种密钥之间的一致性或实现乐观锁定模式时使用.换句话说,如果您的目的只是增加隔离计数器的数量,则无需使用WATCH / MULTI / EXEC块.

HandlerSocket是完全不同的野兽.它建立在MySQL的通用处理程序之上,并且取决于基础存储引擎,事务行为将有所不同.例如,当与MyISAM一起使用时,它将不使用ACID事务,但是将通过表级别的R / W锁来确保一致性.使用InnoDB,ACID事务将以默认隔离级别使用(可以在InnoDB配置AFAIK中设置). InnoDB实现了MVCC(多版本并发控制),因此锁定比MyISAM复杂得多.

HandlerSocket与两个工作线程池一起使用(一个用于只读连接,一个用于面向写连接).人们应该使用几个读取工作线程,但是只能使用一个写入线程(可能是为了减少锁定争用).因此,在基本配置中,写入操作是序列化的,而不是读取操作. AFAIK具有与Redis相同的隔离语义的唯一可能性是仅使用面向写的套接字来执行读和写操作,并仅保留一个写线程(所有操作的完全序列化).但是它将影响可伸缩性.

根据HandlerSocket协议,无法访问事务功能.在每个事件循环迭代中,它收集所有操作(来自所有套接字),并为所有这些操作执行唯一事务(仅与InnoDB相关). AFAIK,用户无法更改此交易的范围.

结论是,通常不可能使用HandlerSocket模拟Redis WATCH / MULTI / EXEC块的行为.

现在回到示例,如果目的只是以一致的方式增加计数器,则the HandlerSocket protocol完全支持该功能.例如,可以使用/-(增加/减少)操作,并且还可以使用U?.操作(类似于Redis GETSET命令)或?/-? (增加/减少,返回前一个值).

标签:redis,nosql,transactions,mysql

来源: https://codeday.me/bug/20191201/2083191.html

mysql handlersocket,MySQL-HandlerSocket交易相关推荐

  1. goldengate for mysql_GoldenGate for mysql to mysql:单向同步

    GoldenGate for mysql to mysql:单向同步 GoldenGate用于在各种企业系统间以亚秒级速度复制和集成事务数据,是同类最佳的.易于部署的产品.GoldenGate 可以灵 ...

  2. 【MySQL】mysql数据库操作指南

    [MySQL]MySQL安装版安装流程 目录 1. MySQL数据类型 1.1 整数类型: 1.2 浮点数类型和定点数类型: 1.3 日期与时间类型: 1.3.1 YEAR类型 1.3.2 TIME类 ...

  3. db mysql / mysql dba / mysql manual / mysql config / mysql innotop

    MySQL 5.1 Reference Manual http://dev.mysql.com/doc/refman/5.1/en/ Including MySQL Cluster NDB 6.X/7 ...

  4. mysql以及mysql bench安装教程

    首先,我们需要去官网下载mysql(这里以下载) 1 2 3 4 5 下载好了自己好了之后,点击安装好的东西出现如下界面: 1.接受使用条款并点击next 2.点击custom,可以根据个人习惯进行安 ...

  5. php 多条查询结果插入新表,Mysql应用MySQL查询结果复制到新表的方法(更新、插入)...

    <Mysql应用MySQL查询结果复制到新表的方法(更新.插入)>要点: 本文介绍了Mysql应用MySQL查询结果复制到新表的方法(更新.插入),希望对您有用.如果有疑问,可以联系我们. ...

  6. mysql unrecognized_service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误...

    service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...

  7. Ubuntu下安装mysql与mysql workbench

    其他相关链接 Ubuntu 安装jdk:[链接] Ubuntu安装eclipse:[链接] Ubuntu下安装mysql与mysql workbench:[链接] Ubuntu配置tomcat9:[链 ...

  8. MySQL Cluster(MySQL 集群) 初试(转)

    作/译者:叶金荣(imysql#imysql.com>),来源:http://imysql.com,欢迎转载. 作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请 ...

  9. 设置更改root密码(远程,本地)、连接mysql、mysql常用命令

    设置更改root密码 1.将mysql加入环境变量中 [root@centos7 ~]# grep mysql /etc/profile export PATH=/usr/local/mysql/bi ...

  10. MySQL Cluster(MySQL 集群) 初试

    MySQL Cluster 是MySQL适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.在MyQL 5.0及 ...

最新文章

  1. pytorch 笔记:tensorboardX
  2. 如果reporting server出现“无法安装打印控件”的处理方法。
  3. P5303 [GXOI/GZOI2019]逼死强迫症(斐波拉契、矩阵乘法)
  4. kail利用msf工具对MS12-020漏洞进行渗透测试
  5. 【Flink】Flink状态的缩放(rescale)与键组(Key Group)设计
  6. python 新建一列_python – 如何在迭代pandas数据框时创建新列并插入行值
  7. 安装篇——nginx安装ssl模块转发https请求
  8. 前端基础学习之CSS选择器
  9. Simply Fortran 保姆级教程
  10. linux qt socket编程视频教程,Qt视频教程第二十八集socket之UDP
  11. C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数
  12. Solidity编程语言
  13. 微信小程序ui布局常用技巧
  14. LimeSDR 中文教程 (九)
  15. unity自动生成敌人_unity 2d AI 敌人 自动追踪(1)
  16. Android之HttpURLConnection应用实例:武大教务系统获取课表
  17. cocos-lua环境搭建
  18. 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage
  19. 敲完第一万行代码我发现一个秘密
  20. 远程桌面连接软件 Remote Desktop Manager for Mac

热门文章

  1. 【8015】对做产品有帮助的行外书
  2. fast rcnn和faster rcnn
  3. 项目经理是有责无权的“领导” 要会借力
  4. 超市仓库管理系统(过期提醒)
  5. 微信小程序常见面试题及答案
  6. 物联网设备通过MQTT接入华为iot平台
  7. RN react-native-wechar 微信支付、分享
  8. lavaral中文手册_Laravel 5.8 中文文档手册
  9. 贪吃蛇的c语言运行程序,用C语言编写贪吃蛇游戏的程序
  10. 尚观python培训视频教程