1

我有一个用 Ruby 编写的 redis 数据库和客户端。这个数据库的大小是多少?

def follow!(user)
  $redis.multi do
    $redis.sadd(self.redis_key(:following), user.id)
    $redis.sadd(user.redis_key(:followers), self.id)
  end
end

def redis_key(str)
  "user:#{self.id}:#{str}"
end

# Usage:
userA.follow!(userB)

我认为是2N,但有人告诉我是N^2,什么是真的?

4

1 回答 1

3

Redis 数据库的大小是 INFO 返回的 used_memory_human 值。由于内存优化,从给定的数据结构中猜测实际大小并不容易。最好在有限数量的项目上进行测试并进行推断。

在这里,假设 N 是用户数,您将在 Redis 键空间中有 2N 个集合。这些集合的大小取决于追随者的数量。

如果所有用户都有一个关注者并且只有一个关注者,您将获得 2N 组 1 个项目,因此 2N 个项目。如果所有用户都将所有其他用户作为关注者,您将获得 2N 组 (N-1) 个项目,总共有 2N(N-1) 个项目。

于 2012-07-16T17:17:29.650 回答