Redis 应用场景【商品拼团抢购】

使用到 redis-list
  • llen 命令:获取列表的长度,如果列表key不存在那么也是返回0,如果给的key不是一个列表类型会返回一个错误
  • lpush命令:将值插入到列表头部,如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
  • lpop命令:命令用于移除并返回列表的第一个元素。(具有原子性)

下面是用laravel写的一个简单demo


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;

class BookController extends Controller
{


    /**
     *  将商品库存加入redis列表
     */
    public function createStore()
    {
        $store = 10;//默认库存为10
        $hasOrder = Redis::llen('goods_store');//获取当前库存列队的长度
        $store = $store-$hasOrder;//剩余可预订
        while ($store)
        {
            Redis::lpush('goods_store',1);
            $store--;
        }
    }


    /**
     * 创建订单
     */
    public function createOrder()
    {
        if($this->checkStore())
        {
            //TODO 执行创建订单操作
            return '抢购成功';
        }
        else
        {
            //TODO 库存不足创建失败
            return '已经抢光了哦';
        }
    }

    /**
     * 检查库存
     */
    private function checkStore()
    {
       return Redis::lpop('goods_store');
    }



}

原文地址:https://segmentfault.com/a/1190000016251762

posted @ 2018-11-16 21:04  sfornt  阅读(694)  评论(0编辑  收藏  举报