Inhaltsverzeichnis
Beschreibung der Anforderungen
Anforderungsanalyse
Schlüsselwörter extrahieren
Basierend auf einer einfachen Analyse habe ich die folgende Tabellenstruktur gefunden: Werbetabelle (adv), Seitenkonfigurationstabelle (page_config) und Seitenwerbetabelle (page_adv)
Spezifische Implementierung
进一步优化
Heim Datenbank Redis Wie realisiert Redis Seitenaktualisierungen in Echtzeit und automatische Online-Updates?

Wie realisiert Redis Seitenaktualisierungen in Echtzeit und automatische Online-Updates?

Jun 03, 2023 pm 08:56 PM
redis

Beschreibung der Anforderungen

Einige Seiten müssen mit Anzeigen oder Bildern zur Veranstaltungswerbung konfiguriert werden. Anzeigen oder Aktivitäten müssen jederzeit online und offline geschaltet werden können, nach Ablauf automatisch offline geschaltet werden und zu gegebener Zeit automatisch online geschaltet werden.

Zum Beispiel: Die aktuelle Uhrzeit ist der 22.02.2019, 16:16:13 Uhr. Um die Preisabholungsaktivität auf der Zahlungsabschlussseite zu konfigurieren, muss die Aktivität pünktlich zum 10.03.2019 um 00:00:00 Uhr online sein und am 30.03.2019 23:59:59 Ende der Aktivität.

Daher besteht der gewünschte Effekt darin, dass nach der Konfiguration der Aktivität zu einem beliebigen Zeitpunkt, bevor die Aktivität online geht, die Seite automatisch zum angegebenen Zeitpunkt online geht. Es kann auch mehrere andere Aktivitäten oder Anzeigen auf jeder Seite geben, und die Online- und Offline-Zeiten können für verschiedene Seiten unterschiedlich sein. Auch andere Seiten müssen solche Funktionen implementieren, und die Aktivitäten zwischen den Seiten sind nicht unbedingt erforderlich das gleiche.

Anforderungsanalyse

Die Anforderungen sind nur ein paar Worte, also analysieren wir sie im Detail.

Schlüsselwörter extrahieren

  • Werbe- oder Event-Promotion-Bilder

  • Jederzeit online und offline, automatisch offline, wenn abgelaufen, und automatisch online, wenn es soweit ist

  • Die Anzahl der Anzeigen auf jeder Seite ist variabel

  • Unterschiedliche Anzeigen. Die Online- und Offline-Zeiten können unterschiedlich sein. Die Aktivitäten zwischen den Seiten sind nicht unbedingt gleich. Datenbankanalyse Seiten, einige Seiten Die Werbung kann gleich sein, das heißt, die Werbung wird wiederverwendet, daher muss eine Werbetabelle vorhanden sein.

  • 2. [Die Anzahl der Anzeigen auf jeder Seite ist variabel] [Die Online- und Offline-Zeiten verschiedener Anzeigen können unterschiedlich sein] [Aktivitäten zwischen Seiten sind nicht unbedingt gleich]
  • Eine Seite kann mit mehreren Anzeigen konfiguriert werden Davon sind eine Seitenkonfigurationstabelle und die Beziehungstabelle zwischen Anzeigen und Seiten, also die Seitenanzeigentabelle, erforderlich.

  • Die Seitenkonfigurationstabelle konfiguriert hauptsächlich die Anzahl der zu realisierenden Werbungen auf der Seite [die Anzahl der Werbungen auf jeder Seite ist variabel]. Die Seitenwerbungstabelle konfiguriert hauptsächlich die Online- und Offline-Zeit jeder Werbung auf der Seite, um [die Online- und Offline-Zeit verschiedener Anzeigen können unterschiedlich sein]

Basierend auf einer einfachen Analyse habe ich die folgende Tabellenstruktur gefunden: Werbetabelle (adv), Seitenkonfigurationstabelle (page_config) und Seitenwerbetabelle (page_adv)

Denken

Die auf diesen Seiten konfigurierten Anzeigen ändern sich für einen bestimmten Zeitraum nicht. Wenn die Anzahl der Seitenanfragen hoch ist, wird die Anzahl der Anzeigenabfragen sehr häufig sein, was zu einer unnötigen Belastung der Datenbank führt. Daher kann Caching eingeführt werden, um die Anzahl der Datenbankanforderungen zu reduzieren und den Datenbankdruck zu verringern. Hier wird Redis verwendet.

Wann wird es zwischengespeichert?

Sie können die Anzeigen, die sich in den Online- und Offline-Zeitintervallen befanden, asynchron in den Cache laden, wenn der Dienst gestartet wird, oder den Cache abrufen, wenn die Anfrage gestellt wird. Wenn der Cache nicht vorhanden ist, überprüfen Sie dies Bibliothek und legen Sie sie in den Cache. Die Caching-Zeit hängt von der Situation ab.

Hier besteht die Möglichkeit, die Werbekonfigurationsinformationen berechtigter Seiten beim Start des Projekts asynchron in Redis zu speichern. Diejenigen, die den angegebenen Zeitpunkt noch nicht erreicht haben, werden nicht zuerst in Redis abgelegt, wenn auf die Seite zugegriffen wird, um die Werbung zu laden. Redis wird zuerst überprüft. Wenn keine vorhanden ist, drücken Sie Bedingung (>=nowtime), um die Datenbank zu überprüfen und sie nach der Überprüfung in Redis zu speichern.
Wie realisiert Redis Seitenaktualisierungen in Echtzeit und automatische Online-Updates?Bestimmen Sie nach dem Abrufen der Ankündigungskonfigurationsinformationen von der Schnittstelle, ob die aktuelle Zeit innerhalb des konfigurierten Zeitintervalls liegt. Da mehrere Ankündigungen auf einer Seite konfiguriert sind, sind unterschiedliche Ankündigungszeiten unterschiedlich, daher ist es notwendig, die Zeiten zu iterieren und zurückzugeben Markieren Sie es und löschen Sie die Konfigurationsinformationen der gesamten Seite in Redis. (Oder wählen Sie nicht das Laden beim Start, sondern fügen Sie den Cache einfach hinzu, wenn der Benutzer dies anfordert. Die Methode in Schritt 1 unten wird jedoch beim Aktualisieren des Ladevorgangs verwendet, sodass er nicht gelöscht werden kann.)

Spezifische Implementierung

Schritt 1, Wenn das Projekt startet, speichern Sie zunächst die Konfigurationsinformationen für die Seitenanzeige in Redis

a, fragen Sie alle Seiten-IDs ab

SELECT pageId FROM page_config page_adv WHERE nowtime<p> und verknüpfen Sie die beiden Tabellen, um List<pageid> zu erhalten. Sie erhalten alle mit Anzeigen konfigurierten Seiten-IDs und die Anzeigen nicht Abgelaufen. </pageid></p><p>b. Fragen Sie das Werbebild und den Sprunglink ab, der der PegeId entspricht. </p><pre class="brush:php;toolbar:false">SELECT 字段名 FROM page_adv adv WHERE begintime <p></p>Schritt 2: Schreiben Sie eine Schnittstelle für das Front-End zum Abfragen von Seitenanzeigen. <h3></h3>Geschrieben gemäß der Standardkontrollschicht, der Geschäftsschicht und der Datenzugriffsschicht. Die Logik im ersten Schritt wird in der Geschäftsschicht vervollständigt. <h4></h4>Kontrollschicht: <p></p>Die Kontrollschicht empfängt den Parameter pageId, ruft die Geschäftsschicht auf, um die auf der entsprechenden Seite konfigurierten Werbeinformationen abzufragen, stellt fest, dass diese leer sind, und gibt direkt den Statuscode 0 zurück, dh es gibt keine Werbung und Das Frontend zeigt es nicht an. <p></p>Wenn es nicht leer ist, werden die Daten gemäß der Geschäftslogik verarbeitet (z. B. die URL von img plus Domänenname), und dann wird Statuscode 1 zurückgegeben und das Front-End zeigt die Werbung an. Die Steuerungsschicht kann hier auch eine Logik hinzufügen, um die Anzeigenliste zu iterieren, die aktuelle Zeit innerhalb der Anzeigenstartzeit zurückzugeben und diejenigen nicht zurückzugeben, die nicht vorhanden sind. Und solange eine Anzeige abläuft, wird dies der Anzeigenlisten-Cache dieser Seite tun gelöscht werden. Die Logik besteht darin, die abgelaufenen zu löschen. <p></p>Geschäftsschicht: <p></p>Rufen Sie zuerst den Cache ab und überprüfen Sie dann die Datenbank, um festzustellen, ob sie nicht leer ist (diese Seite ist mit Werbung konfiguriert), legen Sie sie in den Cache (pageId ist SCHLÜSSEL) und kehren Sie dann zurück. <h4></h4>Datenzugriffsschicht: <p></p>SQL:<p></p><pre class="brush:php;toolbar:false">SELECT 字段名 FROM page_config adv page_adv WHERE begintimeDrei-Tabellen-Gemeinschaftsabfrage, Abfrage der auf der aktuellen Seite konfigurierten Werbekampagneninformationen basierend auf der Seiten-ID (bereits innerhalb der Werbekampagnenzeit)<p></p>Schritt 3, Laden aktualisieren<p></p>Warum verwenden? Aktualisieren wird geladen? <p></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
Nach dem Login kopieren

或者干脆查page_config

SELECT pageId FROM page_config
Nach dem Login kopieren

目的是把已在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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie realisiert Redis Seitenaktualisierungen in Echtzeit und automatische Online-Updates?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

So löschen Sie Redis -Daten So löschen Sie Redis -Daten Apr 10, 2025 pm 10:06 PM

So löschen Sie Redis -Daten: Verwenden Sie den Befehl Flushall, um alle Schlüsselwerte zu löschen. Verwenden Sie den Befehl flushdb, um den Schlüsselwert der aktuell ausgewählten Datenbank zu löschen. Verwenden Sie SELECT, um Datenbanken zu wechseln, und löschen Sie dann FlushDB, um mehrere Datenbanken zu löschen. Verwenden Sie den Befehl del, um einen bestimmten Schlüssel zu löschen. Verwenden Sie das Redis-Cli-Tool, um die Daten zu löschen.

So lesen Sie Redis -Warteschlange So lesen Sie Redis -Warteschlange Apr 10, 2025 pm 10:12 PM

Um eine Warteschlange aus Redis zu lesen, müssen Sie den Warteschlangenname erhalten, die Elemente mit dem Befehl LPOP lesen und die leere Warteschlange verarbeiten. Die spezifischen Schritte sind wie folgt: Holen Sie sich den Warteschlangenname: Nennen Sie ihn mit dem Präfix von "Warteschlange:" wie "Warteschlangen: My-Queue". Verwenden Sie den Befehl LPOP: Wischen Sie das Element aus dem Kopf der Warteschlange aus und geben Sie seinen Wert zurück, z. B. die LPOP-Warteschlange: my-queue. Verarbeitung leerer Warteschlangen: Wenn die Warteschlange leer ist, gibt LPOP NIL zurück, und Sie können überprüfen, ob die Warteschlange existiert, bevor Sie das Element lesen.

So verwenden Sie den Befehl Redis So verwenden Sie den Befehl Redis Apr 10, 2025 pm 08:45 PM

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

So verwenden Sie Redis Lock So verwenden Sie Redis Lock Apr 10, 2025 pm 08:39 PM

Um die Operationen zu sperren, muss die Sperre durch den Befehl setNX erfasst werden und dann den Befehl Ablauf verwenden, um die Ablaufzeit festzulegen. Die spezifischen Schritte sind: (1) Verwenden Sie den Befehl setNX, um zu versuchen, ein Schlüsselwertpaar festzulegen; (2) Verwenden Sie den Befehl Ablauf, um die Ablaufzeit für die Sperre festzulegen. (3) Verwenden Sie den Befehl Del, um die Sperre zu löschen, wenn die Sperre nicht mehr benötigt wird.

So lesen Sie den Quellcode von Redis So lesen Sie den Quellcode von Redis Apr 10, 2025 pm 08:27 PM

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

So verwenden Sie die Befehlszeile der Redis So verwenden Sie die Befehlszeile der Redis Apr 10, 2025 pm 10:18 PM

Verwenden Sie das Redis-Befehlszeilen-Tool (REDIS-CLI), um Redis in folgenden Schritten zu verwalten und zu betreiben: Stellen Sie die Adresse und den Port an, um die Adresse und den Port zu stellen. Senden Sie Befehle mit dem Befehlsnamen und den Parametern an den Server. Verwenden Sie den Befehl Hilfe, um Hilfeinformationen für einen bestimmten Befehl anzuzeigen. Verwenden Sie den Befehl zum Beenden, um das Befehlszeilenwerkzeug zu beenden.

So lösen Sie Datenverlust mit Redis So lösen Sie Datenverlust mit Redis Apr 10, 2025 pm 08:24 PM

Zu den Ursachen für Datenverluste gehören Speicherausfälle, Stromausfälle, menschliche Fehler und Hardwarefehler. Die Lösungen sind: 1. Speichern Sie Daten auf Festplatten mit RDB oder AOF Persistenz; 2. Kopieren Sie auf mehrere Server, um eine hohe Verfügbarkeit zu erhalten. 3. Ha mit Redis Sentinel oder Redis Cluster; 4. Erstellen Sie Schnappschüsse, um Daten zu sichern. 5. Implementieren Sie Best Practices wie Persistenz, Replikation, Schnappschüsse, Überwachung und Sicherheitsmaßnahmen.

See all articles