假设我有一笔交易。我想从数据库中获取一些先前插入此事务的内容,并在同一事务的后续操作中使用该值,如下所示:
byte[] data = t.get(key).get(); t.set(other_key, data);
但是在jedis中,当我尝试此操作时,会收到一个jedisdataexception,它告诉我需要在对事务响应调用get()之前执行事务。有没有一种方法可以在同一事务中使用查询的结果而不执行它。
axr492tv1#
不,你不能用redis交易。redis的事务基本上是一次将所有命令发送到redis,redis执行这些命令,而来自其他连接的命令等待它完成。完成后,它会为您返回结果。注意,与mysql不同,它不会在事务的中间向您返回结果。所以你不能在中间读取查询结果。要想做你想做的事情,你需要lua脚本(学习编写你想要的东西大约需要十分钟),它在服务器端运行(不需要在操作过程中将结果返回给客户机)。你可能想看看这些redis交易redis lua脚本
1条答案
按热度按时间axr492tv1#
不,你不能用redis交易。redis的事务基本上是一次将所有命令发送到redis,redis执行这些命令,而来自其他连接的命令等待它完成。完成后,它会为您返回结果。注意,与mysql不同,它不会在事务的中间向您返回结果。所以你不能在中间读取查询结果。
要想做你想做的事情,你需要lua脚本(学习编写你想要的东西大约需要十分钟),它在服务器端运行(不需要在操作过程中将结果返回给客户机)。
你可能想看看这些
redis交易
redis lua脚本