4.3redis-cluster的应用

前言,redis再怎么牛逼也有一个数据量的极限。它不能为我们无底线的存储数据------这时我们就想到了分片。将数据按照一定的规则存放到不同的redis实例上,从而达到数据的高效利用。

那么讲正经一点的。做数据分片都需要考虑到什么呢?
考虑一:数据均匀分布到每一个节点(或者叫数据片);
考虑二:客户端能够访问到争取的节点和数据(即取数据);
考虑三:扩容,当数据片数量增加或减少的时候,最理想的事情是程序可以帮我们实现这一功能,因为数据片的增删或涉及到数据重新均匀的分布到每一个节点

其实你可以手撕一个出来,方向是一致性hash。但是太麻烦了,而且估计你们公司也不会给你这个精力去做。
以上三个问题在redis3.2这个版本给出了解决方案—redis-cluster
下面我来详细分享一下我的理解:

在这里插入图片描述

在redis里有一个虚拟槽–slot,先告诉你他的范围再跟你讲这个到底是什么,能做什么事,怎么用;
他的范围0~16383;
是什么
怎么说呢?可以理解slot是一个门牌号,每个门牌号对应一个redis集群;我们有key-value去存数据,redis用CRC16算法对key进行处理,处理的结果是在0~16383之间的一个整数,这个整数决定了这条数据会落在那个节点上。
假如现在有两个redis集群A和B
A对应的slot是0~8000
C对应的slot是8001~16383
我现在要存 {“zhugegangtie”:“really hard”}和{“yuchilangtou”:“zei hard”}
在存入的时候 会先用CRC16对key进行处理 可能处理"zhugegangtie"(诸葛钢铁)得到的值是 7999 那么它会存到A里面;对"yuchilangtou"(尉迟榔头)处理得到的值是8001 那么它会存到C里面 。 slot就是这样一个东西。

那么这里还有一个疑惑—如果我就是要拧着干,要把我的数据放到同一个分片上,不想让数据落到不同的分片上 怎么办呢?
HashTag
我们在设置key的时候做一些手脚,这样设置:
id.{user1}:1,
name.{user1}:zhugegangtie,
sex.{user1}:nv
id.{user2}:2,
name.{user2}:yuchilangtou,
sex.{user2}:nav

这样设置CRC16算法就会根据花括号里的内容进行分片,目的达到了!! 同理也可以这样取数据 ,只不过会报一个MONED +目标ip和port

怎么用?
这是一个很简单的问题。答案就是:我们程序员不需要关心这方面的东西,redis会自动帮我们做。就问你爽不爽?!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值