我是Redis的新手,我正在尝试Redis事务,我想在以下场景中使用Redis事务。需要知道这样做是否可行:
我尝试了以下代码,但由于我在执行事务之前正在执行<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.
有办法解决这个问题吗?
答案 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();
}