Исходный код вики Транзакции
Редактировал(а) Alexandr Fokin 2024/01/09 16:13
Последние авторы
author | version | line-number | content |
---|---|---|---|
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 | ---- |