`
student_lp
  • 浏览: 428489 次
  • 性别: Icon_minigender_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目录下。
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模块。
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();
		}
	}
} 
 
  • 大小: 13.8 KB
分享到:
评论

相关推荐

    基于mongodb数据库的集成redis缓存springboot实战

    本实战采用mongodb为数据库,集成redis缓存,指在让初学者能够快速、简单的认识和使用这两个东西。

    《Redis深度历险 核心原理与应用实践》_钱文品.pdf

    他在 Redis 持久化,缓存,消息队列的各类实战经验,都毫无保留的凝聚到了这本小册子里,阅读后会对redis有更深入的认识; 本书在介绍原理性的知识时使用图来进行描述,非常的直观,例如: 跳表的介绍,逐步介绍...

    memcache与redis的比较

    简单的比较了两者的异同,方便读者的认识!

    JAVA中级书籍

    1、对于Java基础技术体系(包括JVM、类装载机制、多线程并发、IO、网络)有一定的掌握和应用经验。 掌握JVM内存分配、JVM垃圾回收;类装载机制; 性能优化; 反射机制;多线程;IO/NIO; 网络编程;常用数据结构和...

    教师出题学生进行考试自动给出成绩系统【项目源码】.zip

    数据库:mongodb,redis缓存 node+express+hbs handlebars模板,express框架 主要内容: 教师可以增删改查题目 学生可进行答题 系统自动判分 教师可以查看每位学生答题情况 备注: 此代码是历史代码,很多知识点当时...

    Java思维导图xmind文件+导出图片

    Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 MongoDB聚合、索引及...

    生产环境下的LAMP环境搭建

    为PHP项目部署最佳环境(可以使用 Laravel 框架,可以使用 Redis 做缓存,使用 Memcache 存储临时会话,可以使用 Composer 安装常用的代码库)。要求:?环境部署中的所有软件都是目前最高的稳定版本。真实:?不用 ...

    使用Python Web框架Django开发的一个B2C网上蔬果商城源代码

    使用Python Web框架Django开发的一个B2C网上蔬果商城,包含用户、商品、购物车、订单等模块等等,使用了Celery异步任务队列,MySQL数据库,Redis数据库,FastDFS分布式的图片存储服 务,Nginx负载均衡服务器,uWSGI...

    .NET工程师笔试题高级

    1.说说什么是架构模式。 2架构的5大要素是哪5大要素? 3.说说什么事集群,什么是分布式。 4.说说对Redis的理解 5.你所了解的NoSq|除了Redis还有哪些? 6.谈谈对消息队列的理解 7.说说你对数据库读写分离的理解 8.如果...

    考试系统:教师出题,学生进行考试自动换算成绩系统

    数据库:mongodb,redis缓存 node + express + hbs把手模板,express框架 主要内容: 教师可以增删改改查转型 学生可进行答题 系统自动判分 教师可以查看每位学生答题情况 备注: 此代码是历史代码,很多知识点当时...

    FBI-Analyzer:基于Golang和Lua-Plugins的灵活日志分析系统。插件化的准实时日志分析系统

    可快速迁移waf中行为分析插件(非实时拦截需求,需要缓存计算数据的逻辑)至本系统,避免插件在处理请求时发起过多对数据缓存(redis等)的请求而导致WAF性能下降,帮助waf减负。 实现这个项目的目的实际上也是加深...

    egg-cms-stu:蛋-cms-stu

    组件模块: 提供 Redis 做缓存处理; 使用 Swagger 做 api 文档; 使用 graphql 做 api 文档;(备选 Swagger) 支持 CORS 跨域; 封装 JWT 自定义策略授权;微服务模块: 可配合 Docker 实现容器化; 可配合 Jenk

    Java-Web:整理一套java web知识体系,从java入门到框架应用等

    我对于redis的认识仅限于缓存的使用上,其他的什么都不清楚。于是我对redis进行了进一步的了解。 自己做项目的时候想加到登陆权限,就用比较Spring Shiro,顺便学习一下。 oAuth2是一种协议,提供认证和授权的标准。...

    instagram-friend-manager:在instagram上看到你的朋友,粉丝和偶像

    instagram的朋友经理看到您关注的人并关注您! 看到您不认识的人并关注您... 后端:在Heroku上托管的Ruby Sinatra(具有Redis缓存层)。 前端:在Firebase上托管的AngularJS(使用Yeoman)。为什么? 只是说我做到了。

Global site tag (gtag.js) - Google Analytics