redis集群的实现及使用php进行调用

本次的文章介绍的是关于redis集群的实现及使用php进行调用,给大家分享一下,有需要的朋友可以参考一下

一、搭建redis集群
1.概念解释
redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下:
这里写图片描述
   其结构特点:

 1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。 2、节点的fail是通过集群中超过半数的节点检测失效时才生效。 3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。 4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护nodeslotvalue。 5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

登录后复制

  现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:      节点A覆盖0-5460;      节点B覆盖5461-10922;      节点C覆盖10923-16383.

登录后复制

看不懂,,,,

     获取数据:      如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据

登录后复制

2、Redis Cluster主从模式

redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。并且如果之前的旧主节点恢复正常时。

登录后复制

  上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。     所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。     B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。    不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。

登录后复制

3.redis集群的搭建

集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。

登录后复制

嗯,所有最少要6个redis服务。
然后启动这6个redis服务,在本机上,但要记得启动前要进行修改配置。

port  7000                                        //端口7000,7002,7003        bind 10.93.84.53                                     //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群daemonize    yes                               //redis后台运行pidfile  ./redis_7000.pid          //pidfile文件对应7000,7001,7002cluster-enabled  yes                           //开启集群  把注释#去掉cluster-config-file  nodes.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志 

登录后复制

然后把redis源码中的src目录中的redis-trib.rb拷到当前路径中来。
安装ruby环境

立即学习“PHP免费学习笔记(深入)”;

yum install ruby  yum install rubygems  gem install redis-3.2.2.gem

登录后复制

查的一下本机6个redis的启动情况

ps -ef | grep redis

登录后复制

最后我们使用redis-trib.rb来创建redis集群。使用create命令 –replicas 1 参数表示为每个主节点创建一个从节点,一对两个,第一个为主第二个为从。

./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

登录后复制

使用redis-cli进行测试,要加得加-c参数,以集群方式进行连接。

redis-cli -c

登录后复制

要进得加-c参数,代表连接的是集群方式。
至此,redis集群搭建成功。
但是我这里只是要本机测试的6个端口,真实的话最少都是要两台机器的。我们怎么做安全性呢?
1.修改redis.conf把bind选项改成当前的局域网ip
2.配置防火墙只允许另一台的redis服务器进行访问,当然也要允许应用服务器的ip进行访问吧。。。不然程序都连不上redis服务,玩毛啊。。。。

//先关掉6379(redis服务使用的端口)iptables -I INPUT -p tcp --dport 6379  -j DROP //允许192.168.1.0这个机器进行访问本机的6379端口iptables -I INPUT -s 192.168.1.0 -p tcp --dport 6379 -j ACCEPT

登录后复制

二、php中连接到redis集群
首先使用php –ri redis来查看redis扩展版本。要在3.0版本之上。
参考
第二个参数只要集群中的一个节点就行了,并不需要全填上

$obj_cluster = new RedisCluster(NULL, ['127.0.0.1:6380']);echo $obj_cluster->get('name1');

登录后复制

搞定

相关推荐:

php实现查询mysql并缓存到redis的方法

php操作redis的命令分享

以上就是redis集群的实现及使用php进行调用 的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2594860.html

(0)
上一篇 2025年3月6日 17:40:18
下一篇 2025年3月6日 17:40:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 十个你需要在 PHP 7 中避免的坑

    本篇文章给大家分享的内容是十个你需要在 php 7 中避免的坑 ,有着一定的参考价值,有需要的朋友可以参考一下 1. 不要使用 mysql_ 类函数 终于,你不用再看到建议不要使用 mysql_ 函数的提示了。因为 PHP 7 从核心上完全…

    2025年3月6日
    200
  • 2019为什么我们还会继续使用 PHP?

    我们来开门见山地说,php 是一门奇葩的语言。它既不快,语法又不漂亮。还没有遵守良好的软件开发实践。但我还是使用它开发了很多软件。那么问题就很明显了为什么今天还在使用 php? 除了个人理想主义的偏好以外,还有很多理由。这才是我们要讨论的范…

    编程技术 2025年3月6日
    200
  • 当编程语言掌握在企业手中,是生机还是危机?

    2019 年 4 月,Java 8 收费时代到来了!2019 年 1 月份,Oracle 宣布将停止 Java 8 更新的免费支持,未来 Java 的更新只适用于已付费的许可证持有者。近日,Oracle 发送邮件通知用户 Java 8 第一…

    2025年3月6日
    200
  • web开发用什么编程语言?

    互联网的世界充满了在不同编程语言的帮助下开发的杂乱的网站,提供不同的好处和缺点。由于有大量的编程语言用于开发网站,您必须选择最适合您的网站需求的编程语言,这就需要对目前流行的可用web开发编程语言有基本了解。 下面本篇文章就来给大家介绍6种…

    2025年3月6日 编程技术
    200
  • 为什么说PHP是最好的语言

    php是世界上最好的语言!这么说虽然带着一定php码农个人感情色彩的偏见,但是也未尝没有道理。 php在web开发中占很大份额在各种语言排行榜中,作为一个专注于web开发的语言也基本上排名前10。 推荐课程:PHP教程。 部署简单很多其他行…

    2025年3月6日
    200
  • php只能做网站吗

    php不只能做网站,还可以实现其他功能,比如:1、爬虫;2、自动化运维;3、嵌入式;4、桌面应用开发;5、APP开发;6、微信开发等等。 PHP是一门C实现的编程语言,通常用于Web开发;但不表示PHP只能进行Web开发、只能做网站。 PH…

    2025年3月6日
    200
  • 什么是php?有哪些优点?

    PHP是一种广泛使用的通用开源脚本语言,其优点有:1、开放源代码;2、免费;3、跨平台性强;4、效率高;5、运行快,程序开发快;6、编辑简单,实用性强;7、面向对象;8、支持脚本语言为主等等。 PHP是目前使用最广泛的编程语言之一。PHP …

    2025年3月6日
    200
  • PHP成立25周年:看看大佬们对PHP都有哪些评价

    1995年,rasmus lerdorf开发了php编程语言。在即将到来的2020年,php将使用25年。我们询问了php的五位专家marcel normann,sebastian bergmann,arne blankerts,ralf …

    2025年3月6日
    200
  • PHP不适合高并发?

    PHP不适合高并发? PHP可以解决高并发,也不能说适合,只是相对其他语言弱一些,如Java和Go,不过PHP7出来以后PHP性能得到了很大的提升,性能与其它的语言之间的差距不是很大了,甚至比有的语言更快。 php7的一些特性   PHP7…

    2025年3月6日
    200
  • PHP Composer是什么技术?一起看看

    PHP Composer 是什么技术? 如果你是个程序员,很可能你会发现技术更新的轮子转得让你跟不上,比如用户认证、数据库管理、路由等技术。PHP里有很多很成熟的框架来处理这些问题,于是你会认为这些框架使用起来应该很容易,不是吗? 如果你现…

    2025年3月6日
    200

发表回复

登录后才能评论