NoSQL数据库memcache和redis区别()

时间:2021-12-24 00:52:45

在web后台发开面试中,经常会被问道memcache和redis的区别和使用情况。

其中memcache和redis都是基于内存存储的缓存系统,存储形式key--value键值对的形式。

区别:

(1)都是k-v模式,但是memcache只是string字符串类型,而redis还可以是hashmap,set ,zset ,list等数据结构。

(2)redis可以实现持久化存储,memcache不能实现。

(3)底层的实现不同,与客户端的通信协议不同


针对上面的三点不同,主要介绍一下对redis的理解:

(1)redis 特殊数据结构的应用场景:

  •  hahsmap:可以将用户的会话session,购物车以hashmap存,提高响应的速度;
  • list :可以解决数据一致问题,争抢的资源。将不同用户的对同一数据的操作,放在消息队列中,依次解决。
  • set: 集合交集,例如:求公同的好友。
  • zset(有序集合):计算,可以实现排行榜
  • string :可以缓存页面
(2)持久化存储:

redis有二种持久化存储的方法:RDB和AOF

Rdb(快照方式):在一定的间隔内将数据以快照的形式存在文件中,默认的dump rdb形式,缺陷:可能宕机的时候保存的快照不是最新的;

aof:redis将每一个写命令通过write追加到文件中,当redis重启会重新执行这些写命令,在内存中重建。可能os会在内核缓存write做的修改,可能不能立即写入文件,可以修改配置文件redis.conf。缺陷:可能执行了很多无用的命令,(这个问题已经改进了)

(3)虚拟内存:

当redis的内存不足时,会将不经常用的k-v交换在虚拟swap中,并将其从内存中删除。当key不存在内存中,则需要在swap中加载相应的数据并返回。


(4)数据淘汰策略

redis有很多淘汰策略,其中LRU:表示在设置过期时间的集合中,删除一个最近没用的数据.(memcache也有淘汰机制,这里只能讲了redis)


常用命令:redis操作命令

$m=new  redis();

$m->connect('ip','port');

$m->close();

$m->set('key',$value,时间 )

$m->get('key')

$m->detele('key');

$r=new redis();

$r->connect('','');

$r->persist('key');

string:

$r->set('key',$value,时间 )

$r->get('key')

$r->detele('key');

list

lpush/rpush(,)

lGet(,)

....

存在一点问题:

http://www.cnblogs.com/dasn/articles/5367436.html

http://mp.weixin.qq.com/s/SCohQdLRinZzhh_EsS2eGw?ref=myread

已经并发使用的实践,这个可以自己完成