请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

分布式redis

ShardedJedis  shardedJedis=ShardedRedisPool.getJedis();
  for (int i=0;i<10;i++)
  {
      shardedJedis.set("key"+i,"value"+i);
  }
  returnJedis(shardedJedis);

老师,这段不是很明白,getresource 后不是应该从redis1 实例或者redis2实例 中二选一进行set嘛!结果应该只有一个实例才有keys 啊!为什么会两个都会有keys,而且在controller层,比如usercontroller,用redisShardedutil存储user对象,取对象的时候如何知道是从redis1中还是redis2 中取值,他会自动识别吗?谢谢老师

正在回答

2回答

Geely 2018-03-11 17:01:25

你好,亲爱的同学,这块逻辑是一段测试逻辑,是说往统一的redis集群里面设置值,而这个值可能放到redis1,也可能放到redis2里。结果是只有一个,也就是说key1 要么在redis1里,要么在redis2里。另外你的问题是如何知道从哪里取值,这个就是非常好的问题啦,咱们课程里面有讲的哟,在redis 一致性算法那个章节,同学仔细看一下。

1 回复 有任何疑惑可以回复我~
about_blank 2018-03-11 14:31:03

同学你好

首先 我们说的redis分布式 和我们常聊的分布式是不一样的哦

redis 分布式 其实更类似与一个集群的概念

redis的数据都是共享的

只是不同的ABC三台服务器分布不同

二选一如何进行set 和如何进行同步 

可以参考getredis 这个方法的源码 

实现原理这里涉及到了分布式一致性hash 算法

老师的视频课程中有很详细的ppt 动画讲解 

0 回复 有任何疑惑可以回复我~
  • 这里redis数据不是共享的吧?老师安装集群的时候好像没有使用Ruby,2个redis节点应还是2个进程,至于数据的分配是在客户端完成吧。。。
    回复 有任何疑惑可以回复我~ 2018-12-05 19:28:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信