php redis 集群类库,PHP操作redis集群_杨爱红的博客-CSDN博客


本站和网页 https://blog.csdn.net/weixin_31884015/article/details/115237711 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

php redis 集群类库,PHP操作redis集群_杨爱红的博客-CSDN博客
php redis 集群类库,PHP操作redis集群
杨爱红
于 2021-03-10 08:34:48 发布
253
收藏
文章标签:
php redis 集群类库
一. 概述
目前我们用到的 php 的 redis 扩展 主要有2个,
二. phpredis(PHP扩展)方式
1. phpredis单机方式<?php $client = new Redis();
$client->connect('10.30.5.163', '7000');echo $client->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
2.  phpredis集群使用
$client = new RedisCluster(NUll,$redis_list);echo $client->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');代码说明
第一个参数传NULL 别问我,我也不知道为啥。反正文档没找到,这篇也没看懂。
第二个参数是我们需要连接的redis cluster的master服务器列表。我们有3个master,就填3个, 填一个主节点也行, 甚至填一个从节点也行, 但是性能有差异, 见第四部分
3. 集群原理
为甚么填入任何一个节点地址都可以操作redisCluster呢?在集群模式下,Redis接收任何键相关命令时首先计算键对应的槽,
假如初始化的是从节点,  首先会向从节点发送redis命令,
从节点根据槽找出所对应的节点,如果节点是自身,则处理键命令;
如果不是自身,  则MOVED重定向错误,通知客户端请求正确的节点。这个过程称为MOVED重定向
redis开发和运维.png重定向信息包含了键所对应的槽以及负责该槽的节点地址,根据这些信
息客户端就可以向正确的节点发起请求
phpredis客户端可以根据重定向信息直接再次向键所在节点发起请求, 从而获取数据图片来源: <>
4. 设定超时<?php $redis_list = ['10.30.5.162:7000','10.30.5.163:7000','10.30.5.163:7001', 1.5, 1.5];
$client = new RedisCluster(NUll,$redis_list);echo $client->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
timeout和read_timeout功能。就是加到master列表的后面。
timeout表示连接redis的最长时间,这里设为1.5秒,表示超过1.5秒要是还没连接成功就返回false 。
read_timeout表示连接redis成功后,读取一个key的超时时间,有时候读取一个key 可能value比较大,读取需要很长时间,这里设置1.5秒,表示要是过了1.5秒还没读取到数据就返回false。
三. PRedis方式
predis是一套用php代码写的php连接redis的扩展<?phpuse  Predis\Client;require __DIR__ . '/../vendor/autoload.php';// 写一个节点也可以$redis_list = [        'tcp://10.30.5.163:7000',        'tcp://10.30.5.163:7001',        'tcp://10.30.5.162:7000'];
$redis = new Client($redis_list, ['cluster'=>'redis']);echo $redis->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
四.  phpredis和Predis性能对比使用ab压测, 获取key
/usr/local/apache2/bin/ab -n10000 -c100 http://10.30.5.162/redis.php
key:
new_item_key:d89b561fb759fd533a8c2781ef15dd5f
分布在10.30.5.163:7000节点
php.ini开启opcacherealpath_cache_size = 2M
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.optimization_level=-1
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0
opcache.huge_code_pages=1
1. phpredis填入三个主节点<?php $redis_list = ['10.30.5.162:7000','10.30.5.163:7000','10.30.5.163:7001',1.5,1.5];
$client = new RedisCluster(NUll,$redis_list);echo $client->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
测试结果Concurrency Level:      100Time taken for tests:   2.203 secondsComplete requests:      10000Failed requests:        12
(Connect: 0, Receive: 0, Length: 12, Exceptions: 0)Total transferred:      2506988 bytesHTML transferred:       509388 bytesRequests per second:    4539.89 [#/sec] (mean)Time per request:       22.027 [ms] (mean)Time per request:       0.220 [ms] (mean, across all concurrent requests)Transfer rate:          1111.47 [Kbytes/sec] received
吞吐量4500左右
2. phpredis只填入一个从节点<?php $redis_list = ['10.30.5.161:7000'];
$client = new RedisCluster(NUll,$redis_list);echo $client->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
每次都会重定向Concurrency Level:      100Time taken for tests:   9.726 secondsComplete requests:      10000Failed requests:        77
(Connect: 0, Receive: 0, Length: 77, Exceptions: 0)Total transferred:      2490673 bytesHTML transferred:       506073 bytesRequests per second:    1028.14 [#/sec] (mean)Time per request:       97.263 [ms] (mean)Time per request:       0.973 [ms] (mean, across all concurrent requests)Transfer rate:          250.07 [Kbytes/sec] received
吞吐量1028(有点低啊)
3. 使用单机模式连接<?php $redis_list = 'tcp://10.30.5.163:7000';
$client = new Redis();
$client->connect('10.30.5.163', '7000');echo $client->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
结果Concurrency Level:      100Time taken for tests:   1.238 secondsComplete requests:      10000Failed requests:        0Total transferred:      2510000 bytesHTML transferred:       510000 bytesRequests per second:    8078.76 [#/sec] (mean)Time per request:       12.378 [ms] (mean)Time per request:       0.124 [ms] (mean, across all concurrent requests)Transfer rate:          1980.24 [Kbytes/sec] received
4. 使用predis集群模式<?phpuse  Predis\Client;require __DIR__ . '/../vendor/autoload.php';
$redis_list = [        'tcp://10.30.5.163:7000',        'tcp://10.30.5.163:7001',        'tcp://10.30.5.162:7000'];
$redis = new Client($redis_list, ['cluster'=>'redis']);echo $redis->get('new_item_key:d89b561fb759fd533a8c2781ef15dd5f');
结果Concurrency Level:      100Time taken for tests:   5.380 secondsComplete requests:      10000Failed requests:        0Total transferred:      2510000 bytesHTML transferred:       510000 bytesRequests per second:    1858.68 [#/sec] (mean)Time per request:       53.802 [ms] (mean)Time per request:       0.538 [ms] (mean, across all concurrent requests)Transfer rate:          455.59 [Kbytes/sec] received
性能和phpredis差一倍, 但是是在开启opcache的情况下, 因为加载predis的client, 需要使用psr-4查找文件, 不开启opcache, 性能会差挺多, 有兴趣可以自己尝试总结
使用phpredis操作集群性能和单机相差一倍左右, predis和phpredis差距有点大, 在实际编程中可以按需要去选择
在java操作redis集群的库使用jedis, 可以为每一个节点设置一个连接池, 在发送请求前, 先计算槽, 根据本地缓存的槽和节点映射缓存就可以直接去请求数据保存的节点获取数据, 当槽和节点映射关系不正确, 会触发重试机制, 将最新的映射关系更新到缓存中
php一次请求过后, 变量的生命周期就结束了, 无法设置连接池以及使用槽节点缓存机制,  命令如果和请求节点不对应, 就会MOVED重定向, 产生性能损耗.
附录 redis扩展安装~ git clone git@github.com:phpredis/phpredis.git
~ cd phpredis
~ git fetch
~ git checout feature/redis_cluster #切换到cluster分支~ phpize
~ ./configure
~ make
~ make install
这样就可以用了。如果你是第一次安装redis扩展,还需要在php.ini中加上:
extension=redis.so
作者:其实我很dou
链接:https://www.jianshu.com/p/d786a1c8d2be
杨爱红
关注
关注
点赞
收藏
评论
php redis 集群类库,PHP操作redis集群
一. 概述目前我们用到的 php 的 redis 扩展 主要有2个,二. phpredis(PHP扩展)方式1. phpredis单机方式
复制链接
扫一扫
php-cp:pdo和redis tcp连接代理
02-20
php-cp(php-connect-pool),redis和pdo的本地代理
提供连接池,读写器分离,负载均衡,慢查询日志,大数据块日志等功能
要求
(目前项目正在维护中,请先不要使用)
PHP 5.3 +(无zts)
linux 2.6+
pdo和redis扩展安装
使用Docker安装
可以使用Docker编译,需要在项目的根目录下运行:
根据自己的配置,复制config.ini.example文件为pool.ini文件,修改pool.ini文件
docker build -t php-cp .
技术特性:
提供了释放方法,在每次获取数据后(redis的获取集)调用,将连接放回池子里面,避免其他耗时操作导致的db层连接数过高问题。
提供最大最小连接数配置支持。
连接自动ping数据库,防止压力小连续不请求导致的走开问题
根据压力自动获取(最大到最大连接数)或释放(释放最小到最小
Redis php操作类库.zip
07-11
一个比较全的Redis PHP操作类库,为每个数据库建立一个连接,如果连接超时,将会重新建立一个连接,如果是一个字符串,将其认为是数据库的ID号。以简化写法。给当前集合添加一个元素,如果value已经存在,会更新order的值。
参与评论
您还未登录,请先
登录
后发表或查看评论
PHP使用Redis实现Session共享的实现示例
10-17
主要介绍了PHP使用Redis实现Session共享的实现示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Redis PHP通用类
lijianlin819的博客
03-09
575
<?php/**
* redis操作类
* 说明,任何为false的串,存在redis中都是空串。
* 只有在key不存在时,才会返回false。
* 这点可用于防止缓存穿透
*/
class Redis
private $redis; //当前数据库ID号
protected $dbId=0; //当前权限认证码
protected $aut
Redis php操作类库
05-01
一个比较全的Redis PHP操作类库,为每个数据库建立一个连接,如果连接超时,将会重新建立一个连接,如果是一个字符串,将其认为是数据库的ID号。以简化写法。给当前集合添加一个元素,如果value已经存在,会更新order的值。
php如何调用redis集群,redis集群的实现及使用php进行调用
weixin_42394088的博客
04-11
991
本次的文章介绍的是关于redis集群的实现及使用php进行调用,给大家分享一下,有需要的朋友可以参考一下一、搭建redis集群1.概念解释redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下:其结构特点:1、所有的redis节点彼此互联(PING-...
PHP redis类库方法速查
最新发布
qq_47532023的博客
08-19
82
php redis方法速查
redis集群 php,介绍Redis三种集群模式(Cluster集群模式)
weixin_42164702的博客
03-10
187
下面由Redis教程栏目给大家介绍Redis三种集群模式-Cluster集群模式,希望对需要的朋友有所帮助!Redis三种集群模式-Cluster集群模式一、  在之前有看到过redis集群部署的三种方案,不过性能最高的还是redis官方推荐的redis-cluster,性能最高,下面介绍一下redis-cluster这种模式。1、redis-clusterA、采用去中心化的思想,没有中心节点的说...
Redis 集群在PHP中的使用
Phplayers的博客
02-01
212
predis 基础使用文档
https://packagist.org/packages/predis/predis
PHP 操作集群代码演示
1. 安装 predis:
composer require predis/predis
2. Redis 基础使用:
// 默认值为 127.0.0.1:6379
$client = new Predis\Client();
$client->set('foo', 'bar');
$value = $client->get('foo')
在php中使用redis cluster 集群
allen的博客
02-21
715
目前我们用到的 php 的 redis 扩展 主要有2个,第一个是最常用的phpredis, 它是用c写的php的高效扩展:https://github.com/phpredis/phpredis,还有1个是predis, 它是用php代码写的,也用的蛮多的:https://github.com/nrk/predis。
我们分别看下他们在集群中的用法。
phpredis
phpredis的安装
我Mac上是有安装过phpredis扩展的,但是是2.* 版本,是不支持cluster的,所以需要升级到.
php redis 集群 长连接池,php如何实现redis连接池
weixin_39539807的博客
03-12
200
项目使用的是php,生产环境使用的是redis集群,连接的地址是配置的域名,每次创建连接必须要经过一次域名解析,频繁的创建链接效率低下且经常出现超时的情况,有没有在生产环境实现redis链接池的,分享一下方案。看到网上有人介绍说使用 pconnect 连接redis,看了一个文章说这种方式效果不好,可惜实际情况是 PHP 中各个模块的长连接方法并不好用,基本上是鸡肋一样的存在,原因如下:首先,按照...
php对比集群java集群_php操作redis cluster集群成功实例
weixin_39688378的博客
02-27
40
java操作redis cluster集群可使用jredisphp要操作redis cluster集群有两种方式:1、使用phpredis扩展,这是个c扩展,性能更高,但是phpredis2.x扩展不行,需升级phpredis到3.0,但这个方案参考资料很少2、使用predis,纯php开发,使用了命名空间,需要php5.3+,灵活性高下载好后重命名为predis,server1:192.168....
php 完整redis类,PHP Redis类
weixin_34938347的博客
03-23
436
classredisInit{private$redis;//redis对象/***初始化Redis*$config=array(*'server'=>'127.0.0.1'服务器*'port'=>'6379'端口号*)*@paramarray$config*/publicfunctioninit($config=array())...
php redis增删改查的操作类库
05-08
8691
共享一个redis增删改查的操作类库
在使用之前一定要确定服务器开启redis服务以及redis扩展
<?php
namespace rely\cache;
use rely\init\Config;
/**
* Class Redis
* @package rely\cache
* @author Mr.taochuang <mr_taochuang@163.com>
* @date 2019/7/4 14:07
* redis缓存
*/
class Redis e
redis集群moved重定向与redis集群ask重定向
wangzhicheng2013的专栏
11-09
1548
1.redis集群一共有16384个虚拟slot,被均匀分配到集群里所有redis机器node上;
2.每个node之间可以互相meet操作,都知道彼此slot范围;
3.客户端向redis集群任意node发送命令,相应node使用CRC16加hash算法算出slot,如果slot命中,则返回成功影响,否则返回moved命令和正确的node号;
4.客户端收到moved命令,去目标node读写。
[root@mysql ~]# redis-cli -p 9002
127.0.0.1:9002&gt
php + redis,php redis封装类
weixin_42512096的博客
03-10
20
php的redis类。
phpRedis函数使用总结
baizhaokui5595的博客
07-05
314
/*1.Connection*/
$redis = new Redis();
$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1秒放弃链接
$redis->open('127.0.0.1',6379,1);//短链接(同上)
$redis->pconnect('12...
rediscluster php扩展_phpredis是否支持集群
weixin_39559523的博客
03-09
187
php要操作redis cluster集群需要使用phpredis扩展,这是个c扩展,性能更高。phpredis集群使用 (推荐学习:PHP视频教程)
redis集群 php,redis集群如何搭建
weixin_29061425的博客
03-10
72
redis集群的搭建集群搭建:Redis集群至少需要3个节点第一步:创建一个文件夹redis-cluster,然后分别在下面创建6个文件夹:(1)mkdir -p /usr/local/redis-cluster(2)mkdir 7001、mkdir 7002、mkdir 7003、mkdir 7004、mkdir 7005、mkdir 7006第二步:把之前的redis.conf配置文件分别co...
phpredis Redis集群 Redis Cluster
Z.X的博客
10-29
79
官方url:https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#readme
2017年10月29日20:44:25
Redis引入3.0.0版本的群集支持,并且使用phpredis与群集进行通信时,需要使用RedisCluster类。 对于大多数操作,RedisCluster类可以作为Redis类的替换,而不...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:游动-白
设计师:我叫白小胖
返回首页
杨爱红
CSDN认证博客专家
CSDN认证企业博客
码龄5年
暂无认证
81
原创
周排名
143万+
总排名
8万+
访问
等级
50
积分
粉丝
获赞
评论
47
收藏
私信
关注
热门文章
服务器修改拔刀剑修改数,In-Game NBTEdit自定义拔刀剑
5439
更换win10计算机账户,win10更换账户的方法是什么_win10换账号登录的方法
4208
java怎么接收return的返回值_java中关于return返回值的用法详解
4067
idea java配色方案_IDEA 主题配色方案+字体
3670
按键精灵通过句柄获取窗口坐标_按键精灵多点找色进阶教程
3415
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
基于位置的服务器,用于基于位置的服务的移动台-服务器协议
多服务器系统集中管理,服务器集中化管理 日常运维都用什么?
开启了文件和打印共享服务器,打印共享服务器设置
2021年158篇
2020年14篇
目录
目录
最新文章
基于位置的服务器,用于基于位置的服务的移动台-服务器协议
多服务器系统集中管理,服务器集中化管理 日常运维都用什么?
开启了文件和打印共享服务器,打印共享服务器设置
2021年158篇
2020年14篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值