redis实现购物车
購物車管理包含功能:提交商品到購物車、顯示購物車列表、刪除購物車里商品、修改購物車、清空購物車等等
1、 購物車的實現方式:
① 可以把購物車的數據,給存儲到 session 里面,一旦關閉瀏覽器,則商品數據就丟失;
②可以把購物車的數據,給存儲到 cookie 里面,可以長久的保存購物車里面的數據;
③可以把購物車的數據,給存儲到數據庫里面,可以長久的保存購物車里面的數據;
④可以把購物車的數據,給存儲到緩存里(memcache,redis),也可以長久的保存購物車的數據。
注:Session 可能會引起并發問題,如果腳本很短,這通常沒有問題。但如果腳本運行時間比較長,那就可能會產生問題。在現代 Web 應用程序開發中,有一個非常常見的情況,就是使用 AJAX 技術在同一個頁面內發送多個請求獲取數據。
如果這些請求都需要使用Session,那么第一個請求到達服務器后會取得 Session 鎖,其它請求就必須等待,所有請求將串行處理,即使它們彼此之間并沒有依賴關系。這將大大增加頁面的響應時間。
有一個方法可以避免這個問題,就是在使用完 Session 以后立即調用 session_write_close()方法關閉 Session。這樣 Session 鎖就會釋放,即使當前腳本還在等在處理。需要注意的是,調用該方法后,當前腳本就不能進一步操作 Session 了
2、實例:京東購物車的設置,如果用戶已經登錄,則把購物車數據保存到數據庫里面,如果沒有登錄,則把購物車的數據給保存到 cookie 里面,當登錄時,要判斷 cookie是否有購物車的數據,如果有,則把 cookie 里面的數據給移動到數據庫里面。
3、提交商品到購物車:在前臺模塊里新建一個 CartController 控制器,添加 addCart方法
實現代碼
<?php namespace app\index\controller;use think\Controller; use think\Validate;class Cart extends Controller {private $redis = null;public function __construct() //可以使用單例模式{$this->redis = new \Redis();$this->redis->connect('127.0.0.1','6379');}public function index(){$data = $_POST;//1.添加購物車操作測試/* $rule0 = ['userid'=> "require|number",'goodid'=> "require|number",'goodname'=>"require"];$validate = new Validate($rule0);if ($validate->check($data)){$userid = $_POST['userid'];$goodid = $_POST['goodid'];$goodname = $_POST['goodname'];//添加購物車操作//$this->addcart($userid,$goodid,$goodname);//單獨刪除購物車商品//$this->removecart($userid,$goodid,$goodname);}else{echo $validate->getError();}*///2.獲取購物車的所有商品$rule0 = ['userid'=> "require|number",];$validate = new Validate($rule0);if ($validate->check($data)){$userid = $_POST['userid'];//獲取購物車商品操作// $data = $this->getCartList($userid); var_dump($data);$this->delcart($userid);}else{echo $validate->getError();}}/*** 添加購物車* @param $userid 用戶id* @param $goodid 商品id* @param $goodname 商品名稱* (購物車沒有添加時間)*/public function addcart($userid,$goodid,$goodname){$hashKey = 'cart_'.$userid; //hash名稱$key = $goodid."_".$goodname; //hsah鍵名$this->redis->hincrby($hashKey,$key,1); //設置hash鍵名+1}/*** 用戶清空購物車* @param $userid 用戶id*/public function delcart($userid){$hashKey = 'cart_'.$userid;$this->redis->del($hashKey);}/***用戶移除購物車中某件商品(可以根據商品id獲取商品名稱,這里為了方便)* @param $userid* @param $goodid*/public function removecart($userid,$goodid,$goodname){$hashKey = 'cart_'.$userid; //hash名稱$key = $goodid."_".$goodname; //hsah鍵名$this->redis->hdel($hashKey,$key);}/****/public function getCartList($userid){$hashKey = 'cart_'.$userid; //hash名稱$data = $this->redis->hGetAll($hashKey);return $data;}}總結
以上是生活随笔為你收集整理的redis实现购物车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 必须掌握的Cookie知识点在这里
- 下一篇: php 解决json_encode中文U