Это пятый день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления
⭐August Update Challenge Day 5⭐, изучите MybatisPlus, приглашайте друзей учиться вместе 😁
Код Пипи КреветкаГлупый и забавный мальчик, который любит слушать песни и игры, как и большинство его друзей. Конечно, он также проявляет интерес к писательству. Эмм..., дни еще длинные, давайте усердно работать вместе. 🌈
Добро пожаловать, друзья, обратите внимание на мой публичный номер:JavaCodes, хотя в названии есть Java, но оно охватывает больше, чем область Java 😁, ждем вашего внимания ❤
Оригинальная ссылка⭐Примечания к исследованию MybatisPlus⭐ (5) Внедрить оптимистичный механизм блокировки
пролог
⭐Учебные заметки MybatisPlus⭐ (1) Создание среды и начало работы HelloWorld
⭐Учебные заметки MybatisPlus⭐ (2) Полный набор подробных объяснений CRUD
⭐Учебные заметки MybatisPlus⭐ (3) Реализовать логическое удаление и пейджинг
1. Обзор оптимистической блокировки
Оптимистичная блокировкаПо сравнению с пессимистической блокировкой оптимистичный механизм блокировки использует более расслабленный механизм блокировки. В большинстве случаев пессимистическая блокировка зависит от механизма блокировки базы данных, чтобы обеспечить максимальную эксклюзивность операций. Но вместе с этим возникает много накладных расходов на производительность базы данных, особенно для длинных транзакций, что часто невыносимо. Оптимистичный механизм блокировки в определенной степени решает эту проблему. Оптимистическая блокировка, в основном основанная на управлении версиями данных (Version) реализация механизма записи. Что такое версия данных? то есть добавить единицу к даннымИдентификатор версииВ таблице базы данных таблицы базы данных это обычно реализуется путем добавления поля «Версия» для таблицы базы данных. При чтении данных вместе считывайте этот номер версии и добавляйте единицу к этому номеру версии при последующем обновлении. В настоящее время,Сравните данные версии отправленных данных с информацией о текущей версии соответствующих записей в таблице базы данных.Если номер версии отправленных данных равен текущему номеру версии таблицы базы данных, он будет обновлен, в противном случае он считаются просроченными данными.
2. Основные сценарии применения
намерение:
Когда запись должна быть обновлена, я надеюсь, что эта запись не была обновлена другими
Оптимистичная реализация блокировки:
- При извлечении записи получить текущую версию
- При обновлении ставьте эту версию
- При выполнении обновления установите version = newVersion, где version = oldVersion.
- Если версия неверна, обновление не выполняется
–A线程
update user set name = “dong”, version = version+1 where id = 2 and version = 1
–B 线程抢先完成,这个时候version = 2,会导致A修改失败!
update user set name = “dong”, version = version+1 where id = 2 and version = 1
3. Настройте оптимистическую блокировку
Новое поле базы данных ==версия==
==Добавьте соответствующее поле версии в класс сущности Java==
@Описание версии:
- Поддерживаются только следующие типы данных: int, Integer, long, Long, Date, Timestamp, LocalDateTime.
- Целочисленный тип
newVersion = oldVersion + 1
-
newVersion
отпишусь вentity
середина - поддерживает только
updateById(id)
а такжеupdate(entity, wrapper)
метод - существует
update(entity, wrapper)
по методу,wrapper
Повторное использование невозможно!!!
==Создайте класс конфигурации и настройте подключаемый модуль оптимистичной блокировки==
@Configuration
public class MyConfig {
//乐观锁插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
4. Протестируйте оптимистическую блокировку
Обычно конечным результатом будет тест 1, но результатом будет тест 2. Из-за механизма оптимистичной блокировки значения версии, полученные потоком 1 и потоком 2 в начале, равны 1, но после обновления потока 2, версия автоматически увеличивается до 2. В это время поток 1 для обновления версии не является ожидаемым значением 1, поэтому обновление не выполняется! ! !
наконец
яКод Пипи Креветка, любитель креветок Пеппи, который любит делиться знаниями, в ближайшие дни продолжит обновлять посты в блоге, полезные для всех, и с нетерпением жду вашего внимания! ! !
Это не легко создать, если этот пост в блоге полезен для вас, я надеюсь, вы сможете == одним щелчком мыши по трем ссылкам! ==, спасибо за поддержку, увидимся в следующий раз~~~