Py学习  »  Redis

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

Kaushal28 Tamas Czinege • 3 年前 • 1423 次点击  

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

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

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

现在,如果我必须使用Python中的一些数据结构将这些键值存储在“内存”中,我将分别使用user 3 dict s(或 HashMap (在Java中)。但我如何在Redis中实现这一点?这种分离是必需的,因为几乎所有的用户id都有会话id和用户名。

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127886
 
1423 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Z4-tier
Reply   •   1 楼
Z4-tier    4 年前

可以通过为每个数据集创建单独的数据库(有时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)查找是基于键的数据结构的主要优点,折衷是您(无论如何在某种程度上)只能使用键访问数据(而不是其他数据库,在这些数据库中,您可以查询表中的任何字段)。