当前位置: 首页 > news >正文

基于Memcached实现对象缓存:存储对象数据,如购物车内容,用户配置

以下是一个示例代码,展示如何使用 Memcached 缓存对象数据,例如购物车内容和用户配置。使用 Python 和 pymemcache 客户端库来与 Memcached 交互。

准备工作

确保已经安装了 Memcached 服务器,并安装了 pymemcache 客户端库。

# 安装 Memcached
sudo apt-get update
sudo apt-get install memcached# 安装 pymemcache
pip install pymemcache

示例代码

以下代码展示了如何将购物车内容和用户配置存储到 Memcached 中。

from pymemcache.client import base
import pickle# 连接到 Memcached
memcached_client = base.Client(('localhost', 11211))# 定义购物车和用户配置对象
class ShoppingCart:def __init__(self):self.items = {}def add_item(self, item_name, quantity):if item_name in self.items:self.items[item_name] += quantityelse:self.items[item_name] = quantitydef remove_item(self, item_name, quantity):if item_name in self.items:self.items[item_name] -= quantityif self.items[item_name] <= 0:del self.items[item_name]def get_items(self):return self.itemsclass UserConfig:def __init__(self, user_id):self.user_id = user_idself.preferences = {}def set_preference(self, key, value):self.preferences[key] = valuedef get_preference(self, key):return self.preferences.get(key, None)def get_all_preferences(self):return self.preferences# 缓存购物车对象
def cache_shopping_cart(user_id, shopping_cart):key = f"shopping_cart_{user_id}"serialized_cart = pickle.dumps(shopping_cart)memcached_client.set(key, serialized_cart, expire=3600)  # 设置缓存过期时间为1小时# 从缓存中获取购物车对象
def get_cached_shopping_cart(user_id):key = f"shopping_cart_{user_id}"cached_cart = memcached_client.get(key)if cached_cart:return pickle.loads(cached_cart)return None# 缓存用户配置对象
def cache_user_config(user_id, user_config):key = f"user_config_{user_id}"serialized_config = pickle.dumps(user_config)memcached_client.set(key, serialized_config, expire=3600)  # 设置缓存过期时间为1小时# 从缓存中获取用户配置对象
def get_cached_user_config(user_id):key = f"user_config_{user_id}"cached_config = memcached_client.get(key)if cached_config:return pickle.loads(cached_config)return None# 示例用法
# 创建购物车并添加项目
user_id = "user123"
cart = ShoppingCart()
cart.add_item("apple", 3)
cart.add_item("banana", 2)# 缓存购物车
cache_shopping_cart(user_id, cart)# 获取并打印缓存的购物车
cached_cart = get_cached_shopping_cart(user_id)
print(f"Cached Shopping Cart for {user_id}: {cached_cart.get_items()}")# 创建用户配置并设置偏好
config = UserConfig(user_id)
config.set_preference("theme", "dark")
config.set_preference("language", "en")# 缓存用户配置
cache_user_config(user_id, config)# 获取并打印缓存的用户配置
cached_config = get_cached_user_config(user_id)
print(f"Cached User Config for {user_id}: {cached_config.get_all_preferences()}")

代码解释

  1. 连接到 Memcached:使用 pymemcache 连接到本地运行的 Memcached 服务器。
  2. 定义购物车和用户配置对象
    • ShoppingCart 类:包含添加、移除和获取购物车项目的方法。
    • UserConfig 类:包含设置、获取和获取所有用户偏好方法。
  3. 缓存对象
    • cache_shopping_cart 函数:将购物车对象序列化后存储到 Memcached 中。
    • get_cached_shopping_cart 函数:从 Memcached 中获取并反序列化购物车对象。
    • cache_user_config 函数:将用户配置对象序列化后存储到 Memcached 中。
    • get_cached_user_config 函数:从 Memcached 中获取并反序列化用户配置对象。
  4. 示例用法
    • 创建一个购物车对象,添加项目并缓存。
    • 获取并打印缓存的购物车内容。
    • 创建一个用户配置对象,设置偏好并缓存。
    • 获取并打印缓存的用户配置。

总结

这个示例展示了如何使用 Memcached 缓存对象数据,例如购物车内容和用户配置。通过使用 pymemcache 库和 pickle 模块,可以方便地将对象序列化并存储到 Memcached 中,并在需要时检索这些对象。希望这个示例对你有所帮助!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入理解Spring Boot中的数据库优化
  • 音视频封装demo:将h264数据和aac数据封装(mux)成TS文件(纯手工,不依赖第三方开源库)
  • DDD架构
  • 快速将一个网址打包成一个exe可执行文件
  • 大数据基础:Hadoop之HDFS重点架构原理
  • CentOS 8升级gcc版本
  • redis的Bitmap 、HyperLogLog、Geo相关命令和相关场景
  • AtCoder Beginner Contest 361
  • SQL 字段类型-上
  • 旗晟机器人AI智能算法有哪些?
  • JRE、JVM、JDK分别是什么。
  • Django学习第六天
  • 构造函数注入@RequiredArgsConstructor
  • arp缓存中毒实验
  • 【大模型LLM面试合集】大语言模型架构_layer_normalization
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • css的样式优先级
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript 一些 DOM 的知识点
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Js基础知识(四) - js运行原理与机制
  • Octave 入门
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 初识 webpack
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 数据科学 第 3 章 11 字符串处理
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • Spring第一个helloWorld
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (1)常见O(n^2)排序算法解析
  • (6)添加vue-cookie
  • (C11) 泛型表达式
  • (Git) gitignore基础使用
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (k8s)Kubernetes本地存储接入
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (算法)硬币问题
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)SpringBoot3---尚硅谷总结
  • .bashrc在哪里,alias妙用
  • .gitignore文件忽略的内容不生效问题解决
  • .NET Core中Emit的使用
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net 调用php,php 调用.net com组件 --
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • @test注解_Spring 自定义注解你了解过吗?
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [3300万人的聊天室] 作为产品的上游公司该如何?