• 10.4. Redisson事务

    10.4. Redisson事务

    Redisson为RMapRMapCacheRLocalCachedMapRSetRSetCacheRBucket这样的对象提供了具有ACID属性的事务功能。Redisson事务通过分布式锁保证了连续写入的原子性,同时在内部通过操作指令队列实现了Redis原本没有的提交滚回功能。当提交滚回遇到问题的时候,将通过org.redisson.transaction.TransactionException告知用户。

    目前支持的环境如下: SINGLE, MASTER/SLAVE, SENTINEL, ELASTICACHE REPLICATED, AZURE CACHE, RLEC

    Redisson事务支持的事务隔离等级为: READ_COMMITTED,即仅读取提交后的结果。

    另见 Spring事务管理器 和本章 XA事务(XA Transactions)。

    以下选项可以用来配置事务属性:

    1. TransactionOptions options = TransactionOptions.defaults()
    2. // 设置参与本次事务的主节点与其从节点同步的超时时间。
    3. // 默认值是5秒。
    4. .syncSlavesTimeout(5, TimeUnit.SECONDS)
    5. // 处理结果超时。
    6. // 默认值是3秒。
    7. .responseTimeout(3, TimeUnit.SECONDS)
    8. // 命令重试等待间隔时间。仅适用于未发送成功的命令。
    9. // 默认值是1.5秒。
    10. .retryInterval(2, TimeUnit.SECONDS)
    11. // 命令重试次数。仅适用于未发送成功的命令。
    12. // 默认值是3次。
    13. .retryAttempts(3)
    14. // 事务超时时间。如果规定时间内没有提交该事务则自动滚回。
    15. // 默认值是5秒。
    16. .timeout(5, TimeUnit.SECONDS);

    代码范例:

    1. RTransaction transaction = redisson.createTransaction(TransactionOptions.defaults());
    2. RMap<String, String> map = transaction.getMap("myMap");
    3. map.put("1", "2");
    4. String value = map.get("3");
    5. RSet<String> set = transaction.getSet("mySet")
    6. set.add(value);
    7. try {
    8. transaction.commit();
    9. } catch(TransactionException e) {
    10. transaction.rollback();
    11. }