memcache缓存数据库与redis数据库简单总结(一)

一、memcache介绍

1.1memcache

Memcached 是国外 社区 网站 LiveJournal  的开发团队开发的 高性能的分布式内存缓存服务器。

一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。

1.2php操作memcache

1.2.1有效期

可以根据需求,把key的过期时间进行设置,如果key过期,返回的数据不存在则为false。

①时间差 多少秒之后过期

$mem->set(key,value,0,时间差);

当时间差的值,大于30天时(2592000分界值),被认为是时间戳

②时间戳 在什么时间戳点过期

$mem->set(key,value,0,时间戳[现在时间戳+时间差]);

注意:在linux环境下测试,使用1.5.0以上的版本,过期时间时间戳的方式不可用,可以使用时间差的方式。

测试在windows下环境下,使用1.2.6版本,过期时间设置时间差和时间戳的方式都可用。

1.2.2存储各种数据类型

①标量类型  string(字符串)  int(整型)  float(浮点型) bool(布尔型)

标量类型在memcached中可以正常使用存储

复合类型  array(数组)  object(对象)

复合类型在memcached中可以正常使用存储

③特殊类型  null   resource(资源)

Resource类型在memcached中不可以存储使用

1.2.3 其他相关操作方法

删除指定键的信息,(指定$timeout,则$timeout秒后删除)

$mem->delete(键 [, int $timeout ]);     

仅添加:Key存在则失败,KEY不存在添加

$mem->add(key, value, 是否压缩, 有效期)

仅替换(修改):Key存在则修改,KEY不存在失败。

$mem->replace(Key, Value, 是否压缩, 有效期)

add和replace语法使用set语法进行替代。

 

按照num的幅度,对key的值进行减少操作;

memcached中,最小减到0,没有负数。

$mem -> decrement(key,[数字])

按照num的幅度,对key的值进行增加操作

$mem -> increment(key,[数字])

删除所有键

$mem->flush();

1.3 memcache的应用拓展

1、失效机制

懒惰机制  过期的key不会直接删除掉,会再次获取时,才删除。

②LRU Least Recently USE 最近最少使用 最近get。如果内存不够存储,会删除这部分数据。如果不想启动LRU机制,可以启动时加入使用-M参数

2、分布式 memcache

分布式: 多台服务器同时使用。

分布式memcache,多个memcached同时使用。

memcache分布式是属于共享模式的,使用内存大小等于多个memcache算术和(相加)。

2.1 使用分布式memcache的好处

①提高并发量

②提高数据稳定性

 

2.2 实现分布式memcache方式:

 

①多台服务器部署   性能更好

 

②一个服务器通过监听不同的端口号,启动多个memcache实列  性价比更高

 

实现操作:

 

 

①通过-p端口参数,启动多个memcache实列

 

开启防火墙端口,允许远程访问

 

注意重启防火墙,使配置生效

 

②连接使用多个memcached的语法

 

 

$mem = new Memcache();
$mem->addserver('IP地址',‘不同端口号’);

 

二、redis介绍

1.1.1 介绍

redis是 Nosql 非关系数据库 是由意大利人 antirez(Salvatore Sanfilippo)  开发的一款 内存高速缓存数据库。

 

 

该软件使用C语言编写,它的数据模型为 key-value。

 

它支持丰富的数据结构,比如 String  list(双向链表)  hash(哈希)   set(集合)  sorted set(有序集合)

 

可持久化(保存数据到磁盘中),保证了数据安全。

1.1.2适用的场合

 

①排行榜应用,取top n 操作  [Sort Set]

 

②获得最新的N 个数据或者某个分类的最新数据  [List]

③计数器应用  [String]

④sns(social network site)获得共同好友  [Set]

⑤防攻击系统(ip判断)等  [Set]

1.1.3 比较 memcache

 

①Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

 

②Redis支持master-slave(主—从)模式应用。

 

③Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

 

④Redis单个value的最大限制是1GB, memcached只能保存1MB的数据

 

⑤redis是单核进程,memcached是多核多进程

二、操作使用

1.key

key的命名规则不同于一般语言,键盘上除了空格、\n换行外其他的大部分字符都可以使用。

Key不要太长。占内存,查询慢   Key不要太短

exists key                    测试指定 key 是否存在
del key1 key2 ... keyN        删除给定key
type key                      返回给定key的value类型
rename oldkey newkey          改名字
flushdb                       删除当前数据库中所有的key
等等

2、string

stringredis最基本的类型

redis的string可以包含任何数据。包括jpg图片 或者序列化的对象。

单个value值最大上限是1G字节。

如果只用string类型,redis就可以被看作加上持久化特性的memcache

set key value                     设置key对应的值为string类型的value
mset key1 value1 ... keyN valueN          一次设置多个key的值
mget key1 ... keyN                  一次获取多个key的值
append key value                 给指定key的字符串值追加value
substr key start end                返回截取过的key的字符串值
等等    

3、List

list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。

这使得list既可以用作栈,也可以用作队列。

 

 

同一端进出  先进后出   

 

一端  另外一端出  先进先出  队列

 

lpush key string        在key对应list的头部添加字符串元素
rpop key           从list的尾部删除元素,并返回删除元素
lrange key start end    返回指定区间内的元素,下标从0 开始
ltrim key start end     截取list,保留指定区间内元素
等等

 

4、set

redis的set是string类型的无序集合。集合里不允许有重复的元素

set元素最大可以包含(2的32次方-1)个元素

set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐功能。

sadd key member          添加一个string 元素到key对应的set集合中,成功返回1
scard key              返回set的元素个数
sismember key member     判断member是否在set中
smembers key         返回key对应set的所有元素,结果是无序的
等等

5、zset

set一样sorted set也是string类型元素的集合,

不同的是每个元素都会关联一个权。

通过权值可以有序的获取集合中的元素,可以通过score值进行排序

 

zadd key score member    添加元素到集合,元素在集合中存在则更新对应score
zrem key member        删除指定元素,1表示成功,如果元素不存在返回0
zrange key start end      类似 lrange 操作从集合中去指定区间的元素。返回的是有序结果
zrevrange key start end   同上,返回结果是按score逆序
等等

 6、Hash

 

Hash存储数据和关系型数据库(mysql),存储的一条数据的结构极为相似。

 

Key:value(field:value)

 

hset key field value         设置 hash field 为指定值,如果key不存在,则先创建
hget key field            获取指定的 hash field
hincrby key field integer      将指定的 hash field 加上给定值
hlen key               返回指定 hash的field数量
hgetall key            返回hash 的所有 ffiled 和 value
等等

 

 

 

posted @ 2018-03-09 17:24  爱music的程序猿  阅读(1286)  评论(0编辑  收藏  举报