设为首页 收藏本站
查看: 820|回复: 0

[经验分享] 认识缓存之redis【1】安装使用

[复制链接]

尚未签到

发表于 2016-12-18 10:03:43 | 显示全部楼层 |阅读模式
  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目录下。

3.测试是否成功安装
    ①启动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 

    ②#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

3.接下来在php.ini中添加:
    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模块。

DSC0000.png

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();
}
}
}
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315876-1-1.html 上篇帖子: 8.Redis 3.0.0 Cluster Redis集群的创建 下篇帖子: Redis缓存介绍和使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表