Blooms.php 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace common\helpers;
  3. class Blooms
  4. {
  5. public $seeds = [1, 2, 3];
  6. public $key = 'bloom_filter';
  7. public $size = null;
  8. public function __construct()
  9. {
  10. $this->size = pow(2, 32);
  11. }
  12. public function addToBloomFilter($element)
  13. {
  14. foreach ($this->seeds as $seed) {
  15. $str = $element . $seed;
  16. $value = crc32($str);
  17. $int_value = $value % $this->size;
  18. $res = \Yii::$app->redis->setbit($this->key . $seed, $int_value, 1);
  19. if ($res) {
  20. return false;
  21. }
  22. }
  23. return true;
  24. }
  25. public function isInBloomFilter($element)
  26. {
  27. foreach ($this->seeds as $seed) {
  28. $str = $element . $seed;
  29. $value = crc32($str);
  30. $int_value = $value % $this->size;
  31. $res = \Yii::$app->redis->getbit($this->key. $seed, $int_value);
  32. if ($res == false) {
  33. return false;
  34. }
  35. }
  36. return true;
  37. }
  38. }