thsheep / scrapy_redis_cluster

scrapy-redis的集群版,可以借助Redis集群实现海量网站的独立去重,避免单机内存不足的尴尬
138 stars 41 forks source link

BLOOMFILTER_BIT 设置为30时不可用 #2

Open Friday21 opened 5 years ago

Friday21 commented 5 years ago

当BLOOMFILTER_BIT设置为30时, 起不到去重效果。

> fp = '75d6587d87b3f4f3aa574b33dbd69ceeb9eafe7b'
> bf = BloomFilter(server, 'ldy4', 30, 6)
> bf.exists(fp)
0
> bf.insert(fp)
> bf.exists(fp)
0

当BLOOMFILTER_BIT 设置为22时没有问题, 不知道是什么原因

thsheep commented 5 years ago

image

我测试了一下没有问题啊?

Friday21 commented 5 years ago

哦? 我在本地又测了一下, 发现使用redis集群时会出现我说的情况, 用单个redis我本地测试也没有问题。

from scrapy_redis_cluster.bloomfilter import BloomFilter
from app import redis_client
redis_client.ping()
Out[8]: {'127.0.0.1:8102': True, '127.0.0.1:8101': True, '127.0.0.1:8100': True}
bf = BloomFilter(redis_client, 'test', 30, 6)
fp = '75d6587d87b3f4f3aa574b33dbd69ceeb9eafe7b'
bf.exists(fp)
Out[11]: 0
bf.insert(fp)
bf.exists(fp)
Out[13]: 0

import redis
server2 = redis.StrictRedis()
server2.ping()
Out[17]: True
bf2 = BloomFilter(server2, 'test2', 30, 6)
bf2.exists(fp)
Out[19]: 0
bf2.insert(fp)
bf2.exists(fp)
Out[21]: 1
thsheep commented 5 years ago

你连接集群用的是什么?

自己实现的还是其它?

from app import redis_client 就是这个

Friday21 commented 5 years ago

用的 rediscluster

from rediscluster import StrictRedisCluster

startup_nodes = [
    {'host': '127.0.0.1', 'port': 8100},
    {'host': '127.0.0.1', 'port': 8101},
    {'host': '127.0.0.1', 'port': 8102},
]

redis_conn = StrictRedisCluster(
            startup_nodes=startup_nodes,
            decode_responses=True,
            skip_full_coverage_check=True,
            max_connections=None)

很奇怪啊, 为甚用集群的时候22可以, 30不可以?

thsheep commented 5 years ago

是个例 还是全是哦?

Friday21 commented 5 years ago

当fp长度为40(scrapy fingerprint 默认长度)时, 都是不行的。 如果用短点的fp 比如“abcd”是可以的。

thsheep commented 5 years ago

好呢 我测试一下