首页 > 解决方案 > redis中的定长数据结构

问题描述

我需要将数以万计的 4 字节字符串与大约一个或多个布尔值进行匹配。如果这意味着更快的检索,我不介意为布尔值使用一个完整的单词。但是,我对我的数据有如此严格的限制,我想如果提前将这些数据报告给存储引擎,可以进行一些优化,尽管是很小的优化。Redis 有没有办法利用这一点?

这是我的数据示例:

"DENL": false
"NLES": false
"NLUS": true
"USNL": true
"AEGB": true
"ITAE": true
"ITFR": false

键是两个ISO 3166-1 alpha-2 代码的连接。因此,它们保证为 4 个大写英文字母。

我考虑使用的数据结构是:

而且由于我的数据只包含大写英文字母,并且只有 456976 种可能的组合(每个键存储的每个位为 56KB):

我认为集合可能是最优雅的解决方案,所有可能组合的二进制字符串将是最有效的。我想知道是否有某种中间立场?就像一个以固定长度字符串作为成员的集合。我希望针对固定长度字符串优化的数据类型能够提供比针对可变长度字符串优化的数据类型更快的搜索。

标签: optimizationdata-structuresredisfixed-length-record

解决方案


您可以尝试一些优化:

  1. 使用一组并将所有值视为“需要报关”或“不需要报关” - 取决于哪个值较少;然后使用SISMEMBER你可以检查你的钥匙是否在那个给你正确答案的集合中,
  2. 查看Redis 数据类型介绍,“位图”一章- 如果您在某个数组中预定义所有键,您可以使用SETBITGETBIT操作来存储给定位号的标志“需要报关”(索引在大批)。

推荐阅读