- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在Redis中可以这样完成事务:
redis.watch('powerlevel')
current = redis.get('powerlevel')
redis.multi()
redis.set('powerlevel', current + 1)
redis.exec()
最佳答案
将 Redis“事务”与通用事务引擎进行比较总是有点误导。 Redis WATCH/MULTI/EXEC block 是:
因此,Redis 并未完全提供通常用于定义事务的完整 ACID 属性。与大多数事务引擎相反,Redis 提供了非常强大的隔离,并且不尝试提供任何回滚功能。
问题中提供的示例并不是真正具有代表性的 IMO,因为可以通过使用以下方法以更简单的方式实现相同的行为:
redis.incr( "powerlevel")
因为 Redis 单个 操作始终是原子的和孤立的。
WATCH/MULTI/EXEC block 通常在必须强制执行各种键之间的一致性或实现乐观锁定模式时使用。换句话说,如果您的目的只是增加独立的计数器,则无需使用 WATCH/MULTI/EXEC block 。
HandlerSocket 是一个完全不同的野兽。它建立在 MySQL 的通用处理程序之上,根据底层存储引擎的不同,事务行为会有所不同。例如,当它与 MyISAM 一起使用时,它将不使用 ACID 事务,但一致性将通过表级别的 R/W 锁来确保。对于 InnoDB,ACID 事务将与默认隔离级别一起使用(可以在 InnoDB 配置 AFAIK 中设置)。 InnoDB 实现了 MVCC(多版本并发控制),因此锁定比 MyISAM 复杂得多。
HandlerSocket 与两个工作线程池一起工作(一个用于只读连接,一个用于面向写入的连接)。人们应该使用多个读取工作线程,但只使用一个写入线程(可能是为了减少锁定争用)。所以在基本配置中,写操作是序列化的,而不是读操作。 AFAIK,与 Redis 具有相同隔离语义的唯一可能性是只使用面向写入的套接字来执行读取和写入操作,并且只保留一个写入线程(所有操作的完全序列化)。不过,它会影响可扩展性。
从 HandlerSocket 协议(protocol)中,无法访问事务功能。在每个事件循环迭代中,它收集所有操作(来自所有套接字),并为所有这些操作执行唯一事务(仅与 InnoDB 相关)。据我所知,用户无法更改此交易的范围。
结论是通常不可能使用 HandlerSocket 模拟 Redis WATCH/MULTI/EXEC block 的行为。
现在,回到示例,如果目的只是以一致的方式递增计数器,the HandlerSocket protocol 完全支持这一点。 .例如,+/-(递增/递减)操作可用,还有 U?操作(类似于 Redis GETSET 命令),或 +?/-? (递增/递减,返回之前的值)。
关于mysql - HandlerSocket 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209834/
handlersocket 插件是否知道表上可能的分区?我没有在相关文档中找到提及,我什至不知道分区是否对处理程序套接字透明,或者它是 sql 优化器所做的事情。 最佳答案 简答: HandlerSo
在Redis中可以这样完成事务: redis.watch('powerlevel') current = redis.get('powerlevel') redis.multi() redis.set
我们的设置如下: 主数据库服务器,运行 Percona 5.5.x 的 Amazon EC2 m2.xlarge 实例(17GB 内存,2x3.25ecu CPU) 应用程序服务器、运行 PHP 5.
我有一个基于 PHP 的多线程应用程序,我正在尝试使用 MySql 的 HandlerSocket 插件。 当作为单个进程运行时,它工作正常。当我开始多线程处理时,插入时出现错误 - 它只是显示“16
我可以在使用 HandlerSockets 时指定我想从查询中接收哪些字段吗? ? 这是我的示例表 CREATE TABLE pushed_media ( user_id BINARY(12)
由于某些原因,当我启动 mariadb(版本10.0.14)。我使用的是 Cent OS 6.5。 my.cnf 有以下设置: handlersocket_port = 9998 handlersoc
我编写了一个基于 HandlerSocket 查询系统的轻量级套接字,它工作得很好......除了这个小问题...... 我在数据库中有一个表,其中有 unique索引包含 5 个关键部分: func
主要问题 - 是否可以将 HandlerSocket 与 PXC 一起使用?我注意到在高负载期间,套接字崩溃相当频繁,并出现错误 HNDSOCK unlock tables: commit faile
我是一名优秀的程序员,十分优秀!