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

2024-09-19 21:04:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

  1. 用户标识和相应会话标识之间的映射
  2. 游戏大厅id和相应主机的用户id之间的映射
  3. 用户名和用户名之间的映射

现在,如果我必须使用Python中的某些数据结构将这个键值“存储在内存中”,我将使用3个独立的dict(或者Java中的HashMap)。但我如何在Redis中实现这一点?因为几乎所有的用户id都有会话id和用户名,所以需要进行分隔

我正在引用这个Redis文档以获取可用的数据类型:https://redis.io/topics/data-types,与我的需求最匹配的是Hash。但如前所述,它们是对象,只有在有几个字段的情况下才能节省空间。那么存储大量的kv对可以吗?这会影响今后的搜索时间吗

是否有其他方法可以使用Redis实现这一点?我对Redis完全陌生


Tags: 数据内存用户redisid游戏数据结构代表
1条回答
网友
1楼 · 发布于 2024-09-19 21:04:05

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

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

这样做的唯一缺点是需要为每个数据集管理不同的池。另一个(可能更容易)的选择是只向键添加一个标记,指示它们属于哪个数据集

还值得注意的是,密钥空间是以数字形式组织的(因此不能像在其他数据库系统中那样命名它们),并且它只支持一个小数字(我认为是15)

至于K-V对的数量,存储大量的K-V对是完全可以的,并且查找应该仍然非常快。O(1)查找是基于键的数据结构的主要优点,折衷是您(无论如何在某种程度上)只能使用键访问数据(与其他数据库不同,在其他数据库中,您可以查询表中的任何字段)

相关问题 更多 >