基于Redis的Bloomfilter去重(基于git上的pybloom修改,误差可测)

1.pybloom.py

# -*- encoding: utf-8 -*-
from __future__ import absolute_import
import math
import hashlib
from pybloom.utils import range_fn, running_python_3
from struct import unpack, pack, calcsize


__version__ = '2.0'
__author__ = "Jay Baird <jay.baird@me.com>, Bob Ippolito <bob@redivi.com>,\
               Marius Eriksen <marius@monkey.org>,\
               Alex Brasetvik <alex@brasetvik.com>,\
               Matt Bachmann <bachmann.matt@gmail.com>,\
              "


def make_hashfuncs(num_slices, num_bits):
    if num_bits >= (1 << 31):
        fmt_code, chunk_size = 'Q', 8
    elif num_bits >= (1 << 15):
        fmt_code, chunk_size = 'I', 4
    else:
        fmt_code, chunk_size = 'H', 2
    total_hash_bits = 8 * num_slices * chunk_size
    if total_hash_bits > 384:
        hashfn = hashlib.sha512
    elif total_hash_bits > 256:
        hashfn = hashlib.sha384
    elif total_hash_bits > 160:
        hashfn = hashlib.sha256
    elif total_hash_bits > 128:
        hashfn = hashlib.sha1
    else:
        hashfn = hashlib.md5
    fmt = fmt_code * (hashfn().digest_size // chunk_size)
    num_salts, extra = divmod(num_slices, len(fmt))
    if extra:
        num_salts += 1
    salts = tuple(hashfn(hashfn(pack('I', i)).digest()) for i in range_fn(num_salts))

   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisBloomRedis 的一个模块,它提供了一系列的数据结构和算法,用于在 Redis 中处理大规模数据集。RedisBloom 的目标是在 Redis 中实现高性能的布隆过滤器、计数器、Top-K、缓存和推荐等功能。 要使用 RedisBloom,首先需要确保你已经安装了 Redis,并且 Redis 的版本高于 4.0。然后,你需要下载并编译 RedisBloom 模块,并将其加载到 Redis 中。 你可以在 RedisBloom 的官方 GitHub 页面(https://github.com/RedisBloom/RedisBloom)上找到下载和编译 RedisBloom 的详细说明。 安装完成后,你就可以在 Redis 中使用 RedisBloom 提供的数据结构和算法了。例如,你可以创建一个布隆过滤器来快速判断一个元素是否存在于一个大规模的集合中,或者使用 Top-K 结构来获取最常出现的元素。 下面是一些 RedisBloom 常用的命令示例: 1. 创建一个布隆过滤器: BF.ADD myfilter element1 element2 # 将 element1 和 element2 加入名为 myfilter 的布隆过滤器 2. 判断一个元素是否存在于布隆过滤器中: BF.EXISTS myfilter element1 # 判断 element1 是否存在于 myfilter 布隆过滤器中 3. 创建一个计数器: CF.ADD mycounter element1 # 将 element1 加入名为 mycounter 的计数器 4. 获取计数器的值: CF.COUNT mycounter # 获取名为 mycounter 的计数器的值 以上只是 RedisBloom 提供的一小部分命令示例,更多的命令和用法可以参考 RedisBloom 官方文档。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值