推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 花式编程 > redis Cluster集群搭建及缓存

redis Cluster集群搭建及缓存

花式编程 2018-10-27

在学习redis cluster集群之前先来了解一下哈希分布



哈希分布

节点取余分区
hash(key)%nodes
1.客户端分片:哈希+取余
2.节点伸缩:数据节点关系变化,导致数据迁移
3.迁移数量和添加节点数量有关:建议翻倍扩容
一致性哈希
1.客户端分片:哈希+顺时针(优化取余)
2.节点伸缩:只影响邻近节点,但是还是有数据迁移
3.翻倍伸缩:保证最小迁移数据和负载均衡
虚拟槽分区
1.预设虚拟槽:每个槽映射一个数据子集,一般比节点数大
2.良好的哈希函数:例如CRC16
3.服务端管理节点,槽,数据:例如Redis Cluster

redis cluster 安装实战

1.原生命令安装—理解架构
1).配置开启节点

port 7003
daemonize yes
dir "/home/redis/data/"
dbfilename "dump-7003.rdb"
logfile "7003.log"
cluster-enabled yes
cluster-config-file nodes-7003.conf

按照上面的配置启动6个redis服务,如果有之前学习的服务启动,为了避免干扰,可以先停掉
redis-cli -h 127.0.0.1 -p 6379 shutdown
然后查看启动的cluster服务ps -ef |grep redis-server
如果出现如下图示,则表示已经启动成功

redis Cluster集群搭建及缓存

2).meet
redis-cli -h 127.0.0.1 -p 7003 cluster meet 127.0.0.1 7004
依次执行如上代码
3).指派槽

在redis目录下创建文件夹addslots.sh
配置如下
start=$1
end=$2
port=$3
for slot in `seq ${start} ${end}`
do
        echo "slot:${slot}"
        redis-cli -p {port} cluster addslots ${slot}
done

指派槽
sh addslots.sh 0 5461 7003
sh addslots.sh 5462 10922 7004
sh addslots.sh 10923 16383 7005

然后启动服务
redis-cli -p 7003
cluster info
如下图所示则指派槽成功

redis Cluster集群搭建及缓存

4).主从

redis-cli -p 7006  cluster replicate a356522f32122ea10a752209c6cb97df8247e645
redis-cli -p 7007  cluster replicate ef32c54d6e9a14e285d248a223aa10253e1c3b5c
redis-cli -p 7008  cluster replicate 4e4d121def48a0dffff4dd9dd338e4384afa8c5b

执行上面命令然后执行
redis-cli -p 7003 cluster slots
如果出现下面图所示则表示设置主从成功

redis Cluster集群搭建及缓存

思考:分布式Redis不一定好


  • Redis Cluster:满足容量和性能的扩展性,很多业务“不需要”。

  1. 大多数时客户端性能会“降低”。

  2. 命令无法跨节点使用:mget,keys,scan,flush,sinter等。

  3. lua和事物无法跨节点使用。

  4. 客户端为何更复杂:SDK和应用本身消耗(例如更多的连接池)。

  • 很多场景Redis Sentinel已经足够了。

缓存

好处
1.加速读写
通过缓存加速读写速度:CPU L1/L2/L3 Cache,Linux page Cache加速硬盘读写。浏览器缓存,Ehcache缓存数据库结果。
2.降低后端负载
后端服务器通过前端缓存降低负载:业务端使用Redis降低后端Mysql负载等。
成本
1.数据不一致:缓存层和数据层有时间窗口不一致,和更新策略有关。(例如数据库更新了,但是缓存层还没有更新)
2.代码维护成本:多了一层缓存逻辑
3.运维成本:例如Redis Cluster
使用场景
1.降低后端负载:
对高消耗的SQL:join结果集/分组统计结果缓存
2.加速请求响应:
利用Redis/Memcache优化IO响应时间
3.大量写合并为批量写:
如计数器先Redis累加再批量写DB

Redis典型应用场景

1.缓存(数据查询,短连接,新闻内容,商品内容等)(最多使用)
2.分布式集群架构中的session分离  
3.聊天室的在线好友列表  
4.任务队列(秒杀,抢购,12306等等)(先进先出)
5.应用排行榜(可以给每个元素设置一个打分,这样就可以排序)
6.网站访问统计  
7.数据过期处理(可以精确到毫秒)

有一起学习的可以加入下面群一起学习

还有更多视频等你来拿!

点击图片查看更多推荐内容

↓↓↓

深入分析redis第一讲

深入分析redis第二讲

Git你的整个地球

Zookeeper入门实战一

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《redis Cluster集群搭建及缓存》的版权归原作者「花姐学编程」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注花姐学编程微信公众号

花姐学编程微信公众号:huage_world

花姐学编程

手机扫描上方二维码即可关注花姐学编程微信公众号

花姐学编程最新文章

精品公众号随机推荐