前言:
首先需要说明的是,Redis的扩展(或者说客户端,redis叫client,php这里叫php driver)不只phpredis一种, 这里(http://redis.io/clients#php)罗列了诸多redis 的第三方扩展,加黄星的就是官方推荐的。但是奇葩的github只能folk源码,而不提供任何编译好的dll(微软对dll有维护)。只顾及linux用户的感受,而在天朝,使用windows搭开发环境的大有人在。
对此,我们只能转向php官方支持。这里可以下到最新的phpclient。注意的是,ts线程安全的是apache对应,而nts是IIS对应。
先说一下我当前的本机环境,作为一个在windows系统环境下开发的苦逼的phper,我使用的是wampserver的继承环境,方便省事。当然还有一些其他的集成环境,比如 phpstudy,xamp,当然还有强大的高可自定义版本的 phpwamp。因为一直用的wampserver,所以对这一款工具比较情有独钟吧~哈哈,再然后向大家推荐的就是phpwamp,这个好在哪里呢?不需要安装,纯绿色,并可实现nginx,apache,php,mysql的多种版本之间的自由搭配,所以也是挺爽的,有时候需要比测一下相应版本的时候,会用一下,挺方便的。
话不多说,我使用的是wampserver 3.0.6 64bit(apache 2.4.23 + php 7.0.10 + mysql 5.7.14)也是比较新版吧!这个里面自带php7和php5.6,相较之前的wamp还是做的不错的。现在开始windows下如何使用?
1、选择redis DLL文件扩展
首先使用phpinfo,打印查看VC版本 还有系统位数 再进行相应版本的下载(这一步很重要,往往不成功,都是因为没有找到对应的版本,刚开始的时候自己也浪费过很多时间,当然,这是一个必须的过程,走过才知道)
先附上phpredis扩展下载地址:http://windows.php.net/downloads/pecl/releases/redis/ (https://pecl.php.net/package/redis )当然网上还有其他提供的,大同小异,找到相应版本即可。
访问该扩展链接地址后,可以看到有好多版本的,
根据之前phpinfo环境信息,选择了上面这一款。
2、将下载好的php_redis.dll 放入D:\software\wamp64\bin\php\php7.0.10\ext 文件夹中(根据自己的路径相应更改),然后再D:\software\wamp64\bin\apache\apache2.4.23\bin\php.ini (实际 php.ini的加载路径,否则扩展也添加不成功)添加代码
extension=php_redis.dll
最后,重新启动服务器即可。
3、再打开phpinfo 搜索redis,就可以看到 php添加成功的redis扩展信息,
phpredis扩展就添加成功了,怎么在php里面使用呢?还需要安装redis服务!
链接地址:https://github.com/MSOpenTech/redis/releases 我选择的是这一款Redis-x64-3.0.504.zip ,解压文件后,即可看到
下载zip文件后解压到创建的文件夹E:\redis ,将这个文件夹地址E:\redis 随后也可以添加到环境变量Path中,这样命令行就可以方便使用了。
然后CMD命令行,我比较喜欢双击执行 redis-server.exe,可以看到
这个时候可以写php文件进行测试
$redis = new Redis(); $redis->connect("127.0.0.1","6379"); //php客户端设置的ip及端口 //存储一个 值 $redis->set("say","Hello World"); echo $redis->get("say"); //应输出Hello World //存储多个值 $array = array('first_key'=>'first_val', 'second_key'=>'second_val', 'third_key'=>'third_val'); $array_get = array('first_key','second_key','third_key'); $redis->mset($array); var_dump($redis->mget($array_get)); die; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //查看服务是否运行 echo "Server is running: " . $redis->ping().'<br>';
浏览器运行后,即可看到输出结果:
redis队列简单测试:
1、新建 一个消费者:test.php
<?php ini_set('memory_limit','2048M'); // 临时设置最大内存占用为3G set_time_limit(0); $redisObj = new Redis(); $redisObj->connect("127.0.0.1","6379"); //php客户端设置的ip及端口 while(1) { $res = getDataFromRedis($redisObj); if(! $res) { echo date('Y-m-d H:i:s') ."暂时无数据 \n"; sleep(1); } } function getDataFromRedis($redisObj, $number = 50) { $taskString = 'TaskQueue'; $queueSize = $redisObj->lsize($taskString); if($number > $queueSize) { $number = $queueSize; } $resultArr = array(); $errNum = array(); echo "begin---------------------------------------------------\n"; for($i = 0; $i < $number; $i++) { $result = $redisObj->lpop($taskString); if(false === $result) { $errNum[] = $i; } else { $resultAry[] = $result; echo date('Y-m-d H:i:s') . $result . "\n"; } } if($errNum) { $num = count($errNum); $msgStr = date('Y-m-d H:i:s').' 共失败'.$num.'个'; echo date('Y-m-d H:i:s') . $msgStr . "-----\n"; } return $resultArr; }
2、新建一个生产者 queue.php
$num = isset($argv[2]) ? $argv[2] : 50; if(! $num) { echo('exit..'); } $redisObj = new Redis(); $redisObj->connect("127.0.0.1","6379"); //php客户端设置的ip及端口 for($i=0 ; $i< $num; $i++) { $rand = mt_rand(1,999999); $taskString = 'TaskQueue'; if(false === $redisObj->rpush($taskString, $rand)) { echo date('Y-m-d H:i:s') . 'add fail' ." \r\n"; } }
3、运行
消费者,监听数据
D:\wamp64\www>php test.php
生产者,添加队列
D:\wamp64\www>php queue.php dev 100
到此php redis的扩展安装及使用就此结束!!!
windows下redis服务设置redis开机自启动方法
1、查看一下Redis服务是否注册
1):Win+R快捷键输入services.msc,然后回车或者点击确定
2):win10桌面 此电脑 右键单击(管理->服务与应用程序->服务),此处输入R,即可看到R开头的服务列表(在没有添加服务的情况下是看不到Redis服务的,我这里已经添加了Redis服务,所以会在列表中看到信息)
2、如何添加服务?
找到Redis所在的目录,在下图红框中输入cmd,进入到控制台下的Redis所在目录
此时会出现下图所示内容
在控制台中输入如下命令即可完成Redis服务化
redis-server --service-install redis.windows-service.conf --loglevel verbose
完成上述操作后,就会出现步骤一中服务列表中的Redis标识
下面是Redis常用的操作命令(这些都是需cmd要进入Redis的目录下)
卸载服务:redis-server --service-uninstall 开启服务:redis-server --service-start 停止服务:redis-server --service-stop
redis管道
redis的管道命令 就是减少数据传输时间 让redis服务一次执行多个命令
$redisPipe = $redis->multi(Redis::PIPELINE); $Lex = ['a','b','c','d','e','f','g','h','i','j','k','l']; for ( $i=0; $i<100; $i++ ) { $redisPipe->zAdd('SSet10', $i, $Lex[ceil($i/10)].$i); } $result = $redisPipe->exec();
Redis - 管道技术 pipeline: https://www.cnblogs.com/frankcui/p/15358577.html
最后附上自己用到的资源,避免链接失效。。哈哈~~~
百度云:链接:https://pan.baidu.com/s/1o9RRnC2 密码:53c7
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn