redis 哈希数据类型简单操作(实现购物车案例)
这里不累赘如何安装redis和php redis扩展,主要熟悉调用redis哈希数据类型

简单方法操作如下
1:hSet

2:hGet

4:hDel

5:hGetAll

4:hExists

5:hIncrBy

简单购物车实现





namespaceHome\Controller;
useThink\Controller;
useOrg\Net\Http;
useThink\Cache\Driver\Redis;
classIndexControllerextendsController
{
private$redis_obj=null;
public function__construct()
{
$this->redis_obj=newRedis();
} /**
*@file:判断购物车是否存在这减商品
*@param$user_id
*@param$goods_id
*/
public functiongoods_is_exist($user_id,$goods_id)
{
$r1=$this->redis_obj->hExists($user_id,$goods_id);
return$r1;
}
/**
*@file:增加购物车商品
*
*/
public functionadd_goods()
{
$user_id= intval($_POST['user_id']) ? intval($_POST['user_id']) :0;
$goods_id= intval($_POST['goods_id']) ? intval($_POST['goods_id']) :0;
$exist=$this->goods_is_exist($user_id,$goods_id);
if(!empty($user_id) &&$goods_id) {
//不存在 增加商品
if(!$exist) {
$add_return=$this->redis_obj->hSet($user_id,$goods_id,1);
if($add_return) {
$this->ajaxReturn(array('code'=>0,'msg'=>'success'));
}else{
$this->ajaxReturn(array('code'=>1,'msg'=>'error'));
}
}elseif($exist) { //存在的商品增加1
$add_exist_result=$this->redis_obj->hIncrBy($user_id,$goods_id,1);
if($add_exist_result) {
$this->ajaxReturn(array('code'=>0,'msg'=>'success','1'=>$add_exist_result));
}else{
$this->ajaxReturn(array('code'=>1,'msg'=>'error'));
}
}
}
} //减少购物车的商品
public functionreduce_goods()
{
$user_id= intval($_POST['user_id']) ? intval($_POST['user_id']) :0;
$goods_id= intval($_POST['goods_id']) ? intval($_POST['goods_id']) :0;
if(!empty($user_id) &&$goods_id) {
$exist=$this->goods_is_exist($user_id,$goods_id); //不存在
if(!$exist) {
$this->ajaxReturn(array('code'=>1,'msg'=>'goods is not exist '));
}elseif($exist) {
$val=$this->redis_obj->hGet($user_id,$goods_id);
if($val==1) {//购物车商品只有一件的时候 减少到0就是删除
$del_result=$this->redis_obj->hDel($user_id,$goods_id);
if($del_result==1) {
$this->ajaxReturn(array('code'=>0,'msg'=>'success','num'=>0));
}
}elseif($val>1) {
$new_value=$this->redis_obj->hIncrBy($user_id,$goods_id,-1);
if($new_value>0) {
$this->ajaxReturn(array('code'=>0,'msg'=>'success','num'=>$new_value));
}else{
$this->ajaxReturn(array('code'=>1,'msg'=>'error'));
}
}
}
}else{
$this->ajaxReturn(array('code'=>1,'msg'=>'param is empty'));
}
} //移除商品
public functionrm_goods()
{
$user_id= intval($_POST['user_id']) ? intval($_POST['user_id']) :0;
$goods_id= intval($_POST['goods_id']) ? intval($_POST['goods_id']) :0;
if(!empty($user_id) && !empty($goods_id)) {
$arr= explode(',',$goods_id);
array_unshift($arr,$user_id);
$rm_result= call_user_func_array(array($this->redis_obj,"hDel"),$arr);
if($rm_result>=0) {
$this->ajaxReturn(array('code'=>0,'msg'=>'remove success'));
}
}else{
$this->ajaxReturn(array('code'=>1,'msg'=>'param is empty'));
}
}
//购物车列表
public functioncart_list()
{
$user_id= intval($_POST['user_id']) ? intval($_POST['user_id']) :0; if(!empty($user_id)) { $goods_list=$this->redis_obj->hGetAll($user_id); $this->ajaxReturn(array('code'=>0,'list'=>$goods_list)); }else{ $this->ajaxReturn(array('code'=>1,'msg'=>'param is empty')); } } //设置一个商品的数量
public function edit_goods_num()
{ }
}
redis 哈希数据类型简单操作(实现购物车案例)的更多相关文章
- Redis 对String数据类型的操作
Redis的 Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更 ...
- Redis 学习(二) —— 数据类型及操作
Redis支持string.list.set.zset.hash等数据类型,这一篇学习redis的数据类型.命令及某些使用场景. 一.String,字符串 字符串是 Redis 最基本的数据类型.一个 ...
- Redis学习笔记——数据类型及操作
数据操作 redis是key-value的数据,所以每个数据都是一个键值对 键的类型是字符串 值的类型分为五种: 字符串string 哈希hash 列表list 集合set 有序集合zset 数据操作 ...
- redis jedis存储对象简单操作,map list 自定义对象
安装好redis,进行了基本的操作.包括对map list 和自定义对象的基本操作.笔记都在代码注释里,直接上代码. private Jedis jedis; @Before public void ...
- (四)Redis哈希表Hash操作
Hash全部命令如下: hset key field value # 将哈希表key中的字段field的值设为value hget key field # 返回哈希表key中的字段field的值val ...
- redis 哈希 数据类型
哈希 hset 设置哈希表字段 hset 8000 ename tom hset 8000 job salesman hget 8000 ename "tom" hget ...
- redis的安装和简单操作
安装gcc 目地是编译软件 yum install gcc-c++ 1.拷贝并解压 2.编译文件 到解压目录下 执行 make 进行编译依赖项 cd /deps make hiredis lua j ...
- redis的基本数据类型
一:redis是一个开源的,使用C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value方式存储的nosql数据库.作为缓存服务器,速度效率都很快,和memcache相似 redis支持 ...
- qhfl-5 redis 简单操作
Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可 ...
随机推荐
- [转]js 回车转成TAB(利用tabindex)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS加法相关
1:首先JS是一种弱语言,但是同类型可以自己相加减 例如“a”+”b” 可以自动组成ab : 1+ 2 自动变成3 var data = 2; var currentPage = data; //2 ...
- Microsoft Windows Scripting Self-Paced Learning Guide
http://www.mums.ac.ir/shares/hit/eduhit/book/windowsscripting.pdfhttp://support.microsoft.com/kb/926 ...
- img 加载网络图片失败 显示默认图片
1. 概述 当从网络加载图片失败 希望显示默认图 img 标签有个 onerror属性 2. 代码 2.1 java服务端组织标签整个返回前端 String imgUrl = "javasc ...
- Python-常用模块1
今天我们来看一看python中的常用的模块,内容有点多,我会分两天来更新这些知识 一.什么是模块 模块就是我们把装有特定功能的代码就行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代 ...
- CRLF与LF解析
window和mac的同学合作开发项目,会出现git提交/拉取时换行符不一致导致,提示 "the text is identical, but the files do not match, ...
- JSTL数据格式化
日期表示 <fmt:formatDate value="${DATE1}" pattern="yyyy-MM-dd hh:mm:ss" type=&quo ...
- jquery根据id取不到textarea对象,无法给textarea赋值
小编定义了一个textarea控件,却无法根据id取到textarea对象并赋值. 经过实验,得出了原因.代码如下: <!DOCTYPE html><html><head ...
- 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...
- Ubuntu 18 使用docker安装rancher/server:stable并运行kubernetes
1.安装docker sudo apt-get install docker.io docker的版本:Docker version 17.12.1-ce 2.安装virtualbox-qt,因为vi ...