Rumah pembangunan bahagian belakang tutorial php Bagaimana untuk menangani kunci yang diedarkan dan kawalan konkurensi dalam pembangunan PHP

Bagaimana untuk menangani kunci yang diedarkan dan kawalan konkurensi dalam pembangunan PHP

Oct 08, 2023 am 11:48 AM
pembangunan php Kunci yang diedarkan Kawalan konkurensi

Bagaimana untuk menangani kunci yang diedarkan dan kawalan konkurensi dalam pembangunan PHP

Tajuk: Kunci teragih dan amalan kawalan serentak dalam pembangunan PHP

Dalam pembangunan aplikasi web serentak tinggi, kunci teragih dan kawalan serentak adalah cara teknikal yang penting. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mengendalikan kunci yang diedarkan dan kawalan konkurensi, dengan contoh kod khusus.

  1. Konsep kunci teragih
    Kunci teragih merujuk kepada mekanisme yang memastikan susunan dan ketekalan operasi data untuk sumber tertentu dalam sistem teragih. Dalam senario konkurensi tinggi, kunci yang diedarkan boleh menghalang berbilang proses daripada mengakses dan mengubah suai sumber yang sama pada masa yang sama, dengan itu memastikan ketepatan data.
  2. Kaedah pelaksanaan kunci teragih
    2.1 Pelaksanaan berasaskan cache
    Menggunakan cache untuk melaksanakan kunci teragih ialah cara biasa dan mudah, dan boleh dilaksanakan menggunakan perkhidmatan cache seperti Redis dan Memcached.
    Kod sampel adalah seperti berikut:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$lockKey = 'resource_lock';
$lockExpire = 10;

// 尝试获取锁
$lockResult = $redis->set($lockKey, 1, ['NX', 'EX' => $lockExpire]);

if ($lockResult) {
    // 获取锁成功,执行业务逻辑
    // ...

    // 释放锁
    $redis->del($lockKey);
} else {
    // 获取锁失败,处理业务逻辑
    // ...
}
Salin selepas log masuk

2.2 Berdasarkan pelaksanaan pangkalan data
Simulasikan kunci teragih dengan menambah jadual baharu dalam pangkalan data, dan gunakan ciri transaksi pangkalan data untuk melaksanakan fungsi kunci.
Kod sampel adalah seperti berikut:

// 假设数据库连接已经创建
$lockTable = 'resource_lock';
$lockExpire = 10;

$pdo->beginTransaction();

try {
    // 尝试获取锁
    $selectSql = "SELECT * FROM $lockTable WHERE resource='resource_key' FOR UPDATE";
    $selectStmt = $pdo->prepare($selectSql);
    $selectStmt->execute();

    $lockRow = $selectStmt->fetch(PDO::FETCH_ASSOC);

    if ($lockRow) {
        // 锁已经存在,获取锁失败,处理业务逻辑
        // ...
    } else {
        // 锁不存在,获取锁成功,执行业务逻辑
        // ...

        // 插入锁信息
        $insertSql = "INSERT INTO $lockTable (resource, create_time) VALUES ('resource_key', UNIX_TIMESTAMP())";
        $insertStmt = $pdo->prepare($insertSql);
        $insertStmt->execute();

        // 提交事务
        $pdo->commit();
    }
} catch (Exception $e) {
    // 发生异常,回滚事务
    $pdo->rollback();

    // 错误处理
    // ...
}
Salin selepas log masuk
  1. Cara melaksanakan kawalan konkurensi
    Kawalan konkurensi merujuk kepada kaedah kawalan untuk memastikan konsistensi data dalam persekitaran konkurensi yang tinggi. Kaedah kawalan konkurensi biasa termasuk penguncian optimistik dan penguncian pesimis.

3.1 Pelaksanaan Kunci Optimis
Optimistic Lock bermaksud bahawa sebelum melakukan operasi data, ia dianggap sebagai konflik tidak akan berlaku, dan hanya menentukan sama ada ia sepadan dengan nombor versi sebelumnya semasa kemas kini. , jika tidak mesej ralat akan dikembalikan.
Kod sampel adalah seperti berikut:

// 假设从数据库中获取到的数据是当前版本号为2的数据
$data = [
    'id' => 1,
    'name' => 'test',
    'version' => 2
];

$optimizedVersion = $data['version'] + 1;

// 更新数据
$updateSql = "UPDATE resource_table SET name='updated_name', version=$optimizedVersion WHERE id=1 AND version={$data['version']}";
$updateStmt = $pdo->prepare($updateSql);
$updateStmt->execute();

if ($updateStmt->rowCount() <= 0) {
    // 操作失败,版本号不匹配,处理业务逻辑
    // ...
}
Salin selepas log masuk

3.2 Pelaksanaan kunci pesimis
Kunci pesimis bermaksud mendapatkan kunci sebelum melakukan operasi data untuk memastikan pengguna semasa boleh memiliki data secara eksklusif dan pengguna lain tidak boleh mengubah suai data sehingga pengguna semasa mengeluarkan kunci itu.
Kod sampel adalah seperti berikut:

$pdo->beginTransaction();

try {
    // 获取锁
    $selectSql = "SELECT * FROM resource_table WHERE id=1 FOR UPDATE";
    $selectStmt = $pdo->prepare($selectSql);
    $selectStmt->execute();

    $data = $selectStmt->fetch(PDO::FETCH_ASSOC);

    if ($data) {
        // 获取锁成功,执行业务逻辑
        // ...

        // 释放锁
        $pdo->commit();
    } else {
        // 获取锁失败,处理业务逻辑
        // ...
    }
} catch (Exception $e) {
    // 发生异常,回滚事务
    $pdo->rollback();

    // 错误处理
    // ...
}
Salin selepas log masuk

Ringkasan:
Dalam pembangunan PHP, kunci yang diedarkan dan kawalan konkurensi adalah cara penting untuk mencapai konkurensi yang tinggi dan konsistensi data. Artikel ini memperkenalkan pelaksanaan kunci teragih berdasarkan cache dan pangkalan data, serta pelaksanaan kawalan konkurensi kunci optimistik dan kunci pesimis Ia juga disertakan dengan contoh kod khusus, dengan harapan dapat membantu pembaca mengendalikan kunci yang diedarkan dan konkurensi dalam pembangunan. Adegan terkawal.

Atas ialah kandungan terperinci Bagaimana untuk menangani kunci yang diedarkan dan kawalan konkurensi dalam pembangunan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menggunakan Memcache dalam pembangunan PHP? Bagaimana untuk menggunakan Memcache dalam pembangunan PHP? Nov 07, 2023 pm 12:49 PM

Dalam pembangunan web, kita selalunya perlu menggunakan teknologi caching untuk meningkatkan prestasi tapak web dan kelajuan tindak balas. Memcache ialah teknologi caching popular yang boleh menyimpan sebarang jenis data dan menyokong konkurensi tinggi dan ketersediaan tinggi. Artikel ini akan memperkenalkan cara menggunakan Memcache dalam pembangunan PHP dan memberikan contoh kod khusus. 1. Pasang Memcache Untuk menggunakan Memcache, pertama sekali kita perlu memasang sambungan Memcache pada pelayan. Dalam sistem pengendalian CentOS, anda boleh menggunakan arahan berikut

Kawalan konkurensi dan keselamatan benang dalam rangka kerja pengumpulan Java Kawalan konkurensi dan keselamatan benang dalam rangka kerja pengumpulan Java Apr 12, 2024 pm 06:21 PM

Rangka kerja koleksi Java mengurus konkurensi melalui koleksi selamat benang dan mekanisme kawalan konkurensi. Koleksi selamat benang (seperti CopyOnWriteArrayList) menjamin ketekalan data, manakala koleksi tidak selamat benang (seperti ArrayList) memerlukan penyegerakan luaran. Java menyediakan mekanisme seperti kunci, operasi atom, ConcurrentHashMap dan CopyOnWriteArrayList untuk mengawal konkurensi, dengan itu memastikan integriti dan konsistensi data dalam persekitaran berbilang benang.

Penyepaduan dan pengembangan kawalan konkurensi fungsi golang dan perpustakaan pihak ketiga Penyepaduan dan pengembangan kawalan konkurensi fungsi golang dan perpustakaan pihak ketiga Apr 25, 2024 am 09:27 AM

Pengaturcaraan serentak dilaksanakan dalam Go through Goroutine dan alat kawalan serentak (seperti WaitGroup, Mutex), dan perpustakaan pihak ketiga (seperti sync.Pool, sync.semaphore, queue) boleh digunakan untuk melanjutkan fungsinya. Perpustakaan ini mengoptimumkan operasi serentak seperti pengurusan tugas, sekatan akses sumber dan peningkatan kecekapan kod. Contoh menggunakan perpustakaan baris gilir untuk memproses tugasan menunjukkan aplikasi perpustakaan pihak ketiga dalam senario konkurensi sebenar.

Pertimbangan pembangunan C#: pengaturcaraan berbilang benang dan kawalan konkurensi Pertimbangan pembangunan C#: pengaturcaraan berbilang benang dan kawalan konkurensi Nov 22, 2023 pm 01:26 PM

Dalam pembangunan C#, pengaturcaraan berbilang benang dan kawalan konkurensi amat penting dalam menghadapi peningkatan data dan tugasan. Artikel ini akan memperkenalkan beberapa perkara yang perlu diberi perhatian dalam pembangunan C# dari dua aspek: pengaturcaraan berbilang benang dan kawalan konkurensi. 1. Pengaturcaraan berbilang benang Pengaturcaraan berbilang benang ialah teknologi yang menggunakan sumber berbilang teras CPU untuk meningkatkan kecekapan program. Dalam program C#, pengaturcaraan berbilang benang boleh dilaksanakan menggunakan kelas Thread, kelas ThreadPool, kelas Tugas dan Async/Await. Tetapi apabila melakukan pengaturcaraan berbilang benang

Kesan kawalan serentak fungsi golang terhadap prestasi dan strategi pengoptimuman Kesan kawalan serentak fungsi golang terhadap prestasi dan strategi pengoptimuman Apr 24, 2024 pm 01:18 PM

Kesan kawalan serentak pada prestasi GoLang: Penggunaan memori: Goroutine menggunakan memori tambahan dan sejumlah besar goroutine boleh menyebabkan keletihan memori. Overhed penjadualan: Membuat goroutines akan menjana overhed penjadualan, dan penciptaan dan pemusnahan gorouti yang kerap akan menjejaskan prestasi. Persaingan kunci: Penyegerakan kunci diperlukan apabila berbilang gorout mengakses sumber yang dikongsi persaingan akan membawa kepada kemerosotan prestasi dan kependaman lanjutan. Strategi pengoptimuman: Gunakan gorouti dengan betul: hanya buat gorouti apabila perlu. Hadkan bilangan goroutine: gunakan saluran atau penyegerakan.WaitGroup untuk mengurus konkurensi. Elakkan pertikaian kunci: gunakan struktur data tanpa kunci atau kurangkan masa memegang kunci

Analisis pengalaman projek pemprosesan transaksi dan kawalan serentak MySQL yang diedarkan Analisis pengalaman projek pemprosesan transaksi dan kawalan serentak MySQL yang diedarkan Nov 02, 2023 am 09:01 AM

Analisis Pengalaman Projek Pemprosesan Transaksi Teragih dan Kawalan Konkurensi MySQL Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet dan peningkatan bilangan pengguna, keperluan untuk pangkalan data juga telah meningkat. Dalam sistem teragih berskala besar, MySQL, sebagai salah satu sistem pengurusan pangkalan data hubungan yang paling biasa digunakan, sentiasa memainkan peranan penting. Walau bagaimanapun, apabila saiz data meningkat dan akses serentak meningkat, prestasi dan kebolehskalaan MySQL menghadapi cabaran yang teruk. Terutamanya dalam persekitaran yang diedarkan, cara mengendalikan urus niaga dan mengawal konkurensi telah menjadi keperluan mendesak untuk diselesaikan.

Analisis mendalam pemprosesan transaksi MongoDB dan mekanisme kawalan serentak Analisis mendalam pemprosesan transaksi MongoDB dan mekanisme kawalan serentak Nov 04, 2023 pm 03:00 PM

Analisis mendalam mengenai pemprosesan transaksi dan mekanisme kawalan konkurensi MongoDB Ringkasan: MongoDB ialah pangkalan data NoSQL popular yang terkenal dengan prestasi tinggi dan kebolehskalaan. Walau bagaimanapun, MongoDB pada mulanya tidak menyokong pemprosesan transaksi dan kawalan serentak, yang mungkin menyebabkan masalah konsistensi dan integriti data dalam beberapa kes. Untuk menangani isu ini, MongoDB memperkenalkan urus niaga berbilang dokumen dan tahap pengasingan hibrid dalam versi terbaharunya, memberikan pembangun dengan mekanisme kawalan serentak yang lebih baik. Pengenalan: Pemprosesan Transaksi dan

Bagaimana untuk melaksanakan kawalan versi dan kerjasama kod dalam pembangunan PHP? Bagaimana untuk melaksanakan kawalan versi dan kerjasama kod dalam pembangunan PHP? Nov 02, 2023 pm 01:35 PM

Bagaimana untuk melaksanakan kawalan versi dan kerjasama kod dalam pembangunan PHP? Dengan perkembangan pesat Internet dan industri perisian, kawalan versi dan kerjasama kod dalam pembangunan perisian telah menjadi semakin penting. Sama ada anda seorang pembangun bebas atau pasukan yang sedang membangun, anda memerlukan sistem kawalan versi yang berkesan untuk mengurus perubahan kod dan bekerjasama. Dalam pembangunan PHP, terdapat beberapa sistem kawalan versi yang biasa digunakan untuk dipilih, seperti Git dan SVN. Artikel ini akan memperkenalkan cara menggunakan alat ini untuk kawalan versi dan kerjasama kod dalam pembangunan PHP. Langkah pertama ialah memilih yang sesuai dengan anda

See all articles