// 服务层

namespace Common\Service;

use Vendor\Func\Red;

class CartService extends CommonService {

protected $redis;

protected $pre_key;

public function __construct()

{

parent::__construct();

$this->redis = Red::create();

$this->pre_key = C('USER.CART').C('APPID').':';

}

/**

* 加入购物车,移除购物车,但是不会删除

* @param $openid

* @param $sku_id

* @param int $count

* @return mixed

*/

public function add($openid, $sku_id, $count = 1)

{

$key = $this->pre_key.$openid;

// 可增可减

return $this->redis->hIncrBy($key, $sku_id, $count);

}

/**

* 批量添加

* @param $openid

* @param array $data

* @return mixed

*/

public function addBatch($openid, array $data)

{

$key = $this->pre_key.$openid;

// 批量执行

$r = $this->redis->multi(\Redis::PIPELINE);

foreach ($data as $k => $v) {

$r = $r->hIncrBy($key, $k, $v);

}

return $this->redis->exec();

}

/**

* 删除购物车单个商品

* @param $openid

* @param $sku_id

* @return mixed

*/

public function delete($openid, $sku_id)

{

$key = $this->pre_key.$openid;

return $this->redis->hdel($key, $sku_id);

}

/**

* 删除购物车多个商品

* @param $openid

* @param $sku_ids

* @return bool

*/

public function deleteBatch($openid, $sku_ids)

{

$key = $this->pre_key.$openid;

foreach ($sku_ids as $k => $v) {

$this->redis->hdel($key, $v);

}

return true;

}

/**

* 检测商品是否已在购物车中

* @param $openid

* @param $sku_id

* @return mixed

*/

public function exists($openid, $sku_id)

{

$key = $this->pre_key.$openid;

return $this->redis->hExists($key, $sku_id);

}

/**

* 清空购物车

* @param $openid

* @return mixed

*/

public function deleteAll($openid)

{

$key = $this->pre_key.$openid;

return $this->redis->del($key);

}

/**

* 判断购物车中是否有数据,有多少

* @param $openid

* @return mixed

*/

public function hasUserCart($openid)

{

$key = $this->pre_key.$openid;

return $this->redis->hLen($key);

}

/**

* 设置为固定数量

* @param $openid

* @param $sku_id

* @param $count

* @return bool

*/

public function setCount($openid, $sku_id, $count)

{

$key = $this->pre_key.$openid;

$status = $this->redis->hset($key, $sku_id, $count);

if ((int)$status === -1) {

return false;

}

return true;

}

/**

* 获取购物车中单个商品的数量

* @param $openid

* @param $sku_id

* @return mixed

*/

public function getCount($openid, $sku_id)

{

$key = $this->pre_key.$openid;

return $this->redis->hget($key, $sku_id);

}

/**

* 获取全部数据

* @param $openid

* @return mixed

*/

public function getAll($openid)

{

$key = $this->pre_key.$openid;

return $this->redis->hgetall($key);

}

/**

* 获取全部商品id

* @param $openid

* @return mixed

*/

public function getAllKeys($openid)

{

$key = $this->pre_key.$openid;

return $this->redis->hkeys($key);

}

/**

* 获取全部商品数量

* @param $openid

* @return mixed

*/

public function getAllVal($openid)

{

$key = $this->pre_key.$openid;

return $this->redis->hvals($key);

}

}

php 购物车封装代码,PHP中封装Redis购物车功能相关推荐

  1. 更新pcb封装导入_PCB中3D应用相关功能详解

    如果PCB Layout工程师能够在设计过程中,使用设计工具直观地看到自己设计板子的实际情况,将能够有效的帮助他们的工作.尤其现在PCB板的设计越来越复杂,密度越来越高,如果能够洞察多层板内部则可以帮 ...

  2. java消息提示代码_JAVA中实现消息提示功能代码 .

    注(在MyEclipse中新建一个jsp文件然后把代码复制到当中即可!) String path = request.getContextPath(); String basePath = reque ...

  3. php 查找文件 替换内容,关于php:文件中查找和替换功能困扰

    我知道这不是编程问题吗? 但是我需要另一个有关在PHP代码编辑器中查找和替换功能的帮助. 我正在使用eclipse和Dreamweaver,我有大约650个php文件,并希望替换所有文件中的字符串而无 ...

  4. openresty开发系列27--openresty中封装redis操作

    openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...

  5. 封装成vla函数_不知道怎么封装代码?看看这几种设计模式吧!

    为什么要封装代码? 我们经常听说:"写代码要有良好的封装,要高内聚,低耦合".那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处: 封装好的代码,内部变量不会污染外部 ...

  6. 基于java封装的语言_封装在java中的应用

    封装在java中的应用 发布时间:2020-07-01 11:53:47 来源:亿速云 阅读:92 作者:Leah 本篇文章给大家分享的是有关封装在java中的应用,小编觉得挺实用的,因此分享给大家学 ...

  7. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法

    在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...

  8. 笔记三 vue中封装复用 过滤器 自定义组件 vue中component选项

    题外话: npm install -g express-generator npm安装express框架 封装复用 Vue中关于封装复用的内容,属于Vue中的进阶知识,在实战中对开发者的抽象和泛化能力 ...

  9. Java反射机制:表单数据自动封装到JavaBean中【IT】

    2019独角兽企业重金招聘Python工程师标准>>>   (2010-07-09 19:50:18) 转载▼ 标签: it 分类: IT路人丁 利用Java的反射机制,模拟一个简单 ...

最新文章

  1. Node的异步与java的异步_node中异步IO的理解
  2. html div 隐藏滚动条样式,div滚动条样式隐藏与显示
  3. js实现上传图片及时预览
  4. 【libcudnn】ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory
  5. Ubuntu安装OpenTSDB
  6. Vue-Router路由Vue-CLI脚手架和模块化开发 之 使用props替代路由对象的方式获取参数...
  7. js高级学习笔记(b站尚硅谷)-3-对象
  8. pdf复制文字时对于回车的处理
  9. 【FPGA】【转载】跨越鸿沟:同步世界的异步信号
  10. Matlab影像像素坐标得到经纬度/经纬度转影像坐标(已知经纬度获取影像DN值)
  11. 怎样才能让datetime字段去掉最后面的小时、分、秒
  12. 交叉编译ortp、osip2、eXosip2、mediastreamer2及其附带的库实现SIP软电话
  13. 【元胞自动机】基于元胞自动机模拟交通事故道路通行量matlab源码
  14. AWS中联网Amazon VPC相关概念
  15. 初级计算机硬件试题,新版初级计算机操作员应知考试试题
  16. 内网畅外网墙--再聊Nginx访问权限管理
  17. 【每天1分钟】MarkDown语法学习之分割线
  18. Python股票监控机器人,加强版!
  19. 基于PCA的图像压缩实现
  20. bootstrap-table 添加行保留原数据

热门文章

  1. 有效数据外含有额外数据_Excel|应用数据有效性规范数据录入
  2. minheight能继承吗_民法典亮点盘点 | 侄子能继承叔叔的遗产吗?
  3. 信号中断 与 慢系统调用
  4. Linux下gSOAP的使用 (c++)
  5. Linux 定时器设置
  6. linux无后缀名程序运行,linux – 如何在Ubuntu上运行无扩展(也许是ELF)文件?
  7. html5 css登录注册实现,html5+css3实现一款注册表单实例
  8. 【转】ABP源码分析八:Logger集成
  9. EasyUI学习总结(一)——EasyUI入门
  10. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程