Heim >Backend-Entwicklung >PHP-Tutorial >Szenarien, in denen Redis in PHP-Projekten verwendet werden muss
Redis ist eine Open-Source-Schlüsselwertdatenbank vom Protokolltyp, die in der ANSI-C-Sprache geschrieben ist, Netzwerke unterstützt, speicherbasiert und persistent sein kann und APIs in mehreren Sprachen bereitstellt. Heute werfen wir einen Blick auf einige Anwendungsszenarien von PHP in Kombination mit Redis. Ich hoffe, dass es für alle hilfreich ist.
Vorwort
In einigen Fällen sagten einige Schüler, warum der String-Typ nicht verwendet werden kann.
I Bitte werfen Sie einen Blick auf meine Kolumne „Erweiterte Nutzung von Redis“, in der die Vorteile der Verwendung von Hash-Typen vorgestellt werden
Produktdimensionszählung
Für Produkte: Zählen Sie die Anzahl der Likes, Kommentare, Bewertungen und Ansichten
Apropos E-Commerce: Produkte sind definitiv untrennbar miteinander verbunden, und zufällige Produkte haben unterschiedliche Zählwerte (Anzahl der Likes, Bewertungen, Bewertungen, Ansichten usw.)
Redis-Befehle sind alle atomar, Sie können problemlos INCR, DECR und andere Befehle zum Zählen verwenden.
Verwenden Sie den Redis-Typ: Hash. Wenn Sie mit Redis-Datentypen nicht vertraut sind, können Sie auf
http://redis.io/topics/data-types-intro
zurückgreifen „product“ definiert ein Schlüsselprodukt: und definiert einen Hashkey für jeden Wert, z. B. „like number“ like_num
$redis->hSet('product:123', 'like_num ', 5); // 添加 id为123的商品 like_num 为5 $redis->hIncrBy('product:123', 'like_num ', 1); // 添加 id为123的商品like_num +1 $redis->hGetAll('product:123'); // 获取id为123的商品相关信息 array('like_num '=> 1)
Anzahl der Benutzerdimensionen
für die Benutzerdynamik Anzahl, Zählen der Anzahl der Follower, Fans, Likes von Produkten, Beiträgen usw.
Benutzerdimensionszählung und Produktdimensionszählung verwenden beide Hash. Definieren Sie einen Schlüssel für Benutzer und definieren Sie einen Hashkey für jeden Wert für Benutzer:
Für Beispiel: Die Anzahl der Follower folgt
$redis->hSet('user:100000', 'follow ', 5); // 添加uid为10000的用户follow 为5 $redis->hIncrBy('user:100000', 'follow ', 1); // 更新uid为10000的用户follow +1 $redis->hGetAll('user:100000'); // 获取uid为10000的用户 array('like_num '=> 1)
/ Achtung, es kann in einem sortierten Satz vorliegen und die Punktzahl kann ein Zeitstempel sein
Die Der Standardsatz ist in aufsteigender Reihenfolge nach Punktzahl sortiertUm die gemeinsamen Freunde zweier Personen zu finden, müssen Sie möglicherweise nur den Schnittpunktbefehl verwenden
$redis->zAdd('user:1000:follow', 1463557212, '1001'); #uid为1000用户关注uid为1001 , score值设定时间戳1463557212 $redis->zAdd('user:1000:follow', 1463557333, '1002'); $redis->zAdd('user:2000:follow', 1463577568, '1001'); $redis->zAdd('user:2000:follow', 1463896964, '1003'); #uid为2000用户关注1001和1003用户 , score值设定时间戳 $redis->zInter('com_fllow:1000:2000', array('user:1000:follow', 'user:2000:follow')); #对集合'user:1000:follow'和'user:2000:follow'取交集'com_fllow:1000:2000' #获得共同关注的uid $redis->zRange('com_fllow:1000:2000',0,-1); // 获取全部集合元素 #array('10001','10002')Auf Produktliste, Kommentarliste, @tip-Liste anwenden
Verglichen mit dem einfachen Schlüsselwert von Memcached Die zahlreichen Datenstrukturen von Redis (Liste, Satz, sortierter Satz, Hash usw.)
können verschiedene Geschäftsdaten bequemer zwischenspeichern und die Leistung verbessern. Nicht weniger als Memcached.
Anti-Spam-System
erfolgt Es sollte eine Spam-Kontrolle auf Systemkommentare, Produktbeiträge und Forenbeiträge angewendet werden
Als E-Commerce-Website ist es unvermeidlich, von verschiedenen Spam-Mails angegriffen zu werden (Spam-Kommentare, Veröffentlichung von Spam-Produkten, Werbung, Beeinträchtigung des Rankings). Ihrer eigenen Produkte usw.) Entwickeln Sie eine Reihe von Anti-Spam-Regeln für diese Spams, von denen einige Redis für die Echtzeitanalyse verwenden können
Reguläre sortierte Menge zeichnet Benutzervorgänge am letzten Tag auf
(Warum nicht alle aufzeichnen? Speichern Speicher, alle Vorgänge werden protokolliert und dann mit Hadoop für umfassendere Analysen und Statistiken verwendet) Benutzer-Timeline/Feeds#获取5秒内操作记录 $res = $redis->zRangeByScore('user:1000:comment', time() - 5, time()); #判断5秒内不能评论 if (!$res) { $redis->zAdd('user:1000:comment', time(), '评论内容'); } else { echo '5秒之内不能评论'; } #5秒内评论不得超过2次 if($redis->zRangeByScore('user:1000:comment',time()-5 ,time())==1) echo '5秒之内不能评论2次'; #5秒内评论不得少于2次 if(count($redis->zRangeByScore('user:1000:comment',time()-5 ,time()))<2) echo '5秒之内不能评论2次';
Redis wird hier hauptsächlich verwendet Cache verwendet
Neueste Liste & Rangliste
$redis->zAdd('user:2000:feed:topic', time(), '13'); //score 为timestamp uid为2000的用户关注tid为13的topic $redis->expire('user:2000:feed:topic',24*60*60); #关注有效期为24小时 # ttl 30天之内按秒数计算 30天之外以timestamp为准
Die neueste Liste der Produkte, sortierte Set-Struktur-Präsentation
Ranglisten-Listen-Datenstrukturpräsentation
Nachrichtenbenachrichtigung
$redis->zAdd('user:1000:product:like', time(), '3002'); $redis->zAdd('user:1000:product:like', time(), '3001'); $redis->zAdd('user:1000:product:like', time(), '3004'); $redis->zAdd('user:1000:product:like', time(), '3003'); $redis->zRange('user:1000:product:like', 0, -1,true); #默认喜欢时间升序序排列 # Array( [3002] => 1463565179 [3001] => 1463565189 [3004] => 1463565199 [3003] => 1463565209 ) $redis->zRevRange('user:1000:product:like', 0, -1,true); #以喜欢时间降序排列 # Array ( [3003] => 1463565424 [3004] => 1463565414 [3001] => 1463565404 [3002] => 1463565394 )Verwenden Sie die Hash-Struktur, um Geschäftsszenarien für Nachrichtenbenachrichtigungen zu zählen
$redis->lPush('user:1000:product:like', '3002'); $redis->lPush('user:1000:product:like', '3001'); $redis->lPush('user:1000:product:like', '3004'); $redis->lPush('user:1000:product:like', '3003'); $redis->lRange('user:1000:product:like', 0, -1); Array ( [0] => 3003 [1] => 3004 [2] => 3001 [3] => 3002 )
Verwenden Sie Redis als Nachrichtenwarteschlange
$redis->hSet('user:1000:message:notice', 'system', 1); #设置1条未读系统消息 $redis->hIncrBy('user:1000:message:notice', 'system', 1); #未读系统消息+1 $redis->hSet('user:1000:message:notice', 'comment', 1); #设置1条未读评论 $redis->hIncrBy('user:1000:message:notice', 'comment', 1); #未读评论+1 $redis->hGetAll('user:1000:message:notice'); #查看所有消息通知数量 Array ( [system] => 2 [comment] => 2 )
Verwandte Empfehlungen:
PHP verwendet Redis, um die gemeinsame Nutzung von Sitzungsinstanzen zu realisieren
Verwendung von Phalapi-Cache und Redis-Erweiterung
Das obige ist der detaillierte Inhalt vonSzenarien, in denen Redis in PHP-Projekten verwendet werden muss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!