1.memcachephp
a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。
其守护进程(daemon )是用C写的,可是客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。
b.Memcached的键key通常是字符串,该值不能重复;value能够放入字符串、数组、数值、对象、布尔,二进制数据和图片视频
c.Memcached默认服务端口是11211
1.1 php和memcache的连接css
$mem = new Memcache(); $mem->connect("127.0.0.1", 11211); //Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过时自动销毁的时间。 $mem->set('test','123',0,60); //Memcache::add方法的做用和Memcache::set方法相似,区别是若是 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。 $mem->add('test','123',0,60); //Memcache::get方法的做用是获取一个key值,Memcache::get方法有一个参数,表示key。 $mem->get('test');//输出为'123' //Memcache::replace 方法的做用是对一个已有的key进行覆写操做,Memcache::replace方法有四个参数,做用和Memcache::set方法的相同。 $mem->replace('test','456',0,60); //Memcache::delete方法的做用是删除一个key值,Memcache::delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。 $mem->delete('test',60);
1.2 对于内存缓存,比较经常使用的有两种memcache和memcached扩展,而memcache和memcached的守护进程mencached同名,容易混淆html
a、Memcache是彻底在PHP框架内开发的redis
b、Memcached是使用libmemcached的算法
c、Memcached会比memcache多几个方法,使用方式上都差很少数据库
d、memcache是原生实现的,支持OO和非OO两套接口并存,而memcached是使用libmemcached,只支持OO接口。更多关于他们的区别,数组
请参考:http://hi.baidu.com/dong_love_yan/blog/item/afbe1e12d22e7512203f2e21.html
memcached ,还有个值得陈赞的地方,就是flag不用再操做的时候设置了,能够经过一个统一的setOption()方法实现.缓存
1.2经过修改php.ini,能够把session的值放入memcache服务器中安全
session.save_handler = files改为session.save_handler = memcached服务器
session.save_path = "N;MODE;/path"改为 session.save_path = "tcp://127.0.0.1:11211"
2. redis介绍
Redis 是彻底开源免费的,遵照BSD协议,是一个高性能的key-value数据库。
Redis 与其余 key - value 缓存产品有如下三个特色:
2.1 PHP操做redis
//实例化redis $redis = new Redis(); //链接 $redis->connect('127.0.0.1', 6379); //检测是否链接成功 echo "Server is running: " . $redis->ping(); // 输出结果 Server is running: +PONG
1.STring(字符串类型)
//设置一个字符串的值
$redis->set('cat',111);
//获取值
$redis->get('cat');
//重置值
$redis->set('cat',222);
2. List(列表)
//存数据到列表中
$redis->lpush('list','html');
$redis->lpush('list','css');
$redis->lpush('list','js');
//获取列表全部值
$redis->lrange(list',0,-1);
//从右侧加入一个
$redis->rpush('list','php');
//从左侧弹出一个
$redis->lpop('list');
//从右侧弹出一个
$redis->rpop('list');
3.Hash(字典)
//设置值
$redis->hset('hash','cat','cat');
$redis->hset('hash','cat','cat2');
//获取
$redis->hget('hash','cat');
//获取全部的key值
$redis->hkeys('hash');
//获取一个哈市,顺序是随机的
$redis->hvals('hash');
//获取hash中全部的key和value 顺序随机
$redis->hgetall('hash');
//获取hash中key的数量
$redis->hlen('hash');
//删除hash中的一个key,
$redis->hdel('hash','cat');
4.Set(集合)
//添加一个元素
$redis->sadd('set','cat');
$redis->sadd('set','dog');
//获取全部元素
$redis->smembers('set');
//删除集合中的value
$redis->srem('set','cat');
//判断元素是不是set成员
$redis->sismember('set','dog');
//查看集合成员数量
$redis->scard('set');
//移除并返回集合中的一个随机元素(返回被移除的元素)
$redis->spop('set');
5.Sorted Set(有序集合)
$redis->zadd('set',1,'cat');
$redis->zadd('set',2,'dog');
//获取全部元素
$redis->zrange('set',0,-1);
//获取score值
$redis->zscore('set','dog');
//元素个数
$redis->zcard('set');
//删除指定成员
$redis->zrem('set','cat');
//返回介于min和max之间的个数
$redis->zcount('set',1,3);
//返回有序集合中score介于min和max之间的值
$redis->zrangebyscore('set',1,3);
3.memcache 和redis比较
3.1 性能方面
因为Redis只使用单核,而Memcached可使用多核
因此在比较上,平均每个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,可是比起Memcached,仍是稍有逊色。说了这么多,结论是,不管你使用哪个,每秒处理请求的次数都不会成为瓶颈。
3.2 内存空间和数据量大小
MemCached能够修改最大内存,采用LRU算法。Redis增长了VM的特性,突破了物理内存的限制。
3.3 数据类型:操做便利上
MemCached数据结构单一,仅用来缓存数据,而Redis支持更加丰富的数据类型,也能够在服务器端直接对数据进行丰富的操做,这样能够减小网络IO次数和数据体积。
3.4 可靠性上:
MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。Redis支持数据持久化和数据恢复,容许单点故障,可是同时也会付出性能的代价。
Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,所以对对可靠性方面要求比较高
关注数据持久化和主从复制时,只有redis拥有这两个特性
3.5 应用场景
3.6 运行环境不一样:
redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话能够更好的把精力用于本系统 环境上的优化,虽而后来微软有一个小组为其写了补丁。
可是没有放到主干上
参考资料:
http://blog.csdn.net/sunmenggmail/article/details/36176029
http://www.cnblogs.com/work115/p/5584646.html