PHP中封装Redis购物车功能
<?php
// 服务层
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中封装Redis购物车功能的更多相关文章
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- python开发-实现redis中的发布订阅功能
Python3学习(二十七):python实现Redis的订阅与发布(sub-pub机制) 先介绍一下redis的pub/sub功能: Pub/Sub功能(means Publish, Subscri ...
- Java实现购物车功能:方式一:存放在session中.方式二:存储在数据库中
//将购物车产品加入到cookie中,方式同浏览记录.Java实现购物车,方式一(简易版):存储在session中.这种方式实现还不严谨,大家看的时候看思路即可.(1). JSP页面中,选择某一款产品 ...
- $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
一 Python操作Redis之普通连接 #先安装 pip3 install redis import redis r = redis.Redis(host='127.0.0.1', port=637 ...
- 042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- spring中订阅redis键值过期消息通知
1.首先启用redis通知功能(ubuntu下操作):编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登陆 ...
- Redis的安装以及在项目中使用Redis的一些总结和体会
第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力 ...
- javaweb学习——session和Cookie实现购物车功能
1.创建Book类,实现对图书信息的封装. package cn.it.sessionDemo.example1; import java.io.Serializable; /** * 该类实现对图书 ...
- 红包雨中:Redis 和 Lua 的邂逅
2018年,王思聪的冲顶大会,西瓜视频的百万英雄,再到映客的芝士超人,直播答题火爆全网. 我服务的一家电商公司也加入了这次热潮,技术团队研发了直播答题功能.答题结束之后,红包会以红包雨的形式落下,用户 ...
随机推荐
- 大数据自学3-Windows客户端DbVisualizer/SQuirreL配置连接hive
前面已经学习了将数据从Sql Server导入到Hive DB,并在Hue的Web界面可以查询,接下来是配置客户端工具直接连Hive数据库,常用的有DbVisualizer.SQuirreL SQL ...
- Python笔记 #19# 实现bpnn
代码编辑&解释工具:Jupyter Notebook 快速入门 形象说明BP神经网络的用法(图片来自推特): Bpnn类最主要的三个方法: initialize方法,用于设定神经网络的层数.各 ...
- Prometheus监控学习笔记之Prometheus不完全避坑指南
0x00 概述 Prometheus 是一个开源监控系统,它本身已经成为了云原生中指标监控的事实标准,几乎所有 k8s 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行 ...
- ionic 实现微信朋友圈分享的完整开发流程
最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...
- c++实现“扫描检测硬件改动”
这里需要用到cfgmgr32.h,参考了网上好几篇博文. #include <windows.h> #include <stdio.h> #include <cfgmgr ...
- rocketmq安装与基本操作
如果不是因为政治原因,就rocketmq的社区活跃度.版本.特性和文档完善度,我是无论如何也不会使用rocketmq的. rocketmq严格意义上并不支持高可靠性,因为其持久化只支持异步,有另外一个 ...
- 2018-2019-1 20189206 《Linux内核原理与分析》第三周作业
linux内核分析学习笔记 --第二章 操作系统是如何工作的 计算机的"三大法宝" 程序存储计算机 即冯诺依曼体系结构,基本上是所有计算机的基础性的逻辑框架 函数调用堆栈 高级语言 ...
- day28 网络编程
网络编程 什么是网络编程? 编写基于网络的应用程序的过程称之为网络编程 一.CS构架 C/S构架 服务器和客户端之间用网线连接 提供数据的计算机称为服务器,访问数据的计算机称为客户端 二.网络通讯的基 ...
- LVM基本应用,扩展及缩减实现
一.基本概念 如上图所示:底层PV(物理卷可能是硬盘设备,分区或RAID等),一个或多个PV组织成一个VG(卷组),卷组是不能直接格式化使用的,所以在VG之上,还需要创建LV进行格式化使用.VG在逻辑 ...
- CF113D 高斯消元、dp
题目链接 https://codeforces.com/contest/113/problem/D 思路 \(k[i]=\frac{1-p[i]}{ru[i]}\) f[i][j]表示经过i和j的次数 ...