gpt4 book ai didi

Redis:类似多表的使用方法

转载 作者:IT王子 更新时间:2023-10-29 05:59:41 25 4
gpt4 key购买 nike

似乎Redis在关系型数据库中没有对应“表”的任何实体。

例如,我必须存储:

(token, user_id) 

(cart_id, token, [{product_id, count}])

如果不将这两者分开存储,get 方法会从两者中搜索,这会造成困惑。

对了,(cart_id, token, [{product_id, count}])是一个购物车,在redis中如何设计这样的数据结构?

最佳答案

It seems that Redis has no any entity corresponding to "table" in relational database.

是的,因为它不是关系型数据库。它是一个非常不同的数据结构服务器,需要不同的方法才能很好地使用。

最终,要按照预期的方式使用 Redis,您需要从关系的角度思考,而是考虑您在代码中使用的数据结构。更具体地说,当您想要使用数据时,您如何需要这些数据?这将是最有可能将其存储在 Redis 中的方式。

在这种情况下,有几个选项,但哈希方法非常适合这个选项,因此我将在此处详细说明。

首先,创建一个散列,将其命名为users:to:tokens。将用户 ID 存储为散列中的键,将 token 存储为值。接下来创建相反的哈希,称为“tokens:to:users”。您可能需要这两者 - 相互比较的能力 - 而这个基础将提供这一点。

接下来,为您的购物车。这也将是一个散列:carts:cart_id。在这个散列中,您有 product_id 和计数。

最后是您的第三个散列 token:to:cart,它构建一个 token 索引到购物车 ID。我会更进一步,执行 user:to:cart 以便用户也能够拉动购物车。

现在至于是否在 map 中存储基调,我倾向于“否”。通过仅存储 ID,您可以轻松构建 Redis 购物车 key ,而不是将 key 的完整路径存储在数据存储中,同时节省内存使用量。

确实,如果可以的话,您的所有 ID 都应使用整数。通过使用整数,您可以利用 Redis 的整数存储优化来降低内存使用量。存储整数的哈希非常高效且速度非常快。

如果需要,您可以使用 Redis 来构建您的 ID。您可以使用 INCR 命令为每种数据类型构建一个计数器,例如 userid:countercartid:countertokenid :计数器。当 INCR 返回新值时,您只需调用一次增量并获取新 ID,如果您想快速查看,get cartid:counter 将始终为您提供最大的 ID创建了多少购物车。有点整洁,IMO。

现在,如果您想使用过期自动使购物车过期而不是让它们“闲置”直到您想要清理东西,就会变得棘手。通过在购物车哈希(具有产品、计数映射)上设置过期时间,您的购物车将自动过期。但是,它们的引用仍将卡在 token:to:cart 哈希中。删除它是一个简单的周期性任务,它处理 token:to:cart 的成员并对购物车的 key 进行 exists 检查。如果它不存在,请将其从哈希中删除。

关于Redis:类似多表的使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33605880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com