zoukankan      html  css  js  c++  java
  • 哈希一致性算法实现思路

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace HashDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                //list.key虚拟节点 list.value实际节点
                Dictionary<string, string> list = new Dictionary<string, string>();
                list.Add("192.168.1.1", "192.168.1.1");
                list.Add("192.168.1.2", "192.168.1.2");
                list.Add("192.168.1.3", "192.168.1.3");
                list.Add("192.168.1.4", "192.168.1.4");
                list.Add("192.168.1.5", "192.168.1.5");
                list.Add("192.168.1.6", "192.168.1.1");
                list.Add("192.168.1.7", "192.168.1.2");
                list.Add("192.168.1.8", "192.168.1.3");
                list.Add("192.168.1.9", "192.168.1.4");
                list.Add("192.168.1.10", "192.168.1.5");
    
                //节点的hashcode和节点的实际地址
                SortedDictionary<int, string> dic = new SortedDictionary<int, string>();
                foreach (var item in list)
                {
                    dic.Add(item.Key.GetHashCode(), item.Value);
                }
    
                //请求的缓存
                List<string> checheKey = new List<string>() { "enterprise456", "project123", "3", "4", "5", "6", "7", "8", "900000" };
                //ip分配的节点值(测试看)
                Dictionary<string, string> result = new Dictionary<string, string>();
                //请求的缓存随机分配
                foreach (var item2 in checheKey)
                {
                    var key1 = item2;
                    foreach (var item in dic)
                    {
                        if (item.Key >= key1.GetHashCode())
                        {
                            string value;
                            if (result.TryGetValue(item.Value, out value))
                            {
                                result[item.Value] = result[item.Value] + "," + key1;
                            }
                            else
                            {
                                result.Add(item.Value, key1);
                            }
                            break;
                        }
                    }
                }
               
                foreach (var item in result)
                {
                    Console.WriteLine("key:{0} value:{1}", item.Key, item.Value);
                }
    
                Console.ReadLine();
            }
    
        }
    }

    源码下载http://pan.baidu.com/s/1nvfpFsd

    学习永不止境,技术成就梦想。
  • 相关阅读:
    如何使用gitbash 把你的代码托管到github
    发送邮件错误常见错误码
    使用snipworks/php-smtp发送邮件
    微信支付demo
    Linux——ps命令
    数组对象互转
    变量名下划线和驼峰互转
    对象数组转换
    curl请求
    百度地图接口的使用
  • 原文地址:https://www.cnblogs.com/zd1994/p/6780335.html
Copyright © 2011-2022 走看看