认识缓存之redis【一】安装使用
认识缓存之redis【1】安装使用
redis本质上是一个key-value类型的内存数据库,它的功能比memcached强大的多。其中value可以是String、list、Set、Sorted Set、Hash等类型的数据结构。目前,已经有很多大型网站中大量使用。
在本次博客中,仅仅介绍redis作为缓存服务器的使用。有关redis数据库(事物处理、主从同步)特性和Redis与VM的后台操作不做详细介绍,如果有感兴趣的,推荐查看《php核心技术与最佳实践》中的有关“redis章节”,书中介绍的非常详细。
一、Redis安装
1.去Redis官网下载Redis源码
查看源代码打印帮助1 wget http://redis.googlecode.com/files/
2.解压并执行make安装
① # tar -zxvf redis-2.2.8.tar.gz
②#cd redis-2.2.8.tar.gz
③#make PREFIX=/usr/local/redis install --将redis安装到/usr/local/redis目录下。
查看源代码打印帮助1 wget http://redis.googlecode.com/files/
2.解压并执行make安装
① # tar -zxvf redis-2.2.8.tar.gz
②#cd redis-2.2.8.tar.gz
③#make PREFIX=/usr/local/redis install --将redis安装到/usr/local/redis目录下。
3.测试是否成功安装
①启动redis服务:/usr/local/redis/bin/redis-server
②测试redis服务,启动redis-cli:
①启动redis服务:/usr/local/redis/bin/redis-server
②测试redis服务,启动redis-cli:
/usr/local/redis/bin/redis-cli; redis>set blogname kylingood OK redis>get blogname "kylingood"安装成功
二、安装PHP的phpredis模块
1.下载phpredis扩展模块
查看源代码打印帮助1 #wget --no-check-certificate https://github.com/owlient/phpredis
2.增加phpredis模块
①#tar zxvf owlient-phpredis-2.1.1-1-g90ecd17.tar.gz
查看源代码打印帮助1 #wget --no-check-certificate https://github.com/owlient/phpredis
2.增加phpredis模块
①#tar zxvf owlient-phpredis-2.1.1-1-g90ecd17.tar.gz
②#cd owlient-phpredis-2.1.1-1-g90ecd17
③# /usr/local/php/bin/phpize //这个phpize是安装php模块的
④# ./configure –-with-php-config=/usr/local/php/bin/php-config
⑤# make
⑥# make install
③# /usr/local/php/bin/phpize //这个phpize是安装php模块的
④# ./configure –-with-php-config=/usr/local/php/bin/php-config
⑤# make
⑥# make install
3.接下来在php.ini中添加:
extension=redis.so
extension_dir=/usr/local/lib/php/extensions/no-debug-non-zts-20060613/(这个地址的来源是安装完成后,系统提示输出的Installing shared extensions:)
extension=redis.so
extension_dir=/usr/local/lib/php/extensions/no-debug-non-zts-20060613/(这个地址的来源是安装完成后,系统提示输出的Installing shared extensions:)
4.重启apache或者nginx还有php-fpm
5.查看phpinfo信息,看是否有如下Redis模块。
6.测试PHP操作Redis服务器.
$redis = new Redis(); $redis->connect('127.0.0.1',6379); $redis->set('test','Hello redis world!'); echo $redis->get('test'); exit;如果你能成功看到页面输出:Hellow redis world! 那恭喜您,我们Redis初级配置已大功告成。
三、编写redis开机启动程序
#!/bin/sh # chkconfig: 345 86 14 # description: Startup and shutdown script for Redis REDIS_DIR=/web/redis/ #export $REDIS_DIR REDIS_CONF=/etc/redis.conf REDIS_PID=/var/run/redis.pid case $1 in 'start'|'s' ) if test -x $REDIS_DIR/bin/redis-server then echo "Starting Redis..." if $REDIS_DIR/bin/redis-server $REDIS_CONF then echo "OK" else echo "failed" fi else echo "Couldn't find Redis Server ($REDIS_DIR/bin/redis-server)" fi ;; 'stop' ) echo "Stopping Redis..." kill `cat $REDIS_PID` ;; 'restart'|'reload'|'r' ) ${0} stop ${0} start ;; 'list'|'l' ) ps aux | egrep '(PID|redis-server)' ;; *) echo "usage: `basename $0` {start|restart|reload|stop|list}" esac四、php操作redis类
/** * 缓存管理 */ class RedisCache{ //redis缓存成员变量 private static $redis; /** * 连接redis服务器 */ private static function reLoadRedis() { if(RedisCache::$redis == null) { RedisCache::$redis = new Redis(); RedisCache::$redis->connect(CACHE_HOST, CACHE_PORT,10); } } /**字符串操作*****************************************************/ /** * 添加字符串 * @param $cacheModel 缓存模块 CacheModel::var * @param $key * @param $value * @param $failtime 过期时间 */ static function strSet($cacheModel,$key,$value,$failtime=0) { RedisCache::reLoadRedis(); if($failtime > 0) { RedisCache::$redis->setex($cacheModel.$key,$failtime,$value); }else { RedisCache::$redis->set($cacheModel.$key,$value); } } /** * 获取字符串 * @param $cacheModel 缓存模块 CacheModel::var * @param $key */ static function strGet($cacheModel,$key) { RedisCache::reLoadRedis(); return RedisCache::$redis->get($cacheModel.$key); } /** * 先get后set 操作 * @param $cacheModel 缓存模块 CacheModel::var * @param $key 要获取和重新set新值的key * @param $newvalue 替换原值的新值 */ static function strGetAndSet($cacheModel,$key,$newvalue) { RedisCache::reLoadRedis(); return RedisCache::$redis->getSet($cacheModel.$key,$newvalue); } /** * 给 key 追加内容 * @param $cacheModel 缓存模块 CacheModel::var * @param $key * @param $value */ static function strAppend($cacheModel,$key,$value) { RedisCache::reLoadRedis(); RedisCache::$redis->append($cacheModel.$key, $value); } /**单个数组操作*****************************************************/ /** * 添加数组 * @param $cacheModel * @param $key * @param $value 数组 * @param $failtime 过期时间 */ static function arraySet($cacheModel,$key,$value,$failtime=0) { RedisCache::strSet($cacheModel, $key, serialize($value),$failtime); } /** * 获取数组 * @param $cacheModel * @param $key * @param $value 数组 */ static function arrayGet($cacheModel,$key) { return unserialize(RedisCache::strGet($cacheModel, $key)); } /**list操作*****************************************************/ /** * 获取key这个list的元素个数 * @param $cacheModel 缓存模块 CacheModel::var * @param $key */ static function listSize($cacheModel,$key) { RedisCache::reLoadRedis(); return RedisCache::$redis->lSize($cacheModel.$key); } /** * 给list中头部添加元素 * @param $cacheModel * @param $key * @param $value */ static function listLeftAdd($cacheModel,$key,$value) { RedisCache::reLoadRedis(); RedisCache::$redis->lPush($cacheModel.$key,serialize($value)); } /** * 给list中尾部添加元素 * @param $cacheModel * @param $key * @param $value */ static function listRightAdd($cacheModel,$key,$value) { RedisCache::reLoadRedis(); RedisCache::$redis->rPush($cacheModel.$key,serialize($value)); } /** * 给list中指定index修改元素 * @param $cacheModel * @param $key * @param $value * @param $index */ static function listUpdate($cacheModel,$key,$value,$index) { RedisCache::reLoadRedis(); RedisCache::$redis->lSet($cacheModel.$key, $index, serialize($value)); } /** * 获取list中索引为index的元素 * @param $cacheModel * @param $key * @param $index 默认为0 */ static function listGet($cacheModel,$key,$index) { RedisCache::reLoadRedis(); return unserialize(RedisCache::$redis->lGet($cacheModel.$key,$index)); } /** * 获取key这个list指定开始和结束的元素数组 * @param $cacheModel * @param $key * @param $startIndex * @param $endStart -1为所有;不包括end索引的元素 */ static function listRange($cacheModel,$key,$startIndex,$endIndex) { $end = $endIndex; $listNum = RedisCache::listSize($cacheModel, $key); if($endIndex == -1 || $endIndex>$listNum) { $end = $listNum; } $array = array(); for($i=$startIndex;$i<$end;$i++) { $array[] = RedisCache::listGet($cacheModel, $key, $i); } return $array; } /** * 删除list的第一个元素 * @param $cacheModel * @param $key */ static function listLeftDelete($cacheModel,$key) { RedisCache::reLoadRedis(); RedisCache::$redis->lPop($cacheModel.$key); } /** * 删除list的最后一个元素 * @param $cacheModel * @param $key */ static function listRightDelete($cacheModel,$key) { RedisCache::reLoadRedis(); RedisCache::$redis->rPop($cacheModel.$key); } /** * 通过key删除缓存 * @param $cacheModel 缓存模块 CacheModel::var * @param $key */ static function delete($cacheModel,$key) { RedisCache::reLoadRedis(); RedisCache::$redis->delete($cacheModel.$key); } /** * 通过key集合删除缓存 * @param $cacheModel 缓存模块 CacheModel::var * @param $keyarray 多个key数组 array('key1','key2'..) */ static function deleteByArray($cacheModel,$keyarray) { RedisCache::reLoadRedis(); RedisCache::deleteStr($cacheModel.$keyarray); } /** * 删除所有 */ static function deleteAll() { RedisCache::reLoadRedis(); RedisCache::$redis->flushAll(); } /** * 关闭连接 */ static function close() { if(RedisCache::$redis != null) { RedisCache::$redis->close(); } } }