python模块之redisbloom redis布隆过滤器

一、简介

RedisBloom 是一个 Redis 模块,提供了布隆过滤器(Bloom Filter)、计数器(Count-Min Sketch)、Top-K(Top-K)、Top-K with expiry(Top-K with Expiration)和多样本(Cuckoo Filter)等数据结构的实现。它通过将这些数据结构存储在 Redis 中,为应用程序提供了高效的数据处理和查询功能。
以下是 RedisBloom 的一些主要特点和用途:

  1. 布隆过滤器(Bloom Filter):布隆过滤器是一种高效的数据结构,用于快速判断一个元素是否存在于集合中。它可以在常数时间内进行查询,并且具有很低的内存消耗。RedisBloom 提供了布隆过滤器的实现,可以用于去重、快速查找和过滤等应用场景。
  2. 计数器(Count-Min Sketch):计数器是一种用于近似计数的数据结构,可以用于统计元素出现的频率。RedisBloom 提供了 Count-Min Sketch 的实现,可以用于统计热门元素、流量分析等应用。
  3. Top-K:Top-K 是一种用于获取频率最高的元素的数据结构。RedisBloom 提供了 Top-K 的实现,可以高效地获取出现频率最高的元素。
  4. Top-K with expiry:Top-K with expiry 是一种带有过期时间的 Top-K 数据结构,可以设置元素的过期时间,并在过期后自动删除。这对于需要跟踪热门元素并定期更新的应用非常有用。
  5. 多样本(Cuckoo Filter):多样本是一种用于快速查找元素的数据结构,它可以在常数时间内进行查询,并且具有较低的内存消耗。RedisBloom 提供了多样本的实现,可以用于快速查找元素。
    使用 RedisBloom,你可以在 Redis 中利用这些数据结构来解决各种实际问题,如去重、近似计数、热门元素统计、快速查找等。
    RedisBloom 的官方文档:https://redis.io/docs/data-types/probabilistic/bloom-filter/
二、安装
pip install redisbloom
三、RedisBloom Python 客户端库中的一些类、函数和方法的简要说明
  1. redisbloom.client.Redis:Redis 类,它继承自 Redis 客户端库中的 redis.Redis 类。你可以使用它来连接到 Redis 服务器,并执行 RedisBloom 相关的操作。
  2. redisbloom.client.bool_ok():用于检查 Redis 命令的返回值是否为布尔类型的 OK。
  3. redisbloom.client.parseToList():用于将 Redis 命令的返回值解析为列表。
  4. redisbloom.client.spaceHolder():用于生成 Redis 命令的占位符。
  5. redisbloom.client.Client:用于与 RedisBloom 模块进行交互。它提供了一组方法来执行布隆过滤器、计数器、Top-K 等数据结构的操作。
  6. redisbloom.client.CFInfo:用于获取布隆过滤器的信息。
  7. redisbloom.client.BFInfo:用于获取布隆过滤器的信息。
  8. redisbloom.client.CMSInfo:用于获取计数器的信息。
  9. redisbloom.client.TDigestInfo:用于获取 TDigest(Top-K 和分位数)的信息。
  10. redisbloom.client.TopKInfo:用于获取 Top-K 数据结构的信息。
  11. redisbloom.client.Pipeline:用于执行 RedisBloom 操作的批量管道。它可以提高操作的效率。
四、创建RedisBloom过滤器客户端:from redisbloom.client import Client,继承redis
  1. redisBloomFilter = Client(host=‘localhost’, port=6379,…):创建redisbloom过滤器对象
  2. redisBloomFilter.appendBucketSize(params, bucket_size): 将 bucket_size 参数添加到 params 中,用于创建 Count-Min Sketch(CMS)过滤器时指定桶的大小。
  3. redisBloomFilter.appendCapacity(params, capacity): 将 capacity 参数添加到 params 中,用于创建 Bloom 过滤器或 Count-Min Sketch(CMS)过滤器时指定容量。
  4. redisBloomFilter.appendError(params, error): 将 error 参数添加到 params 中,用于创建 Count-Min Sketch(CMS)过滤器时指定误差率。
  5. redisBloomFilter.appendExpansion(params, expansion): 将 expansion 参数添加到 params 中,用于创建 Bloom 过滤器时指定扩展因子。
  6. redisBloomFilter.appendItems(params, items): 将 items 参数添加到 params 中,用于指定要添加到 Bloom 过滤器或 Count-Min Sketch(CMS)过滤器中的元素。
  7. redisBloomFilter.appendItemsAndIncrements(params, items, increments): 将 items 参数和 increments 参数添加到 params 中,用于指定要在 Count-Min Sketch(CMS)过滤器中增加或减少的元素及其增量。
  8. redisBloomFilter.appendMaxIterations(params, max_iterations): 将 max_iterations 参数添加到 params 中,用于创建 Count-Min Sketch(CMS)过滤器时指定最大迭代次数。
  9. redisBloomFilter.appendNoCreate(params, noCreate): 将 noCreate 参数添加到 params 中,用于指定在 Bloom 过滤器或 Count-Min Sketch(CMS)过滤器不存在时是否创建新的过滤器。
  10. redisBloomFilter.appendNoScale(params, noScale): 将 noScale 参数添加到 params 中,用于指定在 Count-Min Sketch(CMS)过滤器中是否进行自动缩放。
  11. redisBloomFilter.appendValuesAndWeights(params, items, weights): 将 items 参数和 weights 参数添加到 params 中,用于指定要添加到 Top-K 过滤器中的元素及其权重。
  12. redisBloomFilter.appendWeights(params, weights): 将 weights 参数添加到 params 中,用于指定要添加到 Top-K 过滤器中的元素的权重。
  13. redisBloomFilter.bfCreate(key, errorRate, capacity, expansion=None, noScale=None): 创建一个 Bloom 过滤器,使用给定的 key、误差率 errorRate、容量 capacity,可选参数包括扩展因子 expansion 和是否进行自动缩放 noScale。
  14. redisBloomFilter.bfExists(key, item): 检查 Bloom 过滤器中是否存在指定的 item。
  15. redisBloomFilter.bfInfo(key): 获取 Bloom 过滤器的信息,包括误差率、容量、哈希函数数量等。
  16. redisBloomFilter.bfInsert(key, items, capacity=None, error=None, noCreate=None, expansion=None, noScale=None): 向 Bloom 过滤器中插入指定的 items,可选参数包括容量 capacity、误差率 error、是否创建新过滤器 noCreate、扩展因子 expansion 和是否进行自动缩放 noScale。
  17. redisBloomFilter.bfLoadChunk(key, iter, data): 将序列化的 Bloom 过滤器数据块加载到指定的 key 中。
  18. redisBloomFilter.bfMAdd(key, *items): 向 Bloom 过滤器中批量添加多个 items。
  19. redisBloomFilter.bfMExists(key, *items): 检查 Bloom 过滤器中多个 items 是否存在。
  20. redisBloomFilter.bfScandump(key, iter): 以迭代方式获取 Bloom 过滤器的数据块。
  21. redisBloomFilter.cfAdd(key, item): 将指定的 item 添加到 Count-Min Sketch(CMS)过滤器中。
  22. redisBloomFilter.cfAddNX(key, item): 当指定的 item 不存在时,将其添加到 Count-Min Sketch(CMS)过滤器中。
  23. redisBloomFilter.cfDel(key, item): 从 Count-Min Sketch(CMS)过滤器中删除指定的 item。
  24. redisBloomFilter.cfCount(key, item): 获取 Count-Min Sketch(CMS)过滤器中指定 item 的计数。
  25. redisBloomFilter.cfCreate(key, capacity, expansion=None, bucket_size=None, max_iterations=None): 创建一个 Count-Min Sketch(CMS)过滤器,使用给定的 key、容量 capacity,可选参数包括扩展因子 expansion、桶大小 bucket_size 和最大迭代次数 max_iterations。
  26. redisBloomFilter.cfExists(key, item): 检查 Count-Min Sketch(CMS)过滤器中是否存在指定的 item。
  27. redisBloomFilter.cfInfo(key): 获取 Count-Min Sketch(CMS)过滤器的信息,包括容量、桶大小、哈希函数数量等。
  28. redisBloomFilter.cfInsert(key, items, capacity=None, nocreate=None): 向 Count-Min Sketch(CMS)过滤器中插入指定的 items,可选参数包括容量 capacity 和是否创建新过滤器 nocreate。
  29. redisBloomFilter.cfInsertNX(key, items, capacity=None, nocreate=None): 当指定的 items 不存在时,将其插入到 Count-Min Sketch(CMS)过滤器中。
  30. redisBloomFilter.cfLoadChunk(key, iter, data): 将序列化的 Count-Min Sketch(CMS)过滤器数据块加载到指定的 key 中。
  31. redisBloomFilter.cfScandump(key, iter): 以迭代方式获取 Count-Min Sketch(CMS)过滤器的数据块。
  32. redisBloomFilter.cmsInfo(key): 获取 Count-Min Sketch(CMS)数据结构的信息,包括宽度、深度等。
  33. redisBloomFilter.cmsMerge(destKey, numKeys, srcKeys, weights=[]): 将多个 Count-Min Sketch(CMS)数据结构合并到目标数据结构中。
  34. redisBloomFilter.cmsQuery(key, *items): 查询 Count-Min Sketch(CMS)数据结构中多个 items 的计数。
  35. redisBloomFilter.cmsIncrBy(key, items, increments): 对 Count-Min Sketch(CMS)数据结构中的多个 items 进行增量操作。
  36. redisBloomFilter.cmsInitByDim(key, width, depth): 使用指定的宽度 width 和深度 depth 初始化 Count-Min Sketch(CMS)数据结构。
  37. redisBloomFilter.cmsInitByProb(key, error, probability): 使用指定的误差率 error 和概率 probability 初始化 Count-Min Sketch(CMS)数据结构。
  38. redisBloomFilter.pipeline(transaction=True, shard_hint=None): 创建一个 Redis pipeline 对象,用于批量执行多个命令。
  39. redisBloomFilter.tdigestCdf(key, value): 获取 T-Digest 数据结构中小于等于指定 value 的累积分布函数值。
  40. redisBloomFilter.tdigestInfo(key): 获取 T-Digest 数据结构的信息,包括压缩率等。
  41. redisBloomFilter.tdigestAdd(key, values, weights): 向 T-Digest 数据结构中添加指定的 values 和对应的 weights。
  42. redisBloomFilter.tdigestMax(key): 获取 T-Digest 数据结构中的最大值。
  43. redisBloomFilter.tdigestCreate(key, compression): 创建一个 T-Digest 数据结构,使用给定的 key 和压缩率 compression。
  44. redisBloomFilter.tdigestMerge(toKey, fromKey): 将一个 T-Digest 数据结构从源键 fromKey 合并到目标键 toKey。
  45. redisBloomFilter.tdigestMin(key): 获取 T-Digest 数据结构中的最小值。
  46. redisBloomFilter.tdigestQuantile(key, quantile): 获取 T-Digest 数据结构中指定分位数 quantile 的值。
  47. redisBloomFilter.tdigestReset(key): 重置 T-Digest 数据结构,将其清空。
  48. redisBloomFilter.topkCount(key, *items): 获取 Top-K 数据结构中多个 items 的计数。
  49. redisBloomFilter.topkInfo(key): 获取 Top-K 数据结构的信息,包括 K 值、宽度、深度等。
  50. redisBloomFilter.topkAdd(key, *items): 向 Top-K 数据结构中添加多个 items。
  51. redisBloomFilter.topkList(key): 获取 Top-K 数据结构中的前 K 个元素。
  52. redisBloomFilter.topkListWithCount(key): 获取 Top-K 数据结构中的前 K 个元素及其计数。
  53. redisBloomFilter.topkQuery(key, *items): 查询 Top-K 数据结构中多个 items 的计数。
  54. redisBloomFilter.topkReserve(key, k, width, depth, decay): 创建一个 Top-K 数据结构,使用给定的 key、K 值 k、宽度 width、深度 depth 和衰减因子 decay。
  55. from redisbloom.client import Client下的常量
    redisBloomFilter.BF_ADD: Bloom 过滤器命令,用于向 Bloom 过滤器中添加元素。
    redisBloomFilter.BF_EXISTS: Bloom 过滤器命令,用于检查元素是否存在于 Bloom 过滤器中。
    redisBloomFilter.BF_INFO: Bloom 过滤器命令,用于获取 Bloom 过滤器的信息。
    redisBloomFilter.BF_INSERT: Bloom 过滤器命令,用于向 Bloom 过滤器中插入元素。
    redisBloomFilter.BF_LOADCHUNK: Bloom 过滤器命令,用于加载 Bloom 过滤器的数据块。
    redisBloomFilter.BF_MADD: Bloom 过滤器命令,用于批量添加多个元素到 Bloom 过滤器中。
    redisBloomFilter.BF_MEXISTS: Bloom 过滤器命令,用于批量检查多个元素是否存在于 Bloom 过滤器中。
    redisBloomFilter.BF_RESERVE: Bloom 过滤器命令,用于创建一个 Bloom 过滤器。
    redisBloomFilter.BF_SCANDUMP: Bloom 过滤器命令,用于以迭代方式获取 Bloom 过滤器的数据块。
    redisBloomFilter.CF_ADD: Count-Min Sketch(CMS)命令,用于向 Count-Min Sketch(CMS)过滤器中添加元素。
    redisBloomFilter.CF_ADDNX: Count-Min Sketch(CMS)命令,用于当元素不存在时向 Count-Min Sketch(CMS)过滤器中添加元素。
    redisBloomFilter.CF_INFO: Count-Min Sketch(CMS)命令,用于获取 Count-Min Sketch(CMS)过滤器的信息。
    redisBloomFilter.CF_DEL: Count-Min Sketch(CMS)命令,用于从 Count-Min Sketch(CMS)过滤器中删除元素。
    redisBloomFilter.CF_RESERVE: Count-Min Sketch(CMS)命令,用于创建一个 Count-Min Sketch(CMS)过滤器。
    redisBloomFilter.CF_COUNT: Count-Min Sketch(CMS)命令,用于获取 Count-Min Sketch(CMS)过滤器中元素的计数。
    redisBloomFilter.CF_EXISTS: Count-Min Sketch(CMS)命令,用于检查元素是否存在于 Count-Min Sketch(CMS)过滤器中。
    redisBloomFilter.CF_INSERT: Count-Min Sketch(CMS)命令,用于向 Count-Min Sketch(CMS)过滤器中插入元素。
    redisBloomFilter.CF_INSERTNX: Count-Min Sketch(CMS)命令,用于当元素不存在时向 Count-Min Sketch(CMS)过滤器中插入元素。
    redisBloomFilter.CF_LOADCHUNK: Count-Min Sketch(CMS)命令,用于加载 Count-Min Sketch(CMS)过滤器的数据块。
    redisBloomFilter.CF_SCANDUMP: Count-Min Sketch(CMS)命令,用于以迭代方式获取 Count-Min Sketch(CMS)过滤器的数据块。
    redisBloomFilter.CMS_INCRBY: Count-Min Sketch(CMS)命令,用于对 Count-Min Sketch(CMS)过滤器中的元素进行增量操作。
    redisBloomFilter.CMS_INFO: Count-Min Sketch(CMS)命令,用于获取 Count-Min Sketch(CMS)过滤器的信息。
    redisBloomFilter.CMS_INITBYDIM: Count-Min Sketch(CMS)命令,用于使用指定的宽度和深度初始化 Count-Min Sketch(CMS)过滤器。
    redisBloomFilter.CMS_INITBYPROB: Count-Min Sketch(CMS)命令,用于使用指定的误差率和概率初始化 Count-Min Sketch(CMS)过滤器。
    redisBloomFilter.CMS_MERGE: Count-Min Sketch(CMS)命令,用于将多个 Count-Min Sketch(CMS)过滤器合并到目标过滤器中。
    redisBloomFilter.CMS_QUERY: Count-Min Sketch(CMS)命令,用于查询 Count-Min Sketch(CMS)过滤器中的元素计数。
    redisBloomFilter.TDIGEST_ADD: T-Digest 命令,用于向 T-Digest 数据结构中添加值。
    redisBloomFilter.TDIGEST_INFO: T-Digest 命令,用于获取 T-Digest 数据结构的信息。
    redisBloomFilter.TDIGEST_CREATE: T-Digest 命令,用于创建一个 T-Digest 数据结构。
    redisBloomFilter.TDIGEST_CDF: T-Digest 命令,用于获取 T-Digest 数据结构中小于等于指定值的累积分布函数值。
    redisBloomFilter.TDIGEST_MAX: T-Digest 命令,用于获取 T-Digest 数据结构中的最大值。
    redisBloomFilter.TDIGEST_MERGE: T-Digest 命令,用于将一个 T-Digest 数据结构合并到另一个数据结构中。
    redisBloomFilter.TDIGEST_MIN: T-Digest 命令,用于获取 T-Digest 数据结构中的最小值。
    redisBloomFilter.TDIGEST_QUANTILE: T-Digest 命令,用于获取 T-Digest 数据结构中指定分位数的值。
    redisBloomFilter.TDIGEST_RESET: T-Digest 命令,用于重置 T-Digest 数据结构。
    redisBloomFilter.TOPK_ADD: Top-K 命令,用于向 Top-K 数据结构中添加元素。
    redisBloomFilter.TOPK_INFO: Top-K 命令,用于获取 Top-K 数据结构的信息。
    redisBloomFilter.TOPK_LIST: Top-K 命令,用于获取 Top-K 数据结构
    redisBloomFilter.TOPK_RESERVE: Top-K 命令,用于创建一个 Top-K 数据结构。它将为 Top-K 数据结构分配所需的内存空间。
    redisBloomFilter.TOPK_COUNT: Top-K 命令,用于获取 Top-K 数据结构中指定元素的计数。它返回指定元素在 Top-K 数据结构中的出现次数。
    redisBloomFilter.TOPK_QUERY: Top-K 命令,用于查询 Top-K 数据结构中指定元素的计数和排名。它返回指定元素的计数和在 Top-K 数据结构中的排名信息。
    
五、布隆过滤器的信息:from redisbloom.client import CFInfo
  1. CFInfo.size: 获取 Count-Min Sketch(CMS)过滤器的大小,即过滤器使用的内存大小。
  2. CFInfo.filterNum: 获取 Count-Min Sketch(CMS)过滤器的数量,即过滤器的个数。
  3. CFInfo.insertedNum: 获取 Count-Min Sketch(CMS)过滤器中插入的元素数量。
  4. CFInfo.expansionRate: 获取 Count-Min Sketch(CMS)过滤器的扩展率,即过滤器的扩展比例。
  5. CFInfo.bucketNum: 获取 Count-Min Sketch(CMS)过滤器的桶数,即过滤器中的桶的数量。
  6. CFInfo.bucketSize: 获取 Count-Min Sketch(CMS)过滤器中每个桶的大小。
  7. CFInfo.deletedNum: 获取 Count-Min Sketch(CMS)过滤器中已删除的元素数量。
  8. CFInfo.maxIteration: 获取 Count-Min Sketch(CMS)过滤器的最大迭代次数,即过滤器进行迭代操作的最大次数。
六、布隆过滤器的信息:from redisbloom.client import BFInfo
  1. BFInfo.size: 获取 Bloom 过滤器的大小,即过滤器使用的内存大小。
  2. BFInfo.filterNum: 获取 Bloom 过滤器的数量,即过滤器的个数。
  3. BFInfo.insertedNum: 获取 Bloom 过滤器中插入的元素数量。
  4. BFInfo.expansionRate: 获取 Bloom 过滤器的扩展率,即过滤器的扩展比例。
  5. BFInfo.capacity: 获取 Bloom 过滤器的容量,即过滤器可以容纳的最大元素数量。
七、计数器的信息:from redisbloom.client import CMSInfo
  1. CMSInfo.count: 获取 Count-Min Sketch(CMS)过滤器中元素的计数。
  2. CMSInfo.width: 获取 Count-Min Sketch(CMS)过滤器的宽度,即每个哈希函数的输出位数。
  3. CMSInfo.depth: 获取 Count-Min Sketch(CMS)过滤器的深度,即哈希函数的数量。
八、TDigest(Top-K 和分位数)的信息:from redisbloom.client import TDigestInfo
  1. TDigestInfo.capacity: 获取 TDigest 的容量,即可以存储的数据点的最大数量。
  2. TDigestInfo.compression: 获取 TDigest 的压缩率,即用于控制数据点合并的压缩因子。
  3. TDigestInfo.mergedNodes: 获取 TDigest 中已合并的节点数量。
  4. TDigestInfo.mergedWeight: 获取 TDigest 中已合并节点的总权重。
  5. TDigestInfo.unmergedNodes: 获取 TDigest 中未合并的节点数量。
  6. TDigestInfo.totalCompressions: 获取 TDigest 总共进行的压缩次数。
  7. TDigestInfo.unmergedWeight: 获取 TDigest 中未合并节点的总权重。
九、Top-K 数据结构的信息:from redisbloom.client import TopKInfo
  1. TopKInfo.depth: 获取 Top-K 数据结构的深度,即哈希函数的数量。
  2. TopKInfo.width: 获取 Top-K 数据结构的宽度,即每个哈希函数的输出位数。
  3. TopKInfo.k: 获取 Top-K 数据结构中保留的最高频率元素的数量。
  4. TopKInfo.decay: 获取 Top-K 数据结构的衰减因子,用于控制元素频率的衰减速度。
十、执行 RedisBloom 操作的批量管道:from redisbloom.client import Pipeline,继承redis中的Pipeline
  1. pipeline = Pipeline(connection_pool, response_callbacks, transaction, shard_hint):创建管道对象
    connection_pool:一个 Redis 连接池对象,用于管理与 Redis 服务器的连接。
    response_callbacks:一个可选的回调函数列表,用于处理每个命令的响应结果。
    transaction:一个布尔值,指示是否将命令打包为事务。默认为 False,表示不使用事务。
    shard_hint:一个用于分片的提示值,用于指示哪个 Redis 节点应该处理这些命令。默认为 None,表示不进行分片。
    
  2. pipeline.reset(): 重置管道,清除已缓存的命令。
  3. pipeline.multi(): 开始一个事务块,将后续的命令添加到事务中。
  4. pipeline.execute_command(*args, **kwargs): 执行 Redis 命令,并将其添加到管道中。
  5. pipeline.immediate_execute_command(*args, **options): 立即执行 Redis 命令,而不将其添加到管道中。
  6. pipeline.pipeline_execute_command(*args, **options): 在管道中执行 Redis 命令。
  7. pipeline.raise_first_error(commands, response): 在执行管道中的命令时,如果出现错误,将引发第一个错误。
  8. pipeline.annotate_exception(exception, number, command): 为异常添加命令和序号的注释。
  9. pipeline.parse_response(connection, command_name, **options): 解析 Redis 响应。
  10. pipeline.load_scripts(): 加载 Redis 脚本。
  11. pipeline.execute(raise_on_error=True): 执行管道中的所有命令。
  12. pipeline.watch(*names): 监视给定的键,以便在执行事务期间检测到键的更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发知识点-golang

golang语言学习 环境搭建win10配置go环境 ubuntu20.04安装golang介绍下载 Go 压缩包调整环境变量验证 Go 安装过程 环境搭建 win10配置go环境 中文网进行下载 https://studygolang.com/dl 配置环境变量 增加GOROOT: 新建 -->变量名为: GOROOT(必须大写) 变量值: 你安装…

2311rust无畏并发.

原文 Rust无畏并发 Rust是为了解决两个麻烦问题: 1,如何安全系统编程 2,如何无畏并发 最初,这些问题似乎是无关的,但令惊讶的是,方法竟然是相同的:使Rust安全的相同工具也可帮助解决并发问题. 内存安全和并发错误,一般认为是代码在不应访问数据时访问数据.Rust依靠所有权为…

删除word最后一页之后的空白页

最近编辑word比较多,有时最后一页(最后一页内容还有可能是表格)之后,还有一页空白页,单独按下backspace、del都删不掉,很让人着急。 经过查询有几种方法: (1)点击选中空…

12、填写NGINX配置部署前端;运行jar部署后端

后端可以部署的方式,首先直接运行jar是肯定可以的。此外,可以单独开docker容器运行在容器中。 但是这里运行在容器中必要性,其实并不大。 当前我们直接运行jar来运行后端。后面推出集成docker。 直接运行jar包的方式,首先需要打…

Spark Streaming

Spark Streaming Spark Streaming概念Spark Streaming操作1 netcat传入数据2 DStream 创建3 自定义数据源4 接受kafka数据DStream 转换1无状态的转换2有状态的转换updateSateByKeyWindowOperations Spark Streaming概念 Spark Streaming 用于流式数据的处理。 Spark Streaming…

临界资源,临界区,通信的干扰问题(互斥),信号量(本质,上下文切换问题,原子性,自身的安全性,操作)

目录 引入 概念 临界资源 临界区 干扰存在原因 互斥 信号量 引入 举例 概念 介绍 表示可用资源数 表示等待进程数 申请信号量 信号量的本质 全局变量? 共享内存? 不安全问题 -- 上下文切换 原子性 信号量自身的安全性 原子操作的意义 操作 引入 通信…

Collection集合 迭代器遍历Iterator 和集合增强For

迭代器遍历Iterator 标准写法: 增强For for(类型 名称 : 集合 ) 举例: 不仅可以集合也可以数组 底层仍然是iterator

【MySQL】约束

一、基本概念 1、什么是约束 约束是表级的强制规定 2、为什么使用约束 是为了保证表中数据的完整性,完整性又可以拆分为精确性和可靠性 3、怎么去保证数据完整性呢,从以下四个角度进行考虑 实体完整性:一张表中,不能存在两条完…

Power Apps-库组件连接数据表

点击添加数据 可以选择Excel或SharePoint导入 选择右侧边栏中的网站,再选择想要连接的数据表 点击插入,选择布局中的某个库, 选中它可以点击上方的布局,选择想要的样式 右侧选择数据源中的表就将组件与数据表连接起来了 如果想修…

Vite创建React项目,另外一种更加简单的方法

在上一篇blog中一个一个安装依赖dependencies,有没有一步到位的方法呢,有! 参考《React 18 Design Patterns and Best Practices Design, build, and deploy production-ready web applications with React》4th 第一章倒数第二节Vite as a solution有个…

flutter生态一统甜夏 @Android @ios @windowse @macos @linux @Web

(愿景)G o o g l e 中 国flutter生态一统天下(IT) Web Android ios Windowse Macos Linux Google中国https://space.bilibili.com/64169458 https://pub-web.flutter-io.cn 构建 Flutter Web 应用 构建 Flutter Web 应用 - Flutter 中文文档 - Flutter 中文开发者网站 …

Packet Tracer路由器连接终端设备怎么配置?

在Packet Tracer中配置一台路由器和三台终端设备可以帮助你建立一个简单的局域网,以下是配置的基本步骤: 打开Packet Tracer,从左侧设备栏中拖拽一个路由器和三个终端设备到工作区。 连接设备:使用网线将路由器的端口与每台终端设…

vue3+setup 解决:this.$refs引用子组件报错 is not a function

一、如果在父组件中以下四步都没问题的话&#xff0c;再看下面步骤 二、如果父组件引用的是index页面 请在 头部加上以下代码 &#xff08;如果是form页面请忽略这一步&#xff09; <template> <a-modalv-model:visible"visible"title"头部名称&…

python非线性规划

Python中非线性规划通常使用优化库来处理&#xff0c;其中SciPy库是一个流行的选择。SciPy包含了用于非线性规划的优化算法&#xff0c;可以用来解决各种非线性优化问题。下面是一个简单的非线性规划的示例&#xff0c;使用SciPy来最小化一个非线性目标函数&#xff1a; 首先&a…

SpringCloud 微服务全栈体系(十三)

第十一章 分布式搜索引擎 elasticsearch 二、索引库操作 索引库就类似数据库表&#xff0c;mapping 映射就类似表的结构。 我们要向 es 中存储数据&#xff0c;必须先创建“库”和“表”。 1. mapping 映射属性 mapping 是对索引库中文档的约束&#xff0c;常见的 mapping …

SpringDataJpa(二)

三、Spring Data JPA概述 Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架&#xff0c;可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能&#xff0c;且易于扩展&#xff01;学习并使用 Spring D…

汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)

1 数据对象的创建 CtrlH打开Model Explorer&#xff0c;在Base workspace中点击工具栏add&#xff0c;出现如下界面&#xff0c; 可以看到Simulink提供了多种数据类型 Matlab Variable&#xff1a;Simulink.Parameter&#xff1a;使用该数据对象表示工程应用中的标定量Simuli…

js:React中使用classnames实现按照条件将类名连接起来

参考文档 https://www.npmjs.com/package/classnameshttps://github.com/JedWatson/classnames 安装 npm install classnames示例 import classNames from "classnames";// 字符串合并 console.log(classNames("foo", "bar")); // foo bar//…

安卓常见设计模式6------代理模式(Kotlin版)

1. W1 是什么&#xff0c;什么是代理模式&#xff1f;​ 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;用于在访问对象之前或之后提供额外的功能或控制。代理模式可以用于各种情况&#xff0c;例如延迟加载、权限控制、日志记录等。​ 2. …

高性能网络编程 - The C10M problem

文章目录 Pre概述回顾C10K实现C10M的挑战思路总结 Pre 高性能网络编程 - The C10K problem 以及 网络编程技术角度的解决思路 概述 在接下来的10年里&#xff0c;因为IPv6协议下每个服务器的潜在连接数都是数以百万级的&#xff0c;单机服务器处理数百万的并发连接&#xff0…