JAVA创建一个哈希表储存数据并输出,要完整代码我就不写了,给个提示吧:
建一个类,名字就叫员工,它有三个属性,分别是你要的三个数据,名字、工龄、工号 。然后 , 每次put的时候这样:put('1234',员工1);以员工工号为key,类员工为value
一致性哈希 java实现 怎么映射到圆环上一致性哈希提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件:单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲区加入到系统中 , 那么哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲区中去 , 而不会被映射到旧的缓冲集合中的其他缓冲区 。(这段翻译信息有负面价值的,当缓冲区大小变化时一致性哈希(Consistenthashing)尽量保护已分配的内容不会被重新映射到新缓冲区 。)简单的哈希算法往往不能满足单调性的要求,如最简单的线性哈希:x→ax bmod(P)在上式中 , P表示全部缓冲的大小 。不难看出 , 当缓冲大小发生变化时(从P1到P2),原来所有的哈希结果均会发生变化,从而不满足单调性的要求 。哈希结果的变化意味着当缓冲空间发生变化时,所有的映射关系需要在系统内全部更新 。而在P2P系统内,缓冲的变化等价于Peer加入或退出系统,这一情况在P2P系统中会频繁发生,因此会带来极大计算和传输负荷 。单调性就是要求哈希算法能够应对这种情况 。负载问题实际上是从另一个角度看待分散性问题 。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容 。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷 。从表面上看,一致性哈希针对的是分布式缓冲的问题 , 但是如果将缓冲看作P2P系统中的Peer , 将映射的内容看作各种共享的资源(数据,文件,媒体流等),就会发现两者实际上是在描述同一问题 。路由算法在一致性哈希算法中 , 每个节点(对应P2P系统中的Peer)都有随机分配的ID 。在将内容映射到节点时,使用内容的关键字和节点的ID进行一致性哈希运算并获得键值 。一致性哈希要求键值和节点ID处于同一值域 。最简单的键值和ID可以是一维的,比如从0000到9999的整数集合 。根据键值存储内容时,内容将被存储到具有与其键值最接近的ID的节点上 。例如键值为1001的内容,系统中有ID为1000,1010 , 1100的节点 , 该内容将被映射到1000节点 。为了构建查询所需的路由,一致性哈希要求每个节点存储其上行节点(ID值大于自身的节点中最小的)和下行节点(ID值小于自身的节点中最大的)的位置信息(IP地址) 。当节点需要查找内容时,就可以根据内容的键值决定向上行或下行节点发起查询请求 。收到查询请求的节点如果发现自己拥有被请求的目标,可以直接向发起查询请求的节点返回确认;如果发现不属于自身的范围,可以转发请求到自己的上行/下行节点 。为了维护上述路由信息 , 在节点加入/退出系统时,相邻的节点必须及时更新路由信息 。这就要求节点不仅存储直接相连的下行节点位置信息,还要知道一定深度(n跳)的间接下行节点信息,并且动态地维护节点列表 。当节点退出系统时 , 它的上行节点将尝试直接连接到最近的下行节点,连接成功后,从新的下行节点获得下行节点列表并更新自身的节点列表 。同样的,当新的节点加入到系统中时,首先根据自身的ID找到下行节点并获得下行节点列表,然后要求上行节点修改其下行节点列表 , 这样就恢复了路由关系 。
JAVA中哈希码具体是什么?哈希其实只是一个概念,没有什么真实的指向 。它的目的是保证数据均匀的分布到一定的范围内 。所以不同数据产生相同的哈希码是完全可以的 。
java中哈希一般是希望自己写算法的 。随便返回什么都可以 。如果什么也不写的话就会返回地址 。如果自己写,最简单的做法是把所有字段拼起一个长串做个hash值 。
如何用java获取redis的info预备
jedis-2.5.2
commons-pool2-2.2.jar
使用单连接
此方式仅建议用于开发环境做调试用 。
// 创建连接
String host = "192.168.56.102";
int port = 6379;
Jedis client = new Jedis(host, port);
// 执行set指令
String result = client.set("key-string", "Hello, Redis!");
System.out.println( String.format("set指令执行结果:%s", result) );
// 执行get指令
String value = https://www.04ip.com/post/client.get("key-string");
System.out.println( String.format("get指令执行结果:%s", value) );
运行上述代码一致性哈西java代码,控制台输出:
set指令执行结果:OK
get指令执行结果:Hello, Redis!
【一致性哈西java代码 一致性哈希算法原理】使用连接池
此方式适用于仅使用单个Redis实例一致性哈西java代码的场景 。
// 生成连接池配置信息
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(30);
config.setMaxWaitMillis(3*1000);
// 在应用初始化一致性哈西java代码的时候生成连接池
JedisPool pool = new JedisPool(config, "192.168.56.102", 6379);
// 在业务操作时,从连接池获取连接
Jedis client = pool.getResource();
try {
// 执行指令
String result = client.set("key-string", "Hello, Redis!");
System.out.println( String.format("set指令执行结果:%s", result) );
String value = https://www.04ip.com/post/client.get("key-string");
System.out.println( String.format("get指令执行结果:%s", value) );
} catch (Exception e) {
// TODO: handle exception
} finally {
// 业务操作完成 , 将连接返回给连接池
if (null != client) {
pool.returnResource(client);
}
} // end of try block
// 应用关闭时,释放连接池资源
pool.destroy();
运行上述代码 , 控制台输出:
set指令执行结果:OK
get指令执行结果:Hello, Redis!
使用连接池 分布式
在规模较大的系统中,往往会有多个Redis实例做负载均衡 。并且还实现主从备份,当主实例发生故障时 , 切换至从实例提供服务 。
类似于Memcached的客户端,Jedis也提供了客户端分布式操作的方式 , 采用一致性哈希算法 。
// 生成多机连接信息列表
ListJedisShardInfo shards = new ArrayListJedisShardInfo();
shards.add( new JedisShardInfo("127.0.0.1", 6379) );
shards.add( new JedisShardInfo("192.168.56.102", 6379) );
// 生成连接池配置信息
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(30);
config.setMaxWaitMillis(3*1000);
// 在应用初始化的时候生成连接池
ShardedJedisPool pool = new ShardedJedisPool(config, shards);
// 在业务操作时 , 从连接池获取连接
ShardedJedis client = pool.getResource();
try {
// 执行指令
String result = client.set("key-string", "Hello, Redis!");
System.out.println( String.format("set指令执行结果:%s", result) );
String value = https://www.04ip.com/post/client.get("key-string");
System.out.println( String.format("get指令执行结果:%s", value) );
} catch (Exception e) {
// TODO: handle exception
} finally {
// 业务操作完成 , 将连接返回给连接池
if (null != client) {
pool.returnResource(client);
}
} // end of try block
// 应用关闭时,释放连接池资源
pool.destroy();
运行上述代码 , 控制台输出:
set指令执行结果:OK
get指令执行结果:Hello, Redis!
一致性哈西java代码的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于一致性哈希算法原理、一致性哈西java代码的信息别忘了在本站进行查找喔 。
推荐阅读
- 迷失之城解谜游戏,迷失之城手游
- 抖音视频号怎么加水印标签,抖音视频号怎么添加
- ppt怎么转换为pdf,ppt怎么转换为pdf文件
- 抖音直播电脑声卡要求,抖音直播声卡起什么作用
- python倒入函数 python如何导入函数
- 怎么自己升级电脑显卡驱动,怎么升级电脑显卡驱动程序
- 用于安卓开发的语言,常见的安卓开发语言
- linux打压缩包的命令 linux怎么打压缩包
- 在线教育企业如何营销,在线教育企业有哪些