【发布时间】:2017-03-29 15:58:01
【问题描述】:
我是 Redis 新手,我正在试验 Redis 事务,我想在以下场景中使用 Redis 事务。需要知道这样做是否可行:
- 开始交易。
- 从排序集中读取前 10 个元素。
- 每个元素都有一个“for 循环”来做某事。
- 执行。
我尝试了以下代码,但它不起作用,因为我在执行事务之前正在执行<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.
有没有办法解决这个问题?
【问题讨论】:
-
你有没有考虑过用 Lua 和 EXEC 做 redis-site ?
-
是的,这就是我现在正在尝试的 hack。希望使用流水线和事务获得一些东西。
-
由于您需要能够对其进行迭代的数据,您要么必须在客户端分两个阶段进行,要么使用 Lua 服务器端。
标签: java transactions redis jedis