(no subject)
Tuesday, 15 January 2013 02:58![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Транзакции в редисе реально странные. Т.е. optimistic locking, всё такое, я понимаю, но в итоге обнаруживается что:
Да? Хорошо.
Мдя? Хорошо, давай в redis-cli.
Одной рукой:
Тем временем второй рукой:
Возвращаемся в первую:
Всё как положено, да. Ну а если самому менять то что вотчишь?
Всё правильно. А чо питоновская либа выёбывается?
Одно из двух, или я чего-то не понимаю в концепции оптимистических локов, или аффтары pyredis. Или просто янихуянепонелжпг :(
[altlinux@eeelive ~]$ python -c 'import redis; r=redis.Redis(); r.watch("testestest"); p=r.pipeline(); p.set("testestest", 1); p.execute()'
/usr/lib/python2.6/site-packages/redis/client.py:730: DeprecationWarning: Call WATCH from a Pipeline object
warnings.warn(DeprecationWarning('Call WATCH from a Pipeline object'))
Да? Хорошо.
[altlinux@eeelive ~]$ python -c 'import redis; r=redis.Redis(); p=r.pipeline(); p.watch("testestest"); p.set("testestest", 1); p.execute()'
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python2.6/site-packages/redis/client.py", line 1811, in execute
return execute(conn, stack, raise_on_error)
File "/usr/lib/python2.6/site-packages/redis/client.py", line 1730, in _execute_transaction
raise WatchError("Watched variable changed.")
redis.exceptions.WatchError: Watched variable changed.
Мдя? Хорошо, давай в redis-cli.
Одной рукой:
[altlinux@eeelive ~]$ redis-cli
redis 127.0.0.1:6379> watch testest
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> set testest 1
QUEUED
Тем временем второй рукой:
[altlinux@eeelive ~]$ redis-cli set testest 10
OK
Возвращаемся в первую:
redis 127.0.0.1:6379> exec
(nil)
redis 127.0.0.1:6379> get testest
"10"
Всё как положено, да. Ну а если самому менять то что вотчишь?
[altlinux@eeelive redis-2.6.8]$ ./src/redis-cli
redis 127.0.0.1:6379> get test-2.6.8
(nil)
redis 127.0.0.1:6379> set test-2.6.8 123456
OK
redis 127.0.0.1:6379> watch test-2.6.8
OK
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> set test-2.6.8 xyz
QUEUED
redis 127.0.0.1:6379> exec
1) OK
redis 127.0.0.1:6379> get test-2.6.8
"xyz"
Всё правильно. А чо питоновская либа выёбывается?
Одно из двух, или я чего-то не понимаю в концепции оптимистических локов, или аффтары pyredis. Или просто янихуянепонелжпг :(