php 购物车封装代码,PHP中封装Redis购物车功能
// 服务层
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购物车功能相关推荐
- 更新pcb封装导入_PCB中3D应用相关功能详解
如果PCB Layout工程师能够在设计过程中,使用设计工具直观地看到自己设计板子的实际情况,将能够有效的帮助他们的工作.尤其现在PCB板的设计越来越复杂,密度越来越高,如果能够洞察多层板内部则可以帮 ...
- java消息提示代码_JAVA中实现消息提示功能代码 .
注(在MyEclipse中新建一个jsp文件然后把代码复制到当中即可!) String path = request.getContextPath(); String basePath = reque ...
- php 查找文件 替换内容,关于php:文件中查找和替换功能困扰
我知道这不是编程问题吗? 但是我需要另一个有关在PHP代码编辑器中查找和替换功能的帮助. 我正在使用eclipse和Dreamweaver,我有大约650个php文件,并希望替换所有文件中的字符串而无 ...
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- 封装成vla函数_不知道怎么封装代码?看看这几种设计模式吧!
为什么要封装代码? 我们经常听说:"写代码要有良好的封装,要高内聚,低耦合".那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处: 封装好的代码,内部变量不会污染外部 ...
- 基于java封装的语言_封装在java中的应用
封装在java中的应用 发布时间:2020-07-01 11:53:47 来源:亿速云 阅读:92 作者:Leah 本篇文章给大家分享的是有关封装在java中的应用,小编觉得挺实用的,因此分享给大家学 ...
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...
- 笔记三 vue中封装复用 过滤器 自定义组件 vue中component选项
题外话: npm install -g express-generator npm安装express框架 封装复用 Vue中关于封装复用的内容,属于Vue中的进阶知识,在实战中对开发者的抽象和泛化能力 ...
- Java反射机制:表单数据自动封装到JavaBean中【IT】
2019独角兽企业重金招聘Python工程师标准>>> (2010-07-09 19:50:18) 转载▼ 标签: it 分类: IT路人丁 利用Java的反射机制,模拟一个简单 ...
最新文章
- Node的异步与java的异步_node中异步IO的理解
- html div 隐藏滚动条样式,div滚动条样式隐藏与显示
- js实现上传图片及时预览
- 【libcudnn】ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory
- Ubuntu安装OpenTSDB
- Vue-Router路由Vue-CLI脚手架和模块化开发 之 使用props替代路由对象的方式获取参数...
- js高级学习笔记(b站尚硅谷)-3-对象
- pdf复制文字时对于回车的处理
- 【FPGA】【转载】跨越鸿沟:同步世界的异步信号
- Matlab影像像素坐标得到经纬度/经纬度转影像坐标(已知经纬度获取影像DN值)
- 怎样才能让datetime字段去掉最后面的小时、分、秒
- 交叉编译ortp、osip2、eXosip2、mediastreamer2及其附带的库实现SIP软电话
- 【元胞自动机】基于元胞自动机模拟交通事故道路通行量matlab源码
- AWS中联网Amazon VPC相关概念
- 初级计算机硬件试题,新版初级计算机操作员应知考试试题
- 内网畅外网墙--再聊Nginx访问权限管理
- 【每天1分钟】MarkDown语法学习之分割线
- Python股票监控机器人,加强版!
- 基于PCA的图像压缩实现
- bootstrap-table 添加行保留原数据
热门文章
- 有效数据外含有额外数据_Excel|应用数据有效性规范数据录入
- minheight能继承吗_民法典亮点盘点 | 侄子能继承叔叔的遗产吗?
- 信号中断 与 慢系统调用
- Linux下gSOAP的使用 (c++)
- Linux 定时器设置
- linux无后缀名程序运行,linux – 如何在Ubuntu上运行无扩展(也许是ELF)文件?
- html5 css登录注册实现,html5+css3实现一款注册表单实例
- 【转】ABP源码分析八:Logger集成
- EasyUI学习总结(一)——EasyUI入门
- ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程