php编译redis
❶ php 安装redis最低版本是多少
1 添加phpredis扩展 首先,查看所用php编译版本V6/V9 在phpinfo()中查看 2 下载扩展 (注意所支持的php版本) 3 将下载的php_redis.dll放在php扩展目录中(ext),并修改配置文件php.ini(添加extension=php_redis.dll) 4 重新启动服务,
❷ 编译php时怎样支持phpredis
编译php时怎样支持phpredis
新增的其他元素:
1、video元素
定义视频。像电影片段或其他视频流。例:<video src="movie.ogg" controls="controls">video元素</video>
HTML4中写法:
<object type="video/ogg" data="move.ogv">
<param name ="src" value="movie.ogv">
</object>
2、audio元素
定义音频。如音乐或其他音频流。例:<audio src ="someaudio.wav">audio元素</audio>
html4中写法:
<object tyle="application/ogg" data="someaudio.wav">
<param name ="src" value= "someaudio.wav">
</object>
❸ 怎么配置linux服务器php的redis扩展
一、安装php(如果php有问题建议删掉重装)
*1,首先从官网http://cn2.php.net/downloads.php 下载php源码后解压,
*2,编译安装php(make install需要root)
# cd /php-NN (PHP解压目录,即源码目录)
# ./configure
--prefix=/usr/local/php --with-mysql=mysqlnd --with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir
--with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir
--enable-xml --disable-rpath --enable-bcmath --enable-shmop
--enable-sysvsem --enable-inline-optimization --with-curl --with-mcrypt
--enable-mbregex --enable-fpm --enable-mbstring --with-gd
--enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl
--enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-ftp
--with-apxs2=/usr/local/apache2/bin/apxs
(*注意此步的config需要许多参数,否则make install后的安装目录将缺少很多文件夹。
config执行的过程中注意看最后一步是否出现error,如果出现则说明缺少一些php需要的包。
比如jpeg,png,prce等,将错误复制到google查一下然后下载对应的包即可。)
# make
# make install (这个命令执行后系统将在/usr/local下创建php的安装目录)
到此需要注意两个目录,一是php的源码目录(应该是在/home/xxx下),二是php的安装目录(在/usr/local下)
*3,配置php.ini
# cp php.ini-development /usr/local/lib/php.ini (别忘了)
# vim /usr/local/lib/php.ini
在其中加入一句(随便在哪加都可以,网上有中说法是要加[redis],其实都一样):
extension=redis.so
二、安装redis
*1,下载redis
# wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz
*2,安装
# cd ./redis-NN
# make
这样就将redis安装好了
可以通过/src/redis-server打开redis
三、将php扩展redis模块
*1,到https://github.com/nicolasff/phpredis/下载phpredis最新版
*2,将刚下好的压缩包解压到php源码目录下的ext中,即/home/xxx/php-NN/ext/phpredis
# mv phpredis-NN php-NN/ext/phpredis
*3,将phpredis加入php拓展模块
# /usr/local/php/bin/phpize (如果在编译php时configure没有加足够的参数可能会在目录下缺少phpize)
# ./configure --with-php-config=/usr/local/php/bin/php-config (同样后面参数也很重要)
# make
# make install
*4,重启服务器(apache或nginx)
这样在phpinfo中就能看到redis扩展了
最后打开redis(/src/redis-server)
用以下代码测试是否可以工作
<?php
$redis= newRedis();
$redis->connect('127.0.0.1',6379);
$redis->set('name','xxx');
echo$redis->get('name');
?>
如果遇到Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away'的问题那是因为你没有打开redis
❹ php 安装redis扩展错误
你的php是VC6编译的
你的php_redis.dll是VC9编译的
导致不兼容。
找个VC6的php_redis.dll
或
重装个VC9的php
都可以。
❺ php怎么使用 redis pub/sub
一.场景介绍
最近的一个项目需要用到发布/订阅的信息系统,以做到最新实时消息的通知。经查找后发现了redis pub/sub(发布/订阅的信息系统)可以满足我的开发需求,而且学习成本和使用成本也比较低。 :grin:
二.什么是redis pub/sub
资料查看
大家在看我的blog的同时可以打开redis官方对于redis pub/sub的介绍,感觉看英文文档吃力的话 :cry: ,可以看redis中文网的翻译介绍.
Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能
1> 基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。
2> 消息发布者,即publish客户端,无需独占链接,你可以在publish消息的同时,使用同一个redis-client链接进行其他操作(例如:INCR等)
3> 消息订阅者,即subscribe客户端,需要独占链接,即进行subscribe期间,redis-client无法穿插其他操作,此时client以阻塞的方式等待“publish端”的消息;这一点很好理解,因此subscribe端需要使用单独的链接,甚至需要在额外的线程中使用。
三.redis pub/sub的使用
下面我将配着实图(用我的本地机器环境)来为大家讲解redis的pub/sub怎么去使用 .
没有安装phpredis扩展的或者没有redis服务的,请参考我的另一篇blog,有详细的安装介绍,这里不再赘述了。
1、启动redis服务端:
[caption id="attachment_1777" align="alignnone" width="300"] php redis pub/sub(消息订阅系统)经验总结之一[/caption]
2、新开一个终端,启动redis客户端,并做为subscribe客户端(消息订阅者),订阅一个名字叫test的频道的频道信息:
3、启动redis客户端,并做为publish客户端(消息发布者),发布一个名字叫test的频道,信息是:hello,world
4、再切换到2步骤中的redis客户端窗口,会发现,已经订阅到了刚才发布的 'hello,world'消息:
5、模式匹配订阅
Redis 的Pub/Sub实现支持模式匹配。客户端可以订阅全风格的模式以便接收所有来自能匹配到给定模式的频道的消息。
比如,将接收所有发到 test.name,test.phone,test.address...等等的消息,该这样写:
[shell]PUBSCRIBE test.*[/shell]
在终端回车后,同时再新的窗口里分别发布两个频道的消息,名字分别为:test.name和test.phone,然后切换到订阅端的窗口里,结果如下图所示:
由上图可以看出,在订阅了test.*频道后,一共收到了 test.name和test.phone两个频道的消息,这就是模式匹配订阅。
那么取消订阅匹配该模式的客户端也比较简单:
[shell]PUNSUBSCRIBE test.*[/shell]
6、好,以上的这些简单的demo,就是关于redis pub/sub(Publish/Subscribe,发布/订阅的信息系统)的最基本使用。说了这么多,跟php也没有挂上什么钩,别着急,重要的都往往最后出场。 :lol:
四.php使用redis的pub/sub(发布/订阅的信息系统)
这里我列出一些常用的命令:
phpredis的安装
redis的客户端连接支持多种语言。这里我用的是php的phpredis,它是用c语言编写的,目前已经作为php的一个模块扩展,没有安装的可以参考我的另一篇blog,已经安装的可以忽略此步骤.
命令手册
这里我列出一些常用的:
[shell]Redis::__construct构造函数
$redis = new Redis();
connect, open 链接redis服务
参数
host: string,服务地址
port: int,端口号
timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)
注: 在redis.conf中也有时间,默认为300
pconnect, popen 不会主动关闭的链接
参考上面
setOption 设置redis模式
getOption 查看redis设置的模式
ping 查看连接状态
get 得到某个key的值(string值)
如果该key不存在,return false
set 写入key 和 value(string值)
如果写入成功,return ture
setex 带生存时间的写入值
$redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.
setnx 判断是否重复的,写入值<br />$redis->setnx('key', 'value');
$redis->setnx('key', 'value');
delete 删除指定key的值
返回已经删除key的个数(长整数)
$redis->delete('key1', 'key2');
$redis->delete(array('key3', 'key4', 'key5'));
<span style="font-size: 16px; line-height: 24px;">
[/shell]
更详细的使用请参考这里,我就不写太多,因为我要直接摞代码了. :lol:
publish(消息发布端):pub.php
[php]
/**
* redis sub(消息订阅端)
* @ blog: phping.sinaapp.com
* @date 2016-04-24 15:00
*/
$redis = new Redis();
// 第一个参数为redis服务器的ip,第二个为端口
$res = $redis->connect('127.0.0.1', 6379);
// test为发布的频道名称,hello,world为发布的消息
$res = $redis->publish('test','hello,world');
[/php]
subscribe(消息订阅端): sub.php
[php]
/**
* redis sub(消息订阅端)
* @ blog: phping.sinaapp.com
* @date 2016-04-24 15:00
*/
$redis = new Redis();
$res = $redis->pconnect('127.0.0.1', 6379,0);
$redis->subscribe(array('test'), 'callback');
// 回调函数,这里写处理逻辑
function callback($instance, $channelName, $message) {
echo $channelName, "==>", $message,PHP_EOL;
}
[/php]
开始订阅redis消息
前面已经提到过,消息订阅者,即subscribe客户端,需要独占链接,即进行subscribe期间,redis-client无法穿插其他操作,此时client以阻塞的方式等待“publish端”的消息,所以我们用命令行来执行:
则 订阅消息的redis客户端已经启动,随时等待发布过来的消息并订阅该消息.
发布redis消息
同样,命令行执行消息发布端的脚本即可:
[shell]
php pub.php
[/shell]
切换到消息订阅端的窗口发现终端有输出,如下图:
哈哈,是不是 收到了发布端发布的'hello,world'这条消息呢。
五.总结
在命令执行redis订阅端脚本时,发现在终端会输出:
[shell]
PHPFatalerror: Uncaughtexception'RedisException'withmessage'readerroronconnection'in…
[/shell]
这样的错误是什么原因呢?请看我下一篇blog,本篇主要是讲一些基本的语法,在下一篇我会着重讲解一些在实际开发中遇到过的哪些问题和跳过的哪些坑。。。 :mrgreen:
码字不易,望转载注明出处哈 ;)
❻ 如何是php支持redis 是如何配置的 是不是还需要扩展什么的
这个需要在php里面加载redis模块,该模块php默认是没有的,需要根据自己php的版本下载相应的redis dll 文件,同时还需要一个redis server 服务器端,只有开启了redis服务器和在php.ini中加载了redis dll 模块,才能正常的使用redis扩展,详细的配置的话,我就不太懂了,我只是用过,具体的详细配置没弄过...
❼ php 用 redis做队列 运行过程是什么样的
Reids是一个比较高级的开源key-value存储系统,采用ANSI C实现。其与memcached类似,但是支持持久化数据存储入队操作
复制代码 代码如下:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
while(True){
try{
$value = 'value_'.date('Y-m-d H:i:s');
$redis->LPUSH('key1',$value);
sleep(rand()%3);
echo $value."\n";
}catch(Exception $e){
echo $e->getMessage()."\n";
}
}
?>
出队操作
复制代码 代码如下:
<?php
$redis = new Redis();
$redis->pconnect('127.0.0.1',6379);
while(True){
try{
echo $redis->LPOP('key1')."\n";
}catch(Exception $e){
echo $e->getMessage()."\n";
}
sleep(rand()%3);
}?>
如何使用Redis 做队列操作
Reids是一个比较高级的开源key-value存储系统,采用ANSI C实现。其与memcached类似,但是支持持久化数据存储,同时value支持多种类型:字符串 (同memcached中的value),列表 ,集合 (Set),有序集合 (OrderSet)和Hash 。所有的值类型均支持原子操作,如列表中追加弹出元素,集合中插入移除元素等。Rdids的数据大部分位于内存中,其读写效率非常高,其提供AOF(追加 式操作记录文件)和DUMP(定期数据备份)两种持久化方式。Redis支持自定义的VM(虚拟内存)机制,当数据容量超过内存时,可以将部分Value 存储到文件中。同时Redis支持Master-Slave机制,可以进行数据复制。
可以把Redis的list结构当队列来用.
从上面Redis的场景和作用来说,对于我们现在的开发活动,究竟能把Redis引入在那些场景,而不是把这么好的东东演变成“为了使用Redis,而Redis”的惨烈局面呢?当然,具体问题具体分析,这个真的很重要哈。
缓存?分布式缓存?
队列?分布式队列?
某些系统应用(例如,电信、银行和大型互联网应用等)都会使用到,当然,现在大行其道的memcache就是很好的证明;但从某一方面来说,memcache是否能把两张囊括其中,而且能做到更好(没有实际的应用过,所以只是抛出)。但从Redis身上,我就能感觉到,Redis,就能把队列和缓存两张都囊括其中,而且都不会产生并发环境下的困扰,因为Redis中的操作都是原子操作来着。
至于评论两者的孰好孰坏就免了,存在就是理由,选择适合的就是最好的。
下面开始玩玩Redis中的队列(分布式)设计YY吧,请大虾们多多指点。
状况场景:
现在的项目,都是部署在多个服务器,或者多个IP上,而且前台经由F5分发,所以用户的请求究竟落在那一台的服务器上,是无法确定的。对于项目中,有一秒杀设计,刚开始没有考虑到这种部署,同时也是使用最容易处理的方式,直接给数据库表锁行记录(Oracle上的)。可以说,对于不同的应用部署,而只有一台数据库服务器来说,很“轻松”的就解决了这个并发的问题。所以现在考虑一下,是不是挪到应用上,避免数据库服务器也掺杂到业务上。
比如,现在有2台应用服务器,1台数据库服务器。想法是,把Redis部署在数据库服务器上,两台服务器在操作并发缓存或者队列时,先从Redis服务器上,取得在两台应用服务器的代理对象,再做入列出列的操作。
看代码实现(PHP)
入队列操作文件 list_push.php
复制代码 代码如下:
<?php
$redis = getRedisInstance();//从Redis服务器拿到redis实例$redis->connect('Redis服务器IP', 6379);
while (true) {
$redis->lPush('list1', 'A_'.date('Y-m-d H:i:s'));sleep(rand()%3);
}
?>
执行# php list_push.php &
出队列操作 list_pop.php文件
复制代码 代码如下:
<?php
$redis = getRedisInstance();//从Redis服务器拿到redis实例$redis->pconnect('Redis服务器IP', 6379);
while(true) {
try {
var_export( $redis->blPop('list1', 10) );} catch(Exception $e) {
//echo $e;
}
}
实现方法(python)
1.入队列(write.py)
复制代码 代码如下:
#!/usr/bin/env python
import time
from redis import Redis
redis = Redis(host='127.0.0.1', port=6379)while True:
now = time.strftime("%Y/%m/%d %H:%M:%S")
redis.lpush('test_queue', now)
time.sleep(1)
2.出队列(read.py)
复制代码 代码如下:
#!/usr/bin/env python
import sys
from redis import Redis
redis = Redis(host='127.0.0.1', port=6379)while True:
res = redis.rpop('test_queue')
if res == None:
pass
else:
print str(res)
❽ windows 7 php怎么通过redis扩展使用redis
PHP 7安装Redis扩展
1、php操作第一步就是要安装对应的扩展。在Windows环境下则是对应的.dll文件。Windows环境下由于编译环境不同,对应扩展在选择的时候需要注意当前php的先关信息。可以通过phpinfo()查看。如果可以看到对应的环境,这在选择扩展的时候有用
2、选择对应PHP环境扩展
通过以上图我们可以看到“VC14”和“ts”这样的字样,如果不明白的同学在找对应扩展的时候也一样要找到这样的字样。
3、安装PHP 7扩展
下载php_redis-20160319-ts-vc14-x64.zip之后解压,将解压后的php_redis.dll文件放到php\ext目录下。然后在php.ini末尾添加extension=php_redis.dll。重启Apache服务。再次通过phpinfo()查看,如图表示安装成功
测试例子
1、扩展安装成功之后需要验证下是否可以用。web服务器目录下创建文件输入下面内容:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->set('test','hello redis');
echo $redis->get('test');
?>
2、然后在网页上访问,如果有hello redis输入则表示扩展安装成功。
❾ phpredis igbinary的编译安装有关问题怎么解决
1,下载安装包
来到php的官方扩展库下载地址,然后搜索redis,找到stable版本的稳定包,下载到本地,准备扩展安装
pecl(The PHP Extension Community Library)地址:http://www.pecl.php.net/
redis下载地址:http://www.pecl.php.net/get/redis-2.2.4.tgz
2,编译扩展包
首先解压redis扩展包,然后进入到目录中,执行:
/usr/local/php/bin/phpize
如果没报错,继续执行:
./configure --with-php-config=/usr/local/php/bin/php-config
如果没有报configure error 则继续执行:
make && make install
成功之后会提示redis.so文件的存放目录,如下:
然后将redis.so文件拷贝到php的扩展目录下,然后修改php.ini文件增加一行:
extension=redis.so
重启服务器,就可以在phpinfo()中看到扩展信息了!