使用Redis实现购物车后端处理

本文中心思想:实现购物车的后端处理逻辑。

本文将教会你掌握:1.存储商品信息,2.存储购物车信息,3.获取购物车信息。

存储商品信息

商品包含多个属性,例如:名字,价格,描述等等。使用哈希能够将商品的所有信息存储在一个键 item:*:info,其中 * 是商品 ID,例如,商品 ID1 的哈希键 item:1:info 中的内容为:

{
"name": "儿童棉马甲加厚",
"price": 14.9
}

我们可以使用 hmset() 方法一次性存入商品信息:

item_info_key = 'item:' + str(item_id) + ':info'
conn.hmset(item_info_key, {"name": "儿童棉马甲加厚", "price": 14.9})

同时,商品并不是永久存在的,是有有效期的,在到达有效期后应该从 Redis 中删除,避免用户继续购买或者加入到购物车中。

由于一个商品的全部信息都存储在同一个键中,所以我们可以使用键的过期时间来设置商品信息哈希键 item:*:info 在指定的时间后过期:

conn.expire(item_info_key, 30 * 24 * 60 * 60)

上述例子中,我们设置商品信息在 30 天后过期。

将这些过程写入方法 add_item() 中:

def add_item(name, price):
item_id = conn.incr('item_id') #设置item_id键自增
item_info_key = 'item:' + item_id + ':info'
conn.hmset(item_info_key, {"name": name, "price": price})
conn.expire(item_info_key, 30 * 24 * 60 * 60)
存储购物车信息

购物车的定义十分简单,我们可以将每个用户的购物车都看作是一个哈希,这个哈希存储着商品 ID 与加入购物车的数量之间的映射关系,由于购物车与用户相关,所以购物车的哈希键名为 cart:*,其中*是用户ID

在本关卡中,我们只处理商品加入/移出购物车时对购物车进行更新:

  • 当用户将某件商品加入到购物车时
    • 应该将该商品 ID 和加入购物车的数量添加到哈希中
    • 如果购物车中已有该商品,则应该根据新的数量更新哈希
  • 如果用户将某件商品移出购物车时
    • 应该从哈希中删除该商品 ID 对应的域

通过上述规则,可以将加入和移出购物车合并编写一个方法:

def add_to_cart(user_id, item, count):
if count > 0:
conn.hset('cart:' + user_id, item, count)
else:
conn.hrem('cart:' + user_id, item)
获取购物车信息

实现了更新购物车的方法,但还需要一个方法来展示用户当前购物车中有什么商品,我们可以直接使用 hgetall() 方法获取到 cart:*(其中*为用户ID)键中所有域-值对:

def get_cart_info(user_id):
return conn.hgetall('cart:' + user_id)

最后我们将整个哈希返回,以便后续处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

it资产管理系统

it资产管理系统这个词组初听有些陌生,再听却别有一种科技感。 先来看下it资产管理系统的定义: 它是一种针对企业IT资产进行全面管理和监控的工具,它可以帮助企业实现对IT资源的有效利用和合理配置,提高企业的运营效率和市场竞争力…

查看php进程占用内存

要查看每个PHP中Swoole进程占用的内存,您可以使用Linux的一些工具和命令来实现。 使用ps命令列出正在运行的进程,可以通过进程名或进程ID(PID)过滤结果: ps aux | grep php这将显示与PHP相关的进程列表。 通过top命令…

Python 3 读写 json 文件

使用函数 json.dumps()、loads() 、json.dump()、json.load() 。 1 json.dumps() 将python对象编码成Json字符串 import jsondata {name:Alice,age:25,gender:F,city:北京 }# 1 json.dumps() 将python对象编码成Json字符串 print(type(data)) json_str json.dumps(data…

mysql安装环境

安装mysql https://www.mysql.com/downloads/ 如果操作系统版本比较低,还需要安装NET Framework4.5.2 搭建环境变量 MySQL可视化界面: 破解navicat:

spark不同结构Dataset合并

1.先将hdfs(或本地)存储的csv文件加载为Dataset 先在本地C盘准备两个csv文件 test.csv client_id,behives,del,normal_status,cust_type,no_trd_days 7056,zl,1,hy,个人,2 7057,cf,1,hy,个人,12 7058,hs,2,hy,个人,1200 212121,0,sj,hy,个人,1100 212122,1,yx,hy,个人,100 212…

如何入驻抖音本地生活服务商,门槛太高怎么办?

随着抖音本地生活服务市场的逐渐成熟,越来越多平台开始涉及本地生活服务领域,而本地生活服务商成了一个香窝窝,为了保护用户权益和平台生态,对入驻入驻抖音本地生活服务商的条件及审核也越来越严格,这让很多想成为抖音…

ES常用操作语句

ES常用操作语句 注:本文中的操作语句基于ES5.5和7.7的版本,版本不同操作语句上可能有细微差别,如5.5版本有索引类型,7.7版本已废弃,查询不应该带索引类型 新增 # 添加字段,并设置字段类型 PUT /索引/_map…

LeetCode56. 合并区间

&#x1f517;:【贪心算法&#xff0c;合并区间有细节&#xff01;LeetCode&#xff1a;56.合并区间-哔哩哔哩】 class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size()0){return intervals;…

【页面】表格展示

展示 Dom <template><div class"srch-result-container"><!--左侧--><div class"left"><div v-for"(item,index) in muneList" :key"index" :class"(muneIndexitem.mm)?active:"click"pa…

GORM gorm.DB 对象剖析

文章目录 1.GORM 简介2.gorm.DB 简介2.1 定义2.2 初始化2.3 查询方法2.4 事务支持2.5 模型关联2.6 钩子&#xff08;Hooks&#xff09;2.7 自定义数据类型 3.为什么不同请求可以共用一个 gorm.DB 对象&#xff1f;4.链式调用与方法5.小结参考文献 1.GORM 简介 GORM 是一个流行…

基于c 实现 FIFO

功能&#xff1a; 1、读和写长度不限制 2、数据操作 和 指针操作分开&#xff08;如先操作数据&#xff0c;再操作指针&#xff09; 适用场景&#xff1a; 单向通信模式&#xff0c;一方写、一方读&#xff0c;可用于任务间单向通信&#xff08;无需锁&#xff09; 如&…

7-HDFS的文件管理

单选题 题目1&#xff1a;下列哪个属性是hdfs-site.xml中的配置&#xff1f; 选项: A fs.defaultFS B dfs.replication C mapreduce.framework.name D yarn.resourcemanager.address 答案&#xff1a;B ------------------------------ 题目2&#xff1a;HDFS默认备份数量&…

fastboot常用命令

fastboot常用命令 显示fastboot设备&#xff1a;fastboot devices 获取手机相关信息&#xff1a;fastboot getvar all 重启手机&#xff1a;fastboot reboot 重启到bootloader&#xff1a;fastboot reboot-bootloader 擦除分区&#xff1a;fastboot erase (分区名) 例&…

代码随想录算法训练营第四十三天 _ 动态规划_1049.最后一块石头的重量II、494.目标和、474.一和零。

学习目标&#xff1a; 动态规划五部曲&#xff1a; ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录&#xff01; 60天训练营打卡计划&#xff01; 学习内容&#xff1a; 1049.最后一块石头的重量II 该题…

360公司-2019校招笔试-Windows开发工程师客观题合集解析

360公司-2019校招笔试-Windows开发工程师客观题合集 API无法实现进程间数据的相互传递是PostMessage2.以下代码执行后,it的数据为(异常) std::list<int> temp; std::list<int>::iterator it = temp.begin(); it = --it; 3.API在失败时的返回值跟其他不一样是 …

微信小程序自定义tabBar简易实现

文章目录 1.app.json设置custom为true开启自定义2.根目录创建自定义的tab文件3.app.js全局封装一个设置tabbar选中的方法4.在onshow中使用选中方法最终效果预览 1.app.json设置custom为true开启自定义 2.根目录创建自定义的tab文件 index.wxml <view class"tab-bar&quo…

自动升降压稳压电源模块输入3v~24V输出3.3/4.2/5/9/12V芯片

自动升降压稳压电源模块是一种高效、高稳定性的电源解决方案&#xff0c;广泛应用于各种需要稳定电压输出的场合。该模块采用宽电压低功耗方案&#xff0c;能够自动升降压&#xff0c;适应不同的输入电压范围&#xff0c;同时具有关断功能&#xff0c;确保设备的安全运行。 该电…

Vue 报错error:0308010C:digital envelope routines::unsupported

因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制 方法一 windows终端输入 set NODE_OPTIONS--openssl-legacy-provider 方法二 降低node版本&#xff0c;比如16. 方法三 package.json增加如下配置 "scripts":…

想要更高效的文件传输?这些aspera替代方案可以助你一臂之力

随着数字化时代的不断推进&#xff0c;数据传输已成为各行各业、各类企业所必需的核心能力。而在文件传输方面&#xff0c;传统的方式往往面临着诸多问题&#xff0c;例如文件大小限制、传输速度过慢、不稳定、不安全等问题。为此&#xff0c;许多企业开始寻找更可靠、更高效的…

Java大数据开发入门教程:使用Hadoop处理海量数据

引言&#xff1a; 随着互联网的发展和智能设备的普及&#xff0c;数据量的爆炸式增长已成为现实。如何高效地处理和分析这些海量数据成为了当今技术领域的一个重要课题。在大数据领域&#xff0c;Hadoop作为一个开源的分布式计算框架&#xff0c;被广泛应用于海量数据的存储和处…