10.4. Redisson事务
Redisson为RMap
、RMapCache
、RLocalCachedMap
、RSet
、RSetCache
和RBucket
这样的对象提供了具有ACID属性的事务功能。Redisson事务通过分布式锁保证了连续写入的原子性,同时在内部通过操作指令队列实现了Redis原本没有的提交
与滚回
功能。当提交
与滚回
遇到问题的时候,将通过org.redisson.transaction.TransactionException
告知用户。
目前支持的环境如下: SINGLE
, MASTER/SLAVE
, SENTINEL
, ELASTICACHE REPLICATED
, AZURE CACHE
, RLEC
。
Redisson事务支持的事务隔离等级为: READ_COMMITTED
,即仅读取提交后的结果。
另见 Spring事务管理器 和本章 XA事务(XA Transactions)。
以下选项可以用来配置事务属性:
TransactionOptions options = TransactionOptions.defaults()
// 设置参与本次事务的主节点与其从节点同步的超时时间。
// 默认值是5秒。
.syncSlavesTimeout(5, TimeUnit.SECONDS)
// 处理结果超时。
// 默认值是3秒。
.responseTimeout(3, TimeUnit.SECONDS)
// 命令重试等待间隔时间。仅适用于未发送成功的命令。
// 默认值是1.5秒。
.retryInterval(2, TimeUnit.SECONDS)
// 命令重试次数。仅适用于未发送成功的命令。
// 默认值是3次。
.retryAttempts(3)
// 事务超时时间。如果规定时间内没有提交该事务则自动滚回。
// 默认值是5秒。
.timeout(5, TimeUnit.SECONDS);
代码范例:
RTransaction transaction = redisson.createTransaction(TransactionOptions.defaults());
RMap<String, String> map = transaction.getMap("myMap");
map.put("1", "2");
String value = map.get("3");
RSet<String> set = transaction.getSet("mySet")
set.add(value);
try {
transaction.commit();
} catch(TransactionException e) {
transaction.rollback();
}