手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

开始启用Yii的redis插件

首页 > PHP >

该死的command+左箭头。。。写了十分钟的东西全没了。
-------重新开始-----
由于目前的一个项目涉及到的数据库需要跨库跨表操作,而且该库会被频繁的插入、更新、删除,所以相对速度会较慢。但查询量又较大,在一台服务器的情况下,怎么办?分端口主从吧,意义不大,因为某些操作会导致CPU瞬间100%。
这时候我想到了key/value的数据库,想用它来做中间处理,比如大量的内容先经过它,再真正入库,毕竟我不需要过分实时,也不涉及到金钱交易。于是乎就在redis和mongo中间犹豫了。
在这期间咨询了三个人:老王(基于博客http://huoding.com/2012/02/29/146,基于Redis消息系统实现);11爷(redis有pub/sub功能);烂桔(mongo不太适用于单机,redis有内存模式)

基于上述原因,于是选择了redis,那么就开始我的Redis之旅吧
1、安装 Redis ,参考:http://library.linode.com/databases/redis/ubuntu-10.10-maverick(如果我没记错,这应该是11爷推荐的地址,他本来推荐的是Centos下的,但我用的是ubuntu,所以就参考这个了)
  先来三个常规操作

XML/HTML代码
  1. apt-get update  
  2. apt-get upgrade  
  3. apt-get install build-essential  

 完事之后,接着:

XML/HTML代码
  1. cd /opt/  
  2.     mkdir /opt/redis  
  3. wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz  
  4. tar -zxvf /opt/redis-2.4.8.tar.gz  
  5. cd /opt/redis-2.4.8/  
  6. make  

make完后做如下操作,将一些配置文件拷贝到/opt/redis目录下:

XML/HTML代码
  1. cp /opt/redis-2.4.8/redis.conf /opt/redis/redis.conf.default  
  2. cp /opt/redis-2.4.8/src/redis-benchmark /opt/redis/  
  3. cp /opt/redis-2.4.8/src/redis-cli /opt/redis/  
  4. cp /opt/redis-2.4.8/src/redis-server /opt/redis/  
  5. cp /opt/redis-2.4.8/src/redis-check-aof /opt/redis/  
  6. cp /opt/redis-2.4.8/src/redis-check-dump /opt/redis/  
  7. cp /opt/redis/redis.conf.default /opt/redis/redis.conf  

接着,更新/opt/redis/redis.conf:

XML/HTML代码
  1. daemonize yes  
  2. pidfile /var/run/redis.pid  
  3. logfile /var/log/redis.log  
  4.   
  5. port 6379  
  6. bind 127.0.0.1  
  7. timeout 300  
  8.   
  9. loglevel notice  
  10.   
  11. ## Default configuration options  
  12. databases 16  
  13.   
  14. save 900 1  
  15. save 300 10  
  16. save 60 10000  
  17.   
  18. rdbcompression yes  
  19. dbfilename dump.rdb  
  20.   
  21. dir /opt/redis/  
  22. appendonly no  

以上是linode里的配置,你可以参考一下做处理。大部分都一样,但timeout/loglevel/dir这三个参数不太一样。可以看着注释改一下。 linode 中有一个:glueoutputbuf yes ,这个在2.4.8下面会出错,所以我就没有启用它。
接着是加入启用脚本,既然linode有配置参考,那么它就有启动脚本,默认redis是没有给你这些启动脚本的,所以偷懒一下吧,下载linode的脚本:

XML/HTML代码
  1. cd /opt/  
  2. wget -O init-deb.sh http://library.linode.com/assets/630-redis-init-deb.sh  
  3. adduser --system --no-create-home --disabled-login --disabled-password --group redis  
  4. mv /opt/init-deb.sh /etc/init.d/redis  
  5. chmod +x /etc/init.d/redis  
  6. chown -R redis:redis /opt/redis  
  7. touch /var/log/redis.log  
  8. chown redis:redis /var/log/redis.log  
  9. update-rc.d -f redis defaults  

在这一步之后,你就可以直接用/etc/init.d/redis 来 start和stop redis服务了。

2、安装phpredis(https://github.com/nicolasff/phpredis)
在安装之前,先看readme:https://github.com/nicolasff/phpredis/blob/master/README.markdown
看完readme之后你会发现,原来一切是这样的简单啊
OK,先wget 回源代码,然后tar解开目录。。
接着3步搞定:

XML/HTML代码
  1. phpize  
  2. ./configure  
  3. make && make install  

速度超快,make install后,会告诉你redis.so生成在哪里,你将这extension=redis.so,加入到你的php.ini中即可。

3、下载YiiRedis项目。(由于我是用Yii的,所以直接用这个插件了,否则,还是参考一下phpredis的一些用法)
同样,在这里有readme:https://github.com/phpnode/YiiRedis/blob/master/README.md
项目地址:https://github.com/phpnode/YiiRedis(请自行下载)
使用方法也很简单,和db一样,在components下加一个组件:

XML/HTML代码
  1. "components" => array(  
  2.     "redis" => array(  
  3.         "class" => "packages.redis.ARedisConnection",  
  4.         "hostname" => "localhost",  
  5.         "port" => 6379  
  6.     ),  
  7.     //...  
  8. ),  

加完它之后就可以写上一段测试代码了:

PHP代码
  1. Yii::import("ext.yiiredis.*");  
  2. $list = new ARedisList("aNameForYourListGoesHere");  
  3. $list->add("cats");  
  4. $list->add("dogs");  
  5. $list->add("goods");  
  6. foreach($list as $i => $val) {  
  7.     print_r($val) ;  
  8.     echo "<br />";  
  9. }  
  10. $list->clear(); // delete the list  

直接输出在浏览器中。是不是很HIGH?
------
OK,就介绍到这里,请试用吧。

=------

备注:

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE);   // don't serialize data
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);    // use built-in serialize/unserialize
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY);   // use igBinary serialize/unserialize

$redis->setOption(Redis::OPT_PREFIX, 'myAppName:'); // use custom prefix on all keys

由于redis默认不做序列化,因此如果要存储PHP的数据,如:数组、对象,那就必须用第二个setOption进行设置,以便 让数据自动序列化




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: redis, yiiredis, phpredis

« 上一篇 | 下一篇 »

只显示10条记录相关文章

redis 批量删除key (浏览: 26091, 评论: 1)
redis:Error: read error on connection (浏览: 22693, 评论: 0)
mongodb 与 redis混用 (浏览: 19012, 评论: 0)
yiiredis不足之处 (浏览: 15727, 评论: 0)
转:Redis学习手册(内存优化) (浏览: 14929, 评论: 0)
Using Redis as a backend for Active Record (浏览: 14626, 评论: 0)
yiiredis的一个小BUG (浏览: 13794, 评论: 0)

2条记录访客评论

说实话,你就是个炮,不要在这占用互联网资源了,发着毫无意义的垃圾资源,耽误大家时间。

Post by 轻风 on 2014, April 6, 8:40 PM 引用此文发表评论 #1

redis很不错

Post by meng on 2012, March 12, 6:47 PM 引用此文发表评论 #2


发表评论

评论内容 (必填):