这里不累赘如何安装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 哈希数据类型简单操作(实现购物车案例)的更多相关文章

  1. Redis 对String数据类型的操作

    Redis的 Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更 ...

  2. Redis 学习(二) —— 数据类型及操作

    Redis支持string.list.set.zset.hash等数据类型,这一篇学习redis的数据类型.命令及某些使用场景. 一.String,字符串 字符串是 Redis 最基本的数据类型.一个 ...

  3. Redis学习笔记——数据类型及操作

    数据操作 redis是key-value的数据,所以每个数据都是一个键值对 键的类型是字符串 值的类型分为五种: 字符串string 哈希hash 列表list 集合set 有序集合zset 数据操作 ...

  4. redis jedis存储对象简单操作,map list 自定义对象

    安装好redis,进行了基本的操作.包括对map list 和自定义对象的基本操作.笔记都在代码注释里,直接上代码. private Jedis jedis; @Before public void ...

  5. (四)Redis哈希表Hash操作

    Hash全部命令如下: hset key field value # 将哈希表key中的字段field的值设为value hget key field # 返回哈希表key中的字段field的值val ...

  6. redis 哈希 数据类型

    哈希 hset  设置哈希表字段 hset 8000 ename tom   hset 8000 job salesman hget 8000 ename  "tom" hget  ...

  7. redis的安装和简单操作

    安装gcc  目地是编译软件 yum install gcc-c++ 1.拷贝并解压 2.编译文件 到解压目录下 执行 make 进行编译依赖项 cd /deps make hiredis lua j ...

  8. redis的基本数据类型

    一:redis是一个开源的,使用C语言编写,支持网络,可基于内存亦可持久化的日志型,key-value方式存储的nosql数据库.作为缓存服务器,速度效率都很快,和memcache相似 redis支持 ...

  9. qhfl-5 redis 简单操作

    Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可 ...

随机推荐

  1. MvvmLight - ViewModelLocator

    这里先鼓舞下士气,ViewModelLocator很简单,甚至可以去掉,它不是Mvvm必须的.在初学Mvvm时,一般都是使用NuGet安装 MvvmLight框架,总是会带上那么一个ViewModel ...

  2. Application全局应用程序类

    当一个WPF应用程序启动时,先会实例化一个全局的唯一的Application.如果开发人员熟悉Windows Form编程,会知道在SystemWindowsForm命名空间中有一个Applicati ...

  3. 一:Nginx知识整理

    Nginx与服务器集群 一:集群 1.什么是集群 集 合在一起 放在一起 群 一堆 很多 服务器架构集群:多台服务器组成的响应大并发,高数据量访问的架构体系. 分布式服务器架构: 特点: 1)成本高 ...

  4. input的属性用法介绍

    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=text 输入类型是text,这是我们见的 ...

  5. Alice's Print Service

    Alice's Print Service Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is providing print ser ...

  6. HDU 3191 次短路长度和条数

    http://www.cnblogs.com/wally/archive/2013/04/16/3024490.html http://blog.csdn.net/me4546/article/det ...

  7. C# javascript 全选按钮

    function selectAll(checkbox) {                  $('input[type=checkbox]').attr('checked', $(checkbox ...

  8. 我的gulp第一个程序

    以前都是单枪匹马的干,从没用过模块化的打包工具,加入新的团队后,模块化开发学到不少,尤其是工具的使用.团队目前较多的使用gulp,也是最流行的一款前端打包工具.最近Team开始尝试用gulp,我也只是 ...

  9. 手贱--npm 误改全局安装路径

    修改全局安装命令: 通过 npm config set prefix "目录路径" 来设置. 通过 npm config get prefix 来获取当前设置的目录. 我的node ...

  10. HTML5 : 文件上传下载

    网站建设中,文件上传与下载在所难免,HTML5中提供的API在前端有着丰富的应用,完美的解决了各个浏览器的兼容性问题,所以赶紧get吧! FileList 对象和 file 对象 HTML 中的 in ...