Heim  >  Artikel  >  Backend-Entwicklung  >  Szenarien, in denen Redis in PHP-Projekten verwendet werden muss

Szenarien, in denen Redis in PHP-Projekten verwendet werden muss

*文
*文Original
2018-01-02 10:00:442663Durchsuche

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




Wird als Cache anstelle von Memcached verwendet


$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.

HINWEIS: RPUSH pagewviews.user: EXPIRE pagewviews.user: 60 //Beachten Sie, dass das Update-Timeout


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

Zum Beispiel: nicht mehr als 2 Kommentare in 1 Minute, weniger als 5 Kommentare in 5 Minuten usw. (mehr Mechanismen/Regeln müssen mit Drools kombiniert werden)

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



Wird verwendet um Personen, Themen, Marken und Kolumnen zu folgen
#获取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(&#39;user:1000:comment&#39;,time()-5 ,time()))<2)
echo &#39;5秒之内不能评论2次&#39;;

Redis wird hier hauptsächlich verwendet Cache verwendet

Neueste Liste & Rangliste


um die neueste Liste der Produkte aufzuzeichnen, die dem Benutzer gerade gefallen haben, oder eine Rangliste und andere Geschäftsszenarien
$redis->zAdd(&#39;user:2000:feed:topic&#39;, time(), &#39;13&#39;);
//score 为timestamp uid为2000的用户关注tid为13的topic

$redis->expire(&#39;user:2000:feed:topic&#39;,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(&#39;user:1000:product:like&#39;, time(), &#39;3002&#39;);
    $redis->zAdd(&#39;user:1000:product:like&#39;, time(), &#39;3001&#39;);
    $redis->zAdd(&#39;user:1000:product:like&#39;, time(), &#39;3004&#39;);
    $redis->zAdd(&#39;user:1000:product:like&#39;, time(), &#39;3003&#39;);
    
    $redis->zRange(&#39;user:1000:product:like&#39;, 0, -1,true); 
    #默认喜欢时间升序序排列
    #
      Array(
        [3002] => 1463565179
        [3001] => 1463565189
        [3004] => 1463565199
        [3003] => 1463565209
      )
    
    $redis->zRevRange(&#39;user:1000:product:like&#39;, 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(&#39;user:1000:product:like&#39;, &#39;3002&#39;);
    $redis->lPush(&#39;user:1000:product:like&#39;, &#39;3001&#39;);
    $redis->lPush(&#39;user:1000:product:like&#39;, &#39;3004&#39;);
    $redis->lPush(&#39;user:1000:product:like&#39;, &#39;3003&#39;);
    
    $redis->lRange(&#39;user:1000:product:like&#39;, 0, -1);
    
    Array
    (
      [0] => 3003
      [1] => 3004
      [2] => 3001
      [3] => 3002
    )


Verwenden Sie Redis als Nachrichtenwarteschlange

Verwenden Sie die Listendatenstruktur von Redis, um verteilte Nachrichtenwarteschlangen zu implementieren
$redis->hSet(&#39;user:1000:message:notice&#39;, &#39;system&#39;, 1);
#设置1条未读系统消息

$redis->hIncrBy(&#39;user:1000:message:notice&#39;, &#39;system&#39;, 1);
#未读系统消息+1

$redis->hSet(&#39;user:1000:message:notice&#39;, &#39;comment&#39;, 1);
#设置1条未读评论

$redis->hIncrBy(&#39;user:1000:message:notice&#39;, &#39;comment&#39;, 1);
#未读评论+1

$redis->hGetAll(&#39;user:1000:message:notice&#39;);
#查看所有消息通知数量

Array
(
  [system] => 2
  [comment] => 2
)

Verwandte Empfehlungen:

PHPs Redis-Erweiterung von der Installation bis zur Verwendung

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!

Stellungnahme:
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