9 个不稳定版本

0.5.1 2023年6月14日
0.5.0 2022年4月6日
0.4.0 2018年1月14日
0.3.2 2016年4月8日
0.3.0 2015年5月1日

#34缓存 中排名

Download history 3362/week @ 2024-03-14 3016/week @ 2024-03-21 2895/week @ 2024-03-28 2719/week @ 2024-04-04 2115/week @ 2024-04-11 2569/week @ 2024-04-18 2618/week @ 2024-04-25 3264/week @ 2024-05-02 2776/week @ 2024-05-09 3177/week @ 2024-05-16 2877/week @ 2024-05-23 2395/week @ 2024-05-30 2765/week @ 2024-06-06 3730/week @ 2024-06-13 3331/week @ 2024-06-20 2806/week @ 2024-06-27

13,066 每月下载量
用于 4 个 Crates(3 个直接使用)

MIT/Apache

15KB
238 代码行

Rust 的一致性哈希

Build & Test

一致性哈希是一种特殊的哈希算法,当哈希表缩放并使用一致性哈希时,平均只需要重映射 K/n 个键,其中 K 是键的数量,n 是槽的数量。

用法

[dependencies]
conhash = "*"
extern crate conhash;

use conhash::{ConsistentHash, Node};

#[derive(Debug, Clone, Eq, PartialEq)]
struct ServerNode {
    host: String,
    port: u16,
}

impl Node for ServerNode {
    fn name(&self) -> String {
        format!("{}:{}", self.host, self.port)
    }
}

impl ServerNode {
    fn new(host: &str, port: u16) -> ServerNode {
        ServerNode {
            host: host.to_owned(),
            port: port,
        }
    }
}

fn main() {
    let nodes = [
        ServerNode::new("localhost", 12345),
        ServerNode::new("localhost", 12346),
        ServerNode::new("localhost", 12347),
        ServerNode::new("localhost", 12348),
        ServerNode::new("localhost", 12349),
        ServerNode::new("localhost", 12350),
        ServerNode::new("localhost", 12351),
        ServerNode::new("localhost", 12352),
        ServerNode::new("localhost", 12353),
    ];

    const REPLICAS: usize = 20;

    let mut ch = ConsistentHash::new();

    for node in nodes.iter() {
        ch.add(node, REPLICAS);
    }

    assert_eq!(ch.len(), nodes.len() * REPLICAS);

    let node_for_hello = ch.get("hello").unwrap().clone();
    assert_eq!(node_for_hello, ServerNode::new("localhost", 12347));

    ch.remove(&ServerNode::new("localhost", 12350));
    assert_eq!(ch.get("hello").unwrap().clone(), node_for_hello);
}

许可

在以下任一许可下发布:

任选其一。

贡献

除非你明确声明,否则任何旨在包含在作品中的贡献,根据 Apache-2.0 许可证的定义,将按照上述方式双重许可,而不附加任何额外的条款或条件。

依赖

~105KB