文档章节

Redis与Memcached的区别

underA
 underA
发布于 2013/05/15 23:25
字数 991
阅读 134
收藏 1

memcached和redis的区别

区别:

1、数据类型不同,memcached只支持key-value,redis支持String,List,Map,set,sorted Set

 

2、memcached保存在内存中,redis内存和文件里面都有保存,宕机之后memcached完全丢失,redis还可以从文件中恢复到内存中

3、memcahed的内存分配是基于slab划分的,通过page(默认1M)申请内存,然后每个slab会划分为好多的chunk,数据都存储在chunk中,redis为了屏蔽不同平台之间的差异,redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数

 

4、memcahed基于libevent网络库,而redis是基于epoll网络模型,紧接着说下,

select,poll,epoll的区别

select同步阻塞,最大文件描述符1024,

poll同步阻塞,没有最大文件描述符限制,

epoll异步非阻塞,没有最大文件描述符限制。

select是轮询式的事件通知,

epoll是回调事件通知callback

5、memcahed多线程的,redis是单线程的,redis使用epoll,这就是redis为什么使用单线程性能一点也不逊于memcahed的原因

 

 

6、key过期策略,memcahed采用的消极策略,也就是get时候判定做删除,redis除了消极策略,还有积极策略,积极清理就是每秒钟有一个定时任务会扫描10次

    1.随机测试100个设置了过期时间的key
    2.删除所有发现的已过期的key
    3.若删除的key超过25个则重复步骤1

7、memcahed只支持客户端的分布式,采用consistent hashing,redis有基于服务端的集群模式

 

8、memcached采用cas来保证数据一致性,redis有比较弱的事务支持

 

 

redis笔记

1、redis的数据类型

2、redis的key过期机制(消极过期和主动清理(积极过期))

3、redis的客户端jedis,序列化之类的

4、redis的集群怎么做的,jedis自带有一致性hash,但是不能自动剔除节点,twemproxy,可以自动剔除节点,但是它本身是个单点,需要用keepalive做个VIP高可用,cluster 3.0以后推出的方案 16384个slot,每个节点负责一部分的slot

5、redis采用了epoll机制,epoll异步非阻塞,并且是触发式的callback,顺带提一下,select同步阻塞的,最大文件描述符1024,poll同步阻塞的,最大文件描述符没有限制,epoll,异步非阻塞,没有最大文件描述符限制

 

Redis淘汰策略

Redis提供了下面几种淘汰策略供用户选择,其中默认的策略为noeviction策略:

  • noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
  • allkeys-lru:在主键空间中,优先移除最近未使用的key。
  • volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
  • allkeys-random:在主键空间中,随机移除某个key。
  • volatile-random:在设置了过期时间的键空间中,随机移除某个key。
  • volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

 

值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存。

 

下面看看几种策略的适用场景:

  • allkeys-lru:如果我们的应用对缓存的访问符合幂律分布(也就是存在相对热点数据),或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择allkeys-lru策略。
  • allkeys-random:如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。
  • volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。

© 著作权归作者所有

共有 人打赏支持
underA
粉丝 12
博文 143
码字总数 41595
作品 0
海淀
程序员
redis和其他缓存数据库的区别

Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis不仅仅支持简单的key-val...

码上青天
05/03
0
0
Redis和Memcached的差异

Redis 和 Memcache 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务;Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据...

庆沉
2016/10/08
0
0
MongoDB与Redis的区别?他们分别用在什么场景下最合适?

最近在学习的时候,感觉对MongoDB与Redis的应用场景有点蒙,不知道这两个东西有什么核心应用区别,另外,还有人把这两个东西与Memcached比较,更是感觉风马牛不相及。 个人理解Memcached纯粹...

bluntFish
2016/05/22
10.4K
3
Memcache与Redis有什么区别?

Redis 和 Memcache 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Red...

PaaS小魔仙
07/16
0
0
memcached和redis的区别

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下: 1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以...

疯狂的兔子
2015/03/09
168
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里面试题

https://yq.aliyun.com/articles/6656 https://yq.aliyun.com/articles/7468

jason_kiss
14分钟前
1
0
阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统

背景 秒杀活动是绝大部分电商选择的低价促销,推广品牌的方式。不仅可以给平台带来用户量,还可以提高平台知名度。一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验...

别打我会飞
20分钟前
2
0
188. jsp提出公共的资源

平时我们会在一个地方 写一些重复的东西,为了便于管理我们需要将它提炼出来 1. 问题现象 2. 解决方式 (1) 提炼出该内容 <script type="text/javascript"> var net ={url: "${pageContext....

Lucky_Me
27分钟前
0
0
集合

集合 集合 集合介绍 前面的学习,我们知道数据多了,使用数组存放。而且数组中存放的都是基本类型的数据,并且数组是定长的。当在程序中创建的对象比较多的时候,需要对这些对象进行统一的管...

码农屌丝
34分钟前
1
0
jsp页面手写翻页小记

<s:if test="totalPage > 1"> <tr align="center"> <td colspan="4" align="center" style="height: 25px; text-align: center;">......

JackChenzp
34分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部