Jadual Kandungan
Perihalan keperluan
Analisis Keperluan
Ekstrak kata kunci
Analisis pangkalan data
Berfikir
Pelaksanaan khusus
Langkah 1. Apabila memulakan projek, simpan dahulu maklumat konfigurasi pengiklanan halaman dalam Redis
Langkah 2, tulis iklan halaman pertanyaan antara muka untuk bahagian hadapan
Langkah 3, muat semula muat semula
进一步优化
Rumah pangkalan data Redis Bagaimanakah redis merealisasikan kemas kini halaman masa nyata dan kemas kini dalam talian automatik?

Bagaimanakah redis merealisasikan kemas kini halaman masa nyata dan kemas kini dalam talian automatik?

Jun 03, 2023 pm 08:56 PM
redis

Perihalan keperluan

Sesetengah halaman perlu dikonfigurasikan dengan iklan atau imej promosi acara Iklan atau aktiviti mesti boleh pergi dalam talian dan luar talian pada bila-bila masa, pergi ke luar talian secara automatik selepas tamat tempoh dan secara automatik pergi dalam talian. bila tiba masanya.

Contohnya: masa semasa ialah 22-2019 16:16:13, dan anda perlu mengkonfigurasi aktiviti pengumpulan hadiah pada halaman penyelesaian pembayaran Aktiviti mesti dalam talian tepat pada masanya pada 2019-3 -10 00:00:00 Pada 2019- Acara berakhir pada 3-30 23:59:59.

Oleh itu, kesan yang diingini ialah selepas mengkonfigurasi aktiviti pada bila-bila masa sebelum aktiviti masuk dalam talian, halaman akan secara automatik masuk dalam talian pada masa yang ditentukan. Mungkin juga terdapat beberapa aktiviti atau iklan lain Bilangan iklan pada setiap halaman adalah berubah-ubah, dan masa dalam talian dan luar talian mungkin berbeza untuk halaman lain juga perlu melaksanakan fungsi tersebut, dan aktiviti antara halaman tidak semestinya yang sama.

Analisis Keperluan

Keperluan hanyalah beberapa perkataan, jadi mari kita menganalisisnya secara terperinci.

Ekstrak kata kunci

  • Gambar promosi iklan atau acara

  • Dalam dan luar talian pada bila-bila masa, secara automatik di luar talian selepas tamat tempoh, dan secara automatik apabila tiba masanya Dalam Talian

  • Bilangan iklan pada setiap halaman berubah-ubah

  • Masa dalam talian dan luar talian bagi iklan yang berbeza boleh berbeza

  • Aktiviti antara halaman tidak semestinya sama

Analisis pangkalan data

1 [Pengiklanan atau gambar promosi acara]

Untuk menjadi Halaman yang berbeza mempunyai iklan yang berbeza, dan iklan di beberapa halaman mungkin sama, iaitu iklan akan digunakan semula, jadi mesti ada jadual iklan.

2. [Bilangan iklan pada setiap halaman adalah berubah-ubah] [Masa dalam talian dan luar talian bagi iklan yang berbeza boleh berbeza] [Aktiviti antara halaman tidak semestinya sama]

Berbilang halaman boleh dikonfigurasikan Setiap iklan mesti mempunyai jadual konfigurasi halaman, serta jadual hubungan antara iklan dan halaman, iaitu jadual iklan halaman.

Jadual konfigurasi halaman mengkonfigurasi terutamanya bilangan iklan pada halaman untuk direalisasikan [bilangan iklan pada setiap halaman adalah berubah-ubah]. untuk merealisasikan [iklan yang berbeza dalam talian dan luar talian] Masa boleh berbeza】

Berdasarkan analisis mudah, saya sampai kepada struktur jadual berikut: jadual pengiklanan (adv), jadual konfigurasi halaman (page_config) dan jadual pengiklanan halaman (page_adv)

Bagaimanakah redis merealisasikan kemas kini halaman masa nyata dan kemas kini dalam talian automatik?

Berfikir

Iklan yang dikonfigurasikan pada halaman ini tidak akan berubah untuk satu tempoh masa Jika bilangan permintaan halaman adalah tinggi, bilangan pertanyaan iklan akan menjadi sangat kerap, menyebabkan tekanan yang tidak perlu. pada pangkalan data. Oleh itu, caching boleh diperkenalkan untuk mengurangkan bilangan permintaan pangkalan data dan melegakan tekanan pangkalan data. Redis digunakan di sini.

Bilakah ia akan dicache?

Anda boleh memilih untuk memuatkan iklan secara tak segerak yang telah berada dalam selang masa dalam talian dan luar talian ke dalam cache apabila perkhidmatan bermula, atau memilih untuk mengambil cache apabila permintaan dibuat Jika cache tidak wujud , kemudian semak perpustakaan dan letakkan dalam cache. Masa caching bergantung pada keadaan.

Pilihan di sini adalah untuk menyimpan maklumat konfigurasi pengiklanan halaman yang layak ke dalam Redis apabila projek itu dimulakan tidak akan dimasukkan ke dalam Redis terlebih dahulu iklan tersebut, Redis akan disemak dahulu Jika tidak, semak pangkalan data mengikut keadaan (>=sekarang), dan simpan dalam Redis selepas menyemak.

Setelah mendapat maklumat konfigurasi iklan daripada antara muka, tentukan sama ada masa semasa berada dalam selang masa yang dikonfigurasikan Memandangkan berbilang iklan dikonfigurasikan pada halaman, masa iklan yang berbeza juga berbeza, jadi perlu diulang. dan kembalikan yang sepadan. Tandakan mana-mana yang telah tamat tempoh, dan kemudian padam maklumat konfigurasi seluruh halaman dalam Redis. (Atau jangan pilih untuk memuatkan semasa permulaan, dan tambahkan cache apabila pengguna memintanya. Walau bagaimanapun, kaedah dalam langkah 1 di bawah akan digunakan apabila memuatkan semula beban, jadi ia tidak boleh dipadamkan)

Pelaksanaan khusus

Langkah 1. Apabila memulakan projek, simpan dahulu maklumat konfigurasi pengiklanan halaman dalam Redis

a Tanya semua pageId

SELECT pageId FROM page_config page_adv WHERE nowtime<p> dan sambungkannya dalam dua jadual untuk mendapatkan. Senarai<pageid> Semua keputusan diperolehi Ia adalah pageId yang dikonfigurasikan dengan iklan dan iklan belum tamat tempoh. </pageid></p><p>b. Tanya imej pengiklanan dan pautan lompat yang sepadan dengan pegeId</p><pre class="brush:php;toolbar:false">SELECT 字段名 FROM page_adv adv WHERE begintime<p>Kemudian senaraikan maklumat konfigurasi yang ditemui<adv> (tiada operasi akan dilakukan jika ia kosong), dan gunakan pageId sebagai KEY ke dalam cache. </adv></p><h4 id="Langkah-tulis-iklan-halaman-pertanyaan-antara-muka-untuk-bahagian-hadapan">Langkah 2, tulis iklan halaman pertanyaan antara muka untuk bahagian hadapan </h4><p>Ditulis mengikut lapisan kawalan standard, lapisan perniagaan dan lapisan akses data Logik dalam langkah pertama selesai lapisan perniagaan. </p><p>Lapisan kawalan: </p><p>Lapisan kawalan mengambil parameter pageId dan memanggil lapisan perniagaan untuk menanyakan maklumat pengiklanan yang dikonfigurasikan pada halaman yang sepadan Jika ia kosong, ia akan mengembalikan kod status 0 secara langsung , iaitu tiada iklan dan bahagian hadapan tidak akan memaparkannya. </p><p> Jika ia tidak kosong, data akan diproses mengikut logik perniagaan (seperti URL img ditambah nama domain), dan kemudian kod status 1 akan dikembalikan, dan bahagian hadapan akan memaparkan iklan . Lapisan kawalan juga boleh menambah logik di sini untuk mengulangi senarai iklan, mengembalikan masa semasa dalam masa mula iklan dan tidak mengembalikan yang tiada di sana Dan selagi iklan tamat tempoh, cache senarai iklan halaman ini akan dibersihkan. Logiknya adalah untuk membersihkan yang telah tamat tempoh. </p><p>Lapisan perniagaan: </p><p>Dapatkan cache dahulu, dan kemudian semak pangkalan data untuk menentukan bahawa ia tidak kosong (halaman ini dikonfigurasikan dengan iklan), letakkannya dalam cache (pageId ialah KEY ), dan kemudian kembali. </p><p>Lapisan akses data: </p><p>SQL:</p><pre class="brush:php;toolbar:false">SELECT 字段名 FROM page_config adv page_adv WHERE begintime<p>Tiga pertanyaan bersama jadual, tanya maklumat kempen pengiklanan yang dikonfigurasikan pada halaman semasa berdasarkan pageId (sudah dalam masa kempen pengiklanan )</p><h4 id="Langkah-muat-semula-muat-semula">Langkah 3, muat semula muat semula</h4><p>Mengapa menggunakan muat semula muat semula? </p><p>因为有这样的场景:给页面A配置了一个广告(当前时间在广告的起始时间内),那么这个页面的广告已经在缓存里了,假如此时A页面要新加一个广告,在后台配置后如果不做其他操作,这个广告不会显示(假设缓存时间较长,为一天),因为库更新了,缓存没有同步更新。</p><p>解决方案</p><p>使用Redis的发布订阅机制实现缓存的刷新加载,使新配置的广告及时能够显示。刷新加载的回调方法即第1步中的方法。</p><h3 id="进一步优化">进一步优化</h3><p>想一想,目前的实现存在什么问题?</p><p>存在的问题</p><p>假如有页面需要配置广告,但是还没有配(前端已经开发完上线,每次都会调接口查广告信息),那么数据库肯定查不到,缓存也没有。如果这个页面访问量很大,那么缓存没命中就查库,这样对库的压力就会很大,这就是缓存穿透,请求上来了很容易击垮数据库。那怎么办呢?</p><p>解决方案</p><p>当页面没有配置广告时,在缓存存标志,查询时先看标志,在决定是否往下走。</p><p>具体方案</p><p>这时,上面的第1步就要改了。</p><p>1、首先改第1步的步骤a的SQL,把所有的pageId都查询出来。</p><p>使用左连接</p><pre class="brush:php;toolbar:false">SELECT pageId FROM page_config LEFT JOIN page_adv ON ...  GROUP BY pageId
Salin selepas log masuk

或者干脆查page_config

SELECT pageId FROM page_config
Salin selepas log masuk

目的是把已在page_config表中配置,但关系表中page_adv未配置广告的pageId也查出来,这样才能给未配置广告的pageId在缓存里放标志

2、第1步的步骤b的SQL改为

SELECT 字段名 FROM page_adv adv WHERE nowtime<p>然后把查到的配置信息放入缓存之前判断【为空时的不做操作】改为【为空时存入一个标志】假如这个标志KEY为pageId+"_EMPTY_FLAG",value为"DB_IS_NULL"</p><p>为什么只判断小于结束时间</p><p>因为如果该页面配置的广告开始时间大于当前时间,那么这个是查不到的,会被处理为DATABASE_IS_NULL,如果在这个标志还没失效之前就到了配置的开始时间了,那么这个广告不会被展示。所有要让未到开始时间的也放入缓存,然后让控制层去判断在不在时间区间。</p><p>3、所以要在第2步也修改一下</p><p>在业务层里取缓存中的广告列表之前,先从缓存取pageId+"EMPTY_FLAG"的value判断为"DB_IS_NULL"直接返回空,这样就能避免缓存穿透的问题了。</p><p>继续修改第2步的业务层,查库的SQL同样要改:</p><pre class="brush:php;toolbar:false">SELECT 字段名 FROM page_config adv page_adv WHERE nowtime<p>然后判断为空的话,同上面的黄字那样处理。</p><p>4、最后,第3步的刷新加载调的是第1步的方法,不用改。<br><br>当然这个缓存穿透的优化方案只是其中一种。还可以这样:</p><p>1、控制层拦截:根据pageId查询page_adv表,查不到说明没配置,直接返回。</p><p>2、page_config 表增加字段,表示当前页面已经配置的广告个数,默认0,每配置一个该字段加1,把大于0的pageId缓存起来,调接口时前判断在不在缓存里。</p>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah redis merealisasikan kemas kini halaman masa nyata dan kemas kini dalam talian automatik?. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

Cara membersihkan data redis Cara membersihkan data redis Apr 10, 2025 pm 10:06 PM

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.

Cara Membaca Gilir Redis Cara Membaca Gilir Redis Apr 10, 2025 pm 10:12 PM

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

Cara menggunakan perintah redis Cara menggunakan perintah redis Apr 10, 2025 pm 08:45 PM

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Cara menggunakan kunci redis Cara menggunakan kunci redis Apr 10, 2025 pm 08:39 PM

Menggunakan REDIS untuk mengunci operasi memerlukan mendapatkan kunci melalui arahan SETNX, dan kemudian menggunakan perintah luput untuk menetapkan masa tamat tempoh. Langkah-langkah khusus adalah: (1) Gunakan arahan SETNX untuk cuba menetapkan pasangan nilai utama; (2) Gunakan perintah luput untuk menetapkan masa tamat tempoh untuk kunci; (3) Gunakan perintah DEL untuk memadam kunci apabila kunci tidak lagi diperlukan.

Cara membaca kod sumber redis Cara membaca kod sumber redis Apr 10, 2025 pm 08:27 PM

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Cara menggunakan baris arahan redis Cara menggunakan baris arahan redis Apr 10, 2025 pm 10:18 PM

Gunakan alat baris perintah redis (redis-cli) untuk mengurus dan mengendalikan redis melalui langkah-langkah berikut: Sambungkan ke pelayan, tentukan alamat dan port. Hantar arahan ke pelayan menggunakan nama arahan dan parameter. Gunakan arahan bantuan untuk melihat maklumat bantuan untuk arahan tertentu. Gunakan perintah berhenti untuk keluar dari alat baris arahan.

Cara menyelesaikan kehilangan data dengan redis Cara menyelesaikan kehilangan data dengan redis Apr 10, 2025 pm 08:24 PM

Kerugian data REDIS termasuk kegagalan memori, gangguan kuasa, kesilapan manusia, dan kegagalan perkakasan. Penyelesaiannya adalah: 1. 2. Salin ke beberapa pelayan untuk ketersediaan tinggi; 3. Ha dengan redis sentinel atau cluster redis; 4. Buat gambar untuk membuat sandaran data; 5. Melaksanakan amalan terbaik seperti kegigihan, replikasi, gambar, pemantauan, dan langkah -langkah keselamatan.

See all articles