

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 开始使用 Bloom 筛选条件
<a name="BloomFilters"></a>

ElastiCache 支持 Bloom filter 数据结构，它提供了一种节省空间的概率数据结构来检查元素是否是集合的成员。使用 Bloom 筛选条件时，可能会出现误报，即筛选条件可能会错误地表明某个元素存在，但其实该元素并未添加到集合中。不过，使用 Bloom 筛选条件可以防止*误报*，即错误地表明某个元素*不*存在，但其实该元素已添加到集合中。

通过调整误报率，您可以将潜在误报的百分比设置为工作负载的首选比率。您还可以配置容量（Bloom 筛选条件可以容纳的项目数量）、扩展和非扩展属性等。

使用受支持的引擎版本创建集群后，Bloom 数据类型和关联的命令将自动可用。`bloom` 数据类型与 Valkey 官方客户端库（包括 `valkey-py`、`valkey-java` 和 `valkey-go`）的 Bloom 筛选命令语法具有 API 兼容性。你可以轻松地将现有的基于 Bloom 的 Valkey 和 Redis OSS 应用程序迁移到。 ElastiCache有关命令的完整列表，请参阅[Bloom 筛选命令](#SupportedCommandsBloom)。

与 Bloom 相关的指标`BloomFilterBasedCmds``BloomFilterBasedCmdsLatency`、和`BloomFilterBasedCmdsECPUs`， CloudWatch 用于监控此数据类型的使用情况。有关更多信息，请参阅 [Valkey 和 Redis OSS 的指标](CacheMetrics.Redis.md)。

**注意**  
要使用 Bloom 过滤器，你必须在 ElastiCache Valkey 8.1 及更高版本上运行。
Bloom 数据类型与其他并非基于 Valkey 的 Bloom 产品不具有 RDB 兼容性。

## Bloom 筛选条件数据类型概述
<a name="BloomFilters.datatype"></a>

Bloom 筛选条件是一种空间利用率高的概率数据结构，允许添加元素和检查元素是否存在。如果筛选条件错误地表明某个元素存在，但其实该元素并未添加，则可能会出现误报。不过，Bloom 筛选条件可以保证不出现误报（错误地表明某个元素不存在，但其实该元素已添加）。

有关 Bloom 筛选条件文档的主要来源，请参阅 valkey.io 文档页面。这包含以下信息：
+ [Bloom 筛选条件的常见使用案例](https://valkey.io/topics/bloomfilters/#common-use-cases-for-bloom-filters)
  + 广告/事件重复数据删除
  + 欺诈侦测
  + 筛除有害内容/垃圾邮件
  + 唯一用户检测
+ [扩展和非扩展 Bloom 筛选条件之间的区别](https://valkey.io/topics/bloomfilters/#scaling-and-non-scaling-bloom-filters)
  + 如何在扩展和非扩展 Bloom 筛选条件进行选择
+ [Bloom 属性](https://valkey.io/topics/bloomfilters/#bloom-properties)
  + 了解 Bloom 筛选条件的可调整属性。这包括误报率、容量、扩展和非扩展属性等。
+ [Bloom 命令的性能](https://valkey.io/topics/bloomfilters/#performance)
+ [监控总体 Bloom 筛选条件统计信息](https://valkey.io/topics/bloomfilters/#monitoring)
+ [处理大型 Bloom 筛选条件](https://valkey.io/topics/bloomfilters/#handling-large-bloom-filters)
  + 有关如何检查 Bloom 筛选条件是否达到其内存使用限制以及能否扩展以达到所需容量的建议和详细信息。
  + 您可以使用 [BF.INFO](https://valkey.io/commands/bf.info/) 命令专门检查 Bloom 筛选条件文档所使用的内存量。

## Bloom 大小限制
<a name="BloomFilters.size"></a>

单个 Bloom 筛选条件对象的内存使用上限为 128 MB。您可以使用 `BF.INFO <key> SIZE` 命令检查 Bloom 筛选条件所使用的内存量。

## 绽放 ACLs
<a name="BloomFilters.ACL"></a>

与现有的每数据类型类别（@string、@hash 等）类似，添加了一个新的类别 @bloom，以简化对 Bloom 命令和数据的访问管理。没有其他现有的 Valkey 或 Redis OSS 命令属于 @bloom 类别。

有 3 个现有的 ACL 类别已更新为包含新 Bloom 命令：@read、@write 和 @fast。下表指示 Bloom 命令到相应类别的映射。


| Bloom 命令 | @read | @write | @fast | @bloom | 
| --- | --- | --- | --- | --- | 
|  BF.ADD  |    |  y  |  y  |  y  | 
|  BF.CARD  |  y  |    |  y  |  y  | 
|  BF.EXISTS  |  y  |    |  y  |  y  | 
|  BF.INFO  |  y  |    |  y  |  y  | 
|  BF.INSERT  |    |  y  |  y  |  y  | 
|  BF.MADD  |    |  y  |  y  |  y  | 
|  BF.MEXISTS  |  y  |    |  y  |  y  | 
|  BF.RESERVE  |  y  |    |  y  |  y  | 

## Bloom 筛选条件相关指标
<a name="BloomFilters.Metrics"></a>

提供了以下与 bloom 数据结构相关的 CloudWatch 指标：


| CW 指标 | 单位 | 无服务器/基于节点 | 说明 | 
| --- | --- | --- | --- | 
|  BloomFilterBasedCmds  |  计数  |  二者  |  Bloom 筛选命令的总数，包括读取和写入命令。  | 
|  BloomFilterBasedCmdsLatency  |  微秒  |  自行管理  |  所有 Bloom 筛选命令的延迟，包括读取和写入命令。  | 
|  BloomFilterBasedCmdsECPUs  |  计数  |  Serverless  |  ECPUs 由所有 Bloom 过滤器命令消耗，包括读取和写入命令。  | 

## Bloom 筛选命令
<a name="SupportedCommandsBloom"></a>

[Bloom 筛选命令](https://valkey.io/commands/#bloom)记录在 [Valkey.io](https://valkey.io/) 网站上。每个命令页面都全面概述了 Bloom 命令，包括其语法、行为、返回值和潜在的错误条件。


| Name | 说明 | 
| --- | --- | 
| [BF.ADD](https://valkey.io/commands/bf.add/) |  向 Bloom 筛选条件添加单个项目。如果该筛选条件尚不存在，则将创建。  | 
| [BF.CARD](https://valkey.io/commands/bf.card/) | 返回 Bloom 筛选条件的基数。 | 
| [BF.EXISTS](https://valkey.io/commands/bf.exists/) | 确定 Bloom 筛选条件是否包含指定项目。  | 
| [BF.INFO](https://valkey.io/commands/bf.info/) | 返回特定 Bloom 筛选条件的使用信息和属性。 | 
| [BF.INSERT](https://valkey.io/commands/bf.insert/) | 创建包含 0 个或更多项目的 Bloom 筛选条件，或者向现有 Bloom 筛选条件添加项目。 | 
| [BF.MADD](https://valkey.io/commands/bf.madd/) | 向 Bloom 筛选条件添加一个或多个项目。 | 
| [BF.MEXISTS](https://valkey.io/commands/bf.mexists/) | 确定 Bloom 筛选条件是否包含 1 个或多个项目。 | 
| [BF.RESERVE](https://valkey.io/commands/bf.reserve/) | 创建一个具有指定属性的空 Bloom 筛选条件。 | 

**注意**  
不支持 **BF.LOAD**。 ElastiCache它仅与 AOF 的使用有关，后者 ElastiCache 不支持。