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年,王思聪的冲顶大会,西瓜视频的百万英雄,再到映客的芝士超人,直播答题火爆全网. 我服务的一家电商公司也加入了这次热潮,技术团队研发了直播答题功能.答题结束之后,红包会以红包雨的形式落下,用户 ...
随机推荐
- JavaUtil smtp 邮件发送
需要用到的jar包:javax.mail.jar package com.lee.util; import java.io.UnsupportedEncodingException; import j ...
- WIN10安装和使用MySql5.6中遇到的一些问题与解决
WIN10安装和使用MySql5.6中遇到的一些问题与解决 提示一下,安装前需要安装python环境. MySql安装缺少组件MySQL for Excel 如图(转载别人的图,自己的安装时没有截图) ...
- 20145208 蔡野 《网络对抗》Exp7 网络欺诈技术防范
20145208 蔡野 <网络对抗>Exp7 网络欺诈技术防范 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体有(1)简单应用SET工具建立冒名网站(2) ...
- bzoj 1095 Hide 捉迷藏 - 动态点分治 -堆
Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双 ...
- iOS字体大小
1,iOS 字体大小单位是pt——磅. 英文字体的1磅,相当于1/72 英寸,约等于1/2.8mm. px:相对长度单位.像素(Pixel).(PS字体) pt:绝对长度单位.点(Point).(iO ...
- c和c++main函数的参数
1.代码 int main(int argc,char **argv[]) { ; } 2.分析 argc:代码参数个数 argv:二级指针,很多个字符串,这里代表参数列表 3.分析 这个代码最终被编 ...
- python 函数,闭包
假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bi ...
- 用uniGUI做B/S下业务系统的产品原型体验
从10月份到重庆工作后,一直忙于工作,感兴趣的几个方面的技术都处于暂停. 一个多月来,按照公司要求在做B/S集中式基卫产品的原型,主要是画原型图,开始是用Axure,弄来弄去感觉功能还是弱了些,尤其是 ...
- Python3 tkinter基础 Button command 单击按钮 在console中打印文本
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- tp框架中的一些疑点知识-5
关于vim中的缓存区的前后bp和bn的界定 通过命令ls可以看到 缓存区的 排序. 最开始打开的文件排在最上面, 序号最小. 那么它们就是 更 前 的缓冲区. 序号更前的用bp, 序号靠后的用bn. ...