Maison > base de données > Redis > le corps du texte

Solution de scénario de vente flash Redis

Libérer: 2020-05-25 09:02:27
avant
2798 Les gens l'ont consulté

Solution de scénario de vente flash Redis

Dans le développement de programmes à fort trafic, vous rencontrerez inévitablement des scénarios d'application à haute concurrence. La solution est grossièrement divisée en deux directions, la file d'attente des messages et le verrouillage.

redis implémente une version simple du noyau de la file d'attente des messages

        $key = 'quque';
        /**
         * 秒杀商品数量有限,预先存储到消息队列
         */
        public function qnquque() {
            for($i = 1 ; $i<=5 ;$i++) {
                $redis->lpush($key,$i);
            }
        }
        
        /**
         * 这里省略掉业务逻辑处理,默认业务逻辑处理完,出队列
         */
        public function dequque() {
            $redis->rpop($key);
            /**
             *  这里开始商品购买后的业务逻辑处理
             */
        }
Copier après la connexion

La file d'attente des messages est très efficace pour empêcher suracheté et survendu En tant que solution, pour réaliser les fonctions avancées de la file d'attente de messages, vous devez utiliser des outils de file d'attente de messages professionnels tels que (rabbitmq). Utilisateur Redis Il y a encore quelques lacunes dans la mise en œuvre de la file d'attente de messages par l'utilisateur. Vous pouvez trouver des articles. pour le compléter par vous-même. Je ne les présenterai pas un par un ici. Le plus gros problème reste la question des clusters distribués.

Le verrouillage optimiste de Redis implémente la fonction de suppression du flash

Ses avantages sont les suivants :

La file d'attente de messages consomme beaucoup de mémoire, nécessite 10 000 requêtes. 10 000 opérations retirées de la file d'attente. Il est facile de provoquer une surcharge instantanée des ressources mémoire

En utilisant la logique de verrouillage optimiste, la consommation du processeur est relativement faible et les ressources mémoire sont petites

    $redis = new redis();
    $result = $redis->connect(&#39;127.0.0.1&#39;, 6379);
    $cachekey = $redis->get("cachekey");
    $number = 100;   //抢购数量
    if($cachekey<$number){
        $redis->watch("cachekey");
        $redis->multi();
        
        //设置延迟,方便测试效果。
        sleep(5);
        //插入抢购数据
        $redis->hSet("cachekeyList","user_id_".mt_rand(1, 9999),time());
        $redis->set("cachekey",$cachekey+1);
        $result = $redis->exec();
        if($result){
            $cachekeyList = $redis->hGetAll("cachekeyList");
            echo "恭喜".$cachekeyList."抢购成功!<br/>";
        }else{
            echo "再接再厉";
            exit;
        }
    }
Copier après la connexion

Pour plus de connaissances sur Redis, veuillez faites attention au tutoriel d'introduction à Rediscolonne.

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal