如何在redis中存储独立的键值对?

时间:2021-05-19 18:16:57

标签: python redis

我有一个需求,我想在 Redis 中存储两组或更多组独立的键值对。它们必须是独立的,因为它们代表完全不同的数据集。

例如,考虑以下独立的 kv 集:

  1. user_id 和对应的 session_id 的映射
  2. 游戏大厅 id 和对应主机的 user_id 之间的映射
  3. user_id 和用户名之间的映射

现在,如果我必须使用 Python 中的某些数据结构将这些键值“存储在内存中”,我将使用 3 个单独的 dict(或 Java 中的 HashMap)。但是我怎样才能在 Redis 中实现这一点呢?分离是必需的,因为对于几乎所有的 user_id 都会有 session_id 和用户名。

我指的是可用数据类型的此 Redis 文档:enter image description here,与我的要求最接近的匹配是 Hash。但如前所述,它们是对象,并且只有在有几个字段时才具有空间效率。那么这可以存储大量的 kv 对吗?这会影响以后的搜索时间吗?

是否有其他替代方案可以使用 Redis 实现这一目标?我对 Redis 完全陌生。

1 个答案:

答案 0 :(得分:1)

您可以通过为每个数据集创建单独的数据库(有时 Redis 将它们称为“键空间”)来实现这一点。然后使用 db 参数创建连接/池对象:

>>> pool = redis.ConnectionPool(host='redis_host', port=6379, db=0)
>>> r = redis.Redis(connection_pool=pool)

唯一的缺点是您需要为每个数据集管理不同的池。另一个(也许更简单)的选择是向键添加一个标签,表明它们属于哪个数据集。

另外值得注意的是,键空间是按数字组织的(所以你不能像在其他数据库系统中那样命名它们),并且它只支持一小部分(我认为是 15)。

至于 K-V 对的数量,存储大量它们完全没问题,而且查找应该仍然很快。 O(1) 查找是基于键的数据结构的主要优势,其代价是您(在某种程度上)仅限于使用键访问数据(与其他数据库相反,您可以在其中查询任何表中的字段)。