Maison  >  Article  >  développement back-end  >  Scénarios dans lesquels Redis doit être utilisé dans des projets PHP

Scénarios dans lesquels Redis doit être utilisé dans des projets PHP

*文
*文original
2018-01-02 10:00:442615parcourir

Redis est une base de données de valeurs-clés de type journal open source écrite en langage ANSI C, prend en charge le réseau, peut être basée sur la mémoire et persistante, et fournit des API dans plusieurs langues. Aujourd'hui, nous allons examiner quelques scénarios d'application de PHP combinés avec Redis, j'espère que cela sera utile à tout le monde.

Avant-propos

Dans certains cas, certains étudiants ont expliqué pourquoi le type chaîne ne peut pas être utilisé. Le type chaîne est tout à fait réalisable

I. suggérer Veuillez jeter un œil à ma rubrique "Utilisation avancée de Redis", qui présente les avantages de l'utilisation des types de hachage

Comptage des dimensions du produit

Pour les produits, comptez les likes, les commentaires, les évaluations et les vues
En parlant de commerce électronique, les produits sont définitivement indissociables, et les produits accessoires ont différents comptes (j'aime, commentaires, évaluations, vues, etc.)
Les commandes Redis sont toutes atomique, vous pouvez facilement utiliser INCR, DECR et d'autres commandes pour compter.

Utiliser le type Redis : Hash Si vous n'êtes pas familier avec les types de données Redis, vous pouvez vous référer à
http://redis.io/topics/data-types-intro

product définit un produit clé : et définit une clé de hachage pour chaque valeur, telle que 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)

User dimension count

pour la dynamique de l'utilisateur nombre, comptage du nombre d'abonnés, de fans, de produits aimés, de publications, etc.
Le comptage des dimensions utilisateur et le comptage des dimensions du produit utilisent tous deux le hachage. Définissez une clé pour l'utilisateur et définissez une clé de hachage pour chaque valeur pour l'utilisateur :
Pour. exemple, le nombre de followers qui suivent


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

                                           / Attention, il peut exister dans un ensemble trié, et le score peut être horodaté
Le l'ensemble par défaut est trié par ordre croissant par scoreDe cette façon, pour trouver les amis communs de deux personnes, il vous suffira peut-être d'utiliser la commande d'intersection




Utilisé comme cache au lieu de memcached


$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')
Appliquer à la liste de produits, à la liste de commentaires, à la liste @tip

Comparé à la simple valeur-clé de memcached stockage, les nombreuses structures de données de Redis (liste, ensemble, ensemble trié, hachage, etc)

peuvent plus facilement mettre en cache diverses données commerciales et améliorer les performances Pas moins que Memcached.

REMARQUE : RPUSH pagewviews.user : EXPIRE pagewviews.user : 60 //Remarque pour mettre à jour le délai d'attente


Système anti-spam



appliquer le contrôle du spam sur les commentaires du système, la publication de produits et les publications sur les forums

En tant que site Web de commerce électronique, il est inévitable d'être attaqué par divers spams (commentaires de spam, publication de produits de spam, publicités, brossage du classement de votre propres produits, etc.)
Développer une série de règles anti-spam pour ces spams, dont certaines peuvent utiliser redis pour une analyse en temps réel

Par exemple : pas plus de 2 commentaires dans 1 minute, moins de 5 commentaires en 5 minutes, etc. (plus de mécanismes/règles doivent être combinés avec de la bave)

Un ensemble trié régulier enregistre les opérations de l'utilisateur au cours du dernier jour

(Pourquoi ne pas les enregistrer tous ? Économiser de la mémoire , toutes les opérations seront enregistrées dans le journal, puis utiliseront hadoop pour une analyse et des statistiques plus complètes)

Chronologie/Flux utilisateur

#获取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;;
Utilisé pour suivre des personnes, des sujets, des marques et des colonnes

redis est principalement utilisé ici, le cache utilise

dernière liste et classement


$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为准
pour enregistrer la dernière liste de produits que l'utilisateur vient d'aimer ou une liste de classement et d'autres scénarios commerciaux

La dernière liste de présentation de la structure d'ensemble triée par produits

Présentation de la structure de données liste-liste de classement

Notification de message
    $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
      )

    $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
    )
Utiliser la structure de hachage pour compter les scénarios commerciaux de notification de message


Utiliser Redis comme file d'attente de messages

$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
)
Utiliser la structure de données List de Redis pour implémenter des files d'attente de messages distribuées

Recommandations associées :

L'extension Redis de PHP depuis l'installation jusqu'à l'utilisation

PHP utilise Redis pour réaliser le partage d'instances de session

Utilisation du cache Phalapi et de l'extension Redis

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn