Я проверил все транзакционные команды (MULTI, EXEC, WATCH, DISCARD) в redis-cli. Но когда я попытался с Redis-Py произошла следующая ошибка:Что такое эквивалентные функции команд MULTI и EXEC в redis-py?
AttributeError: 'Redis' object has no attribute 'multi'
Я попытался следующий фрагмент кода:
import redis,time
r = redis.Redis()
try:
r.set("transError",10)
r.watch("transError")
var = r.get("transError")
var = int(var) + 1
print "Run other client to simulate an error without transaction"
time.sleep(4)
r.multi()
r.set("transError",var)
r.execute()
print "Value in first client",r.get("transError")
except redis.WatchError:
print "Value Altered"
Я видел пример кода, который использует несколько() и выполнить() но они не работают для меня. Любая помощь?
Этот ответ выглядит идеально. Хотя у меня есть один вопрос: сколько команд можно эффективно выполнять вместе? это нормально, если я передаю 500000 команд в одном конвейере или это будет слишком много для redis? –
@TusharJDudhatra Вам действительно нужно измерить это для себя для вашего индивидуального приложения. По моему опыту, хотя обычно предпочтительнее выставлять только разумное количество команд вместе ... как 10000 из них. Также в redis-py конвейер отправляет все команды сразу при его выполнении, а не непрерывно, независимо от транзакции = False. См. Https://redis.io/topics/pipelining https://github.com/schlitzered/pyredis/issues/2 – ntki
Благодарим за отзыв. Да, я попробовал выполнить команды 500K в одном конвейере, и он прошел гладко для меня. –