redis集群的一些特性
fluster的Python项目详细描述
一个redis集群,当单点故障让您感到慌乱时使用。
概述
redis fluster是一个非常有限的redis池/集群实现,它使一些常见用例的分片变得简单。
快速启动
importredisfromflusterimportFlusterClustercluster=FlusterCluster([redis.Redis(6379),redis.Redis(6380)])whileTrue:forkeyin('foo','bar'):try:client=cluster.get_client(key)client.incr(key,1)client.get(key)exceptConnectionError:client=cluster.get_client(key)client.incr(key,1)client.get(key)time.sleep(1)
有限,如何?我想用这个做任何事!
简单地说,不要这样做。fluster维护到各种redis实例的连接池,并将根据提供的shard key返回到一个实例的连接。如果一个掉下来,它会被放在一个罚篮里,直到它回来,这时它又可以使用了。
在not point,键是重复的,当节点删除/连接时,键也不会重新分配。如果您正在编写incr语句,而节点关闭,那么现在您正在将它们写入另一个实例。一旦原始实例返回,您就得到了同一个键的两组值。这将是无缝的,你的程序不会崩溃,所以也许这就足够了。
那它有什么用呢?
缓存和临时数据。理想的情况是下降比重复数据更糟糕。如果一个redis fluster节点宕机,并且有两个缓存副本,那么这可能不是问题。你已经在数据上设置了过期时间,对吧?
同样,如果使用列表将队列分发到多个redis实例,那么一个删除和加入也不是问题。当它关闭时,队列中的项目会转到其他地方,如果您的工作人员从所有可用实例中读取数据,则不会丢失任何内容,或者完全不同。
redis集群呢?
看起来很棒!不幸的是,它很新,还没有准备好投入生产使用。如果运气好的话,这将实现它的所有承诺,而这个项目可能会悄然消失。