Исходный код вики Транзакции

Редактировал(а) Alexandr Fokin 2024/01/09 16:13

Последние авторы
1 | |(((
2 Transactions
3 [[https:~~/~~/redis.io/docs/manual/transactions/>>url:https://redis.io/docs/manual/transactions/]]
4
5 Как же работают транзакции в Redis
6 [[https:~~/~~/habr.com/ru/post/165223/>>url:https://habr.com/ru/post/165223/]]
7 )))
8 | |(((
9 | |[[Блокировки>>doc:Архитектура и модели.Блокировки.WebHome]]
10 |(% style="width:209px" %)[[Оптимистичная блокировка>>doc:Архитектура и модели.Блокировки.Оптимистичная блокировка.WebHome]]|(% style="width:1273px" %)(((
11 В рамках сессии позволяет установить наблюдение за значением по ключу. Если значение будет изменено, то redis оповестит об этом и позволит откатить операцию, либо выполнить заново.
12
13 Как работает Redis при одновременном доступе нескольких клиентов?
14 [[https:~~/~~/ru.stackoverflow.com/questions/876405/Как-работает-redis-при-одновременном-доступе-нескольких-клиентов>>url:https://ru.stackoverflow.com/questions/876405/Как-работает-redis-при-одновременном-доступе-нескольких-клиентов]]
15 )))
16 |(% style="width:209px" %)[[Пессимистичная блокировка>>doc:Архитектура и модели.Блокировки.Пессимистичная блокировка.WebHome]]|(% style="width:1273px" %)(((
17 Не содержит из коробки, но позволяет сконструировать логику блокировки или семафора (ограничение степени параллелизма при выполнении секции) через ручную реализацию.
18 (При такой реализации все клиенты должны исполнять логику по взятию блокировки, а также ее сброса в случае разрыва соединения)
19
20 Distributed Locks with Redis
21 [[https:~~/~~/redis.io/docs/reference/patterns/distributed-locks/>>https://redis.io/docs/reference/patterns/distributed-locks/]]
22
23 Распределенные блокировки с применением Redis
24 [[https:~~/~~/habr.com/ru/company/piter/blog/518218/>>https://habr.com/ru/company/piter/blog/518218/]]
25 )))
26 )))
27 |Шаблон транзакции -  оптимистичной блокировки.|(((
28 Команда {{code language="none"}}MULTI{{/code}} обозначает, что все команды, идущие после и выполняющие изменение данных, будут накапливаться и будут выполнены при вызове команды {{code language="none"}}EXEC{{/code}}.
29 При этом команды чтения данных не попадают в транзакцию а выполняются сразу же.
30
31 {{code language="none"}}
32 // Устанавливаем наблюдение за ключом
33 WATCH mykey
34
35 // Считываем значение в переменную и обновляем ее
36 val = GET mykey
37 val = val + 1
38
39 // Запускаем обновляющую транзакцию
40 // Транзакция накладывает свои свойства только на команды обновления данных.
41 // Поэтому считыванием значений мы выполняем до Multi.
42 MULTI
43 SET mykey $val
44 EXEC
45
46 //В случае, если в процессе выполнения значение по ключу mykey будет изменено операциями других сессий (относительно захваченного в watch значения), то запрос завершится ошибкой.
47 {{/code}}
48 )))
49
50 ----
51
52 ==== Внутренние ссылки: ====
53
54 ====== Дочерние страницы: ======
55
56 {{children/}}
57
58 ====== Обратные ссылки: ======
59
60 {{velocity}}
61 #set ($links = $doc.getBacklinks())
62 #if ($links.size() > 0)
63 #foreach ($docname in $links)
64 #set ($rdoc = $xwiki.getDocument($docname).getTranslatedDocument())
65 * [[$escapetool.xml($rdoc.fullName)]]
66 #end
67 #else
68 No back links for this page!
69 #end
70 {{/velocity}}
71
72 ----