文档章节

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
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
redis和memcache的区别

简单区别: 1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。 2. redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储...

1243983186
2017/06/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习LinkedBlockingDeque源码

之前已经看了实现deque接口的ArrayDeque, ConcurrentLinkedDeque, LinkedList,也不能落下ConcurrentLinkedDeque,但是好像没在项目中用过。 这里看到实现的接口还有BlockingDeque<E>, Block...

woshixin
34分钟前
1
0
实战:用Python实现随机森林

摘要: 随机森林如何实现?为什么要用随机森林?看这篇足够了! 因为有Scikit-Learn这样的库,现在用Python实现任何机器学习算法都非常容易。实际上,我们现在不需要任何潜在的知识来了解模型...

阿里云官方博客
37分钟前
1
0
进程管理利器Supervisor--centos7下安装与配置

目录 概述 环境准备 检查python环境 在线安装 配置Supervisor 启动并验证 运维命令 概述 Supervisor的安装可以有在线安装和离线安装两种方式。安装方式取决于服务器是否联网,联网的话可采用...

java_龙
43分钟前
4
0
spring系列汇总

spring spring-基于可扩展Schema的特性自定义标签 springmvc-同一个访问资源,多种视图解析方式 spring cache 配置使用aspectj模式织入 基于注解的spring缓存,轻松无侵入解决cache问题 spri...

细肉云吞
44分钟前
4
0
vsftpd搭建ftp

12月10日任务 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp exportfs命令 在nfs运行后的一段时间内,如果需要添加共享目录,这时需要修改exports文件,并...

robertt15
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部