memcache 介绍
memcache使用场景
1,非持久存储:对数据存储要求不高
2,分布式存储:不适合单机使用
3,key/value存储:格式简单,不支持list,array数据格式
memcache 系统类 方法
$m = new Memcached();
$array = array(
array('127.0.0.1','11211'),
array('127.0.0.2','11211'),
)
$m = addServers($array);
print_r($m->getStats()); 服务器运行状态
print_r($m->getVersion()); 服务器版本号
memcache 数据类 方法
addServers
add
set
delete
get
flush
replace
increment
decrement
优雅快速的使用memcache
setMulti 一次性添加多条
$data = array(
array('key','value'),
array('key2','value2')
);
$m->setMulti($data,0);
$result = $m->getMulti(array('key','key2'));
print_r($result);
deleteMulti
getMulti
getResultCode 上一次操作返回的编码,数字
getResultMessage 编码数字对应告诉我们操作结果
封装自己的memcache类
项目中使用Memcache
1,即时生成缓存
2,提前生成缓存
3,永久缓存
memcache最后注意事项
1,不要在单机模式中使用Memcached
2,不要只使用memcached保存重要数据
3,定期查看缓存的分布状况和击中情况
redis
redis是远程的,一般存储在服务端
redis是基于内存的
redis 是非关系型数据库
redis的应用场景
1,缓存
2,队列
3,数据存储
redis安装
安装环境
redis官网下载redis最新版本
预装软件
gcc tcl c语言编写的软件
redis server 服务端
redis cli 客户端
php操作redis
redis文档地址:https://github.com/phpredis/phpredis
,redis类的命名空间是根,phprdis的命令和参数基本和redis.io中的实际命令对应
$redis = new \Redis();
$redis->connect("127.0.0.1",7200);
redis的数据类型介绍
数据类型 | 存储的值 | 读写能力 |
string | 可以是字符串,整数或浮点,统称为元素 | 对字符串操作,对整数类型加减 |
List | 一个序列集合且每个节点都包好了一个元素 | 序列两端推入,或弹出元素修剪,查找或移除元素 |
set | 各不相同的元素 | 从集合中插入或删除元素 |
hash | 有key-value的散列组,其中key是字符串,value是元素 | 按照key进行增加删除 |
sort set | 带分数的score-value有序集合,其中score为浮点,value为元素 | 集合插入,按照分数范围查找 |
String类型基本的类型,每个value都对应一个key,适合字符串和数值型的存储以及整型的加减运算设置值 set key value取出值 get key
incr:自增decrby:减,例如,decrby key1 2 //对key1所对应的值减2
list类型為有序列表
有序的列表,左进右出(队列),允许重复#lpush list1 12#lpush list1 13#lpush list1 14这时候的list1列表为 12 13 14#rpop list1返回14这时候list1列表为 12 13
redis类型之set类型--存储无序的元素1.set类型,无序的方式存储多个不同的元素,对元素可以进行快速的添加、查找和删除;相同的元素只算一个。添加元素:sadd key value判断有多少个元素:scard key判断某个元素是否在set里面:sismember key value删除某个元素:srem key value
Redis类型之hash类型1.Hash只要求键不一样,就是不同的条数插入/修改:hset hash1 key1 12获取:hget hash1 key1查看hash长度:hlen key一次性获取:hmget hash1 key1 key2
Redis类型之sort set类型:存储和hash一样,都是一个映射。存储的是分数与元素的映射。可以看出是排行榜。value必须是全局唯一。score 是浮点型。sort set类型操作,如果两个元素的score一样,按照字节顺序排列先后增加/修改:zadd zset1 10.1 val1查看个数:zcard zset1查看排名:zrange zset1 0 2 withscores查看某个value排名:zrank zset1 val2
php操作redis
String set ,get
list 队列 lpush,rpop 左进右出
set sadd,smembers(集合所有元素以数组返回) (数据必须唯一)
hash hset,hget hmget(所有信息返回回来,数组)
sort set 排行榜 zadd zrange(从高到底排名,从0开始)
redis 与memcache的区别
- Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
- Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存。
- 他们的扩展都需要做集群;实现方式:master-slave、Hash。
- 在100k以上的数据中,Memcached性能要高于Redis。
- 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
- 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
- Redis和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强