Java Redis(jedis)事务和排序集

时间:2017-02-08 19:27:41

标签: java transactions redis jedis

我是Redis的新手,我正在尝试Redis事务,我想在以下场景中使用Redis事务。需要知道这样做是否可行:

  1. 开始交易。
  2. 从排序集中读取前10个元素。
  3. 为每个元素做一个'for循环'来做某事。
  4. 执行。
  5. 我尝试了以下代码,但由于我在执行事务之前正在执行<Response>.get(),因此无效。

    final Transaction tx = jedis.multi();
    final Response<Set<Tuple>> tuples = tx.zrangeByScoreWithScores("randomKey", 0d, 100, 0, 10);
    for (final Tuple tuple : tuples.get()) {
        jedis.incr(tuple);
    }
    tx.exec(); //In a hope that get and sets happen in a single transaction.
    

    有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Redisson代替。使用Lock对象而不是事务。案例:

RLock lock = redisson.getLock("myLock");
lock.lock();
try {
    Collection<ScoredEntry<V>> entries = redisson.getScoredSortedSet("randomKey").entryRange(true, 0, true, 100, 0, 10);
    for (final ScoredEntry<V> entry : entries) {
       redisson.getAtomicLong(entry.getValue()).incrementAndGet();
    }
} finally {
    lock.unlock();
}