近期公司项目在使用Redis,这几年Redis很火,Redis也常常被当作Memcached的挑战者被提到桌面上来。关于Redis与Memcached的比较更是比比皆是。然而,Redis真的在功能、性能以及内存使用效率上都超越了Memcached吗?

•You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port without help from the client. Also memcached is faster with big values in the order of 100k. Redis recently improved a lot about big values (unstable branch) but still memcached is faster in this use case. The point here is: nor one or the other will likely going to be your bottleneck for the query-per-second they can deliver.

•没有必要过多的关心性能,因为二者的性能都已经足够高了。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。(比如瓶颈可能会在网卡)

•You should care about memory usage. For simple key-value pairs memcached is more memory efficient. If you use Redis hashes, Redis is more memory efficient. Depends on the use case.
•如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。

•You should care about persistence and replication, two features only available in Redis. Even if your goal is to build a cache it helps that after an upgrade or a reboot your data are still there.
•如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。

•You should care about the kind of operations you need. In Redis there are a lot of complex operations, even just considering the caching use case, you often can do a lot more in a single operation, without requiring data to be processed client side (a lot of I/O is sometimes needed). This operations are often as fast as plain GET and SET. So if you don’t need just GEt/SET but more complex things Redis can help a lot (think at timeline caching).
•当然,最后还得说到你的具体应用需求。Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。

Redis是什么?两句话可以做下概括:

  1. 是一个完全开源免费的key-value内存数据库
  2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets

Redis不是什么?同样从两个方面来做下对比:

  1. 不是sql server、mySQL等关系型数据库,主要原因是:
    . redis目前还只能作为小数据量存储(全部数据能够加载在内存中) ,海量数据存储方面并不是redis所擅长的领域
    . 设计、实现方法很不一样.关系型数据库通过表来存储数据,通过SQL来查询数据。而Redis通上述五种数据结构来存储数据,通过命令 来查询数据

  2. 不是Memcached等缓存系统,主要原因有以下几个:

    .网络IO模型方面:Memcached是多线程,分为监听线程、worker线程,引入锁,带来了性能损耗。Redis使用单线程的IO复用模型,将速度优势发挥到最大,也提供了较简单的计算功能

    .内存管理方面:Memcached使用预分配的内存池的方式,带来一定程度的空间浪费 并且在内存仍然有很大空间时,新的数据也可能会被剔除,而Redis使用现场申请内存的方式来存储数据,不会剔除任何非临时数据 Redis更适合作为存储而不是cache

    .数据的一致性方面:Memcached提供了cas命令来保证.而Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断

    . 存储方式方面:Memcached只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能

    一句话小结一下:Redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。

Redis有什么用?只有了解了它有哪些特性,我们在用的时候才能扬长避短,为我们所用

  1. 速度快:使用标准C写,所有数据都在内存中完成,读写速度分别达到10万/20万

  2. 持久化:对数据的更新采用Copy-on-write技术,可以异步地保存到磁盘上,主要有两种策略,一是根据时间,更新次数的快照(save 300 10 )二是基于语句追加方式(Append-only file,aof)

  3. 自动操作:对不同数据类型的操作都是自动的,很安全

  4. 快速的主–从复制,官方提供了一个数据,Slave在21秒即完成了对Amazon网站10G key set的复制。

  5. Sharding技术: 很容易将数据分布到多个Redis实例中,数据库的扩展是个永恒的话题,在关系型数据库中,主要是以添加硬件、以分区为主要技术形式的纵向扩展解决了很多的应用场景,但随着web2.0、移动互联网、云计算等应用的兴起,这种扩展模式已经不太适合了,所以近年来,像采用主从配置、数据库复制形式的,Sharding这种技术把负载分布到多个特理节点上去的横向扩展方式用处越来越多。

对Redis数据库做下小结:

1. 提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就可以了
2. 提高了DB的可用性,只影响到需要访问的shard服务器上的数据的用户
3. 提高了DB的可维护性,对系统的升级和配置可以按shard一个个来搞,对服务产生的影响较小
4. 小的数据库存的查询压力小,查询更快,性能更好

Redis与Memcached的比较

1.Memcached是多线程,而Redis使用单线程.2.Memcached使用预分配的内存池的方式,Redis使用现场申请内存的方式来存储数据,并且可以配置虚拟内存。3.Redis可以实现持久化,主从复制,实现故障恢复。4.Memcached只是简单的key与value,但是Redis支持数据类型比较多。Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争..redis是个单线程的程序,为什么会这么快呢?1、大量线程导致的线程切换开销。
2、锁。
3、非必要的内存拷贝。4. Redis多样的数据结构,每种结构只做自己爱做的事.Hash对应的Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个HashMap的成员比较少时,Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,当成员量增大时会自动转成真正的HashMap.

总结:

要进行Master-slave配置,出现服务故障时可以支持切换。
在master侧禁用数据持久化,只需在slave上配置数据持久化。
物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个情况就是灾难!
当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大
当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间.
redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题

redis与Memcached相关推荐

  1. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别

    1. 什么是 KV 存储 KV 是 Key-Value 的缩写,KV 存储也叫键值对存储.简单来说,它是利用 Key 做索引来实现数据的存储.修改.查询和删除功能. 常用的高性能 KV 存储主要有 R ...

  2. Key-Value数据库:Redis与Memcached之间如何选择?

    华为云分布式缓存Redis5.0和Memcached都是华为云DCS的核心产品. 那么在不同的使用场景之下,如何选择Redis5.0和Memcached呢? 就由小编为大家进行详细的数据对比分析吧 R ...

  3. Mongo、Redis、Memcached对比及知识总结

    存储原理(持久化) Mongo Mongo的数据将会保存在底层文件系统,因此存储容量远大于redis和memcached.一个database中所有的collections以及索引信息会分散存储在多个 ...

  4. 相比Redis,Memcached真的过时了吗?

    下面内容来自Redis作者在stackoverflow上的一个回答,对应的问题是<Is memcached a dinosaur in comparison to Redis?>(相比Re ...

  5. Redis与Memcached简要比较

    2019独角兽企业重金招聘Python工程师标准>>> 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据, ...

  6. oracle定时器定时删除30天前的数据_Redis-数据淘汰策略持久化方式(RDB/AOF)Redis与Memcached区别...

    Redis与Memcached区别: 两者都是非关系型数据库.主要有以下不同: 数据类型: Memcached仅支持字符串类型. redis支持:String,List,set,zset,hash 可 ...

  7. redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?...

    这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型, 你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什 ...

  8. Redis和Memcached,干货来一波

    1.数据类型支持不同 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多.最为常用的数据类型主要由五种:String.Hash.List.Set和 ...

  9. Redis 和 Memcached 的区别

    来源:标点符 链接:http://www.biaodianfu.com/redis-vs-memcached.html Redis 的作者 Salvatore Sanfilippo 曾经对这两种基于内 ...

  10. redis和Memcached的区别,都什么时候使用?

    redis和Memcached的区别,都什么时候使用? 缓存在互联网公司占得比例还是蛮大的,提到缓存呢,就一定会想到redis和memcache,现在绝大多数的公司呢,都是推荐使用redis,这是为什 ...

最新文章

  1. PHP关于进程池的优化
  2. Python 循环列表删除元素的注意事项
  3. matlab中大括号的使用 { },可以装4维的数据
  4. 解决kettle配置文件中的中文乱码
  5. java与c语言工作量对比比例,对比平台-- C ++与Java之间的差异
  6. Lock的tryLock(long time, TimeUnit unit)方法
  7. Android 使用SQLiteDatabase操作SQLite数据库(二)
  8. 折腾kali linux2.0
  9. SecureCRT for Mac(SSH终端仿真工具)
  10. SpringBoot学习(第一天)
  11. vs2015配置python环境_IronPython | VS2015 开发环境配置
  12. 裁员潮下,工程师该何去何从?
  13. Word表格之VBA知识
  14. 舒服的小程序吸顶动画
  15. Python爬取IMDB TOP 250 电影榜单
  16. 时间刻度线css,纯CSS时间轴列表
  17. python str转换int
  18. 发布新一代微控制器 AURIX 2G 的背后,半导体巨头英飞凌如何应对汽车行业变革?...
  19. 食用油有多少种,它们的区别是什么?
  20. 通信之自相关、互相关函数

热门文章

  1. 怎样对一个项目进行成本管理,具体步骤是啥?
  2. 【蓝桥杯java真题】:和尚挑水
  3. Python 基础知识整理-1
  4. 网页游戏小游戏云开发的心得
  5. 单机玩转神经网络架构搜索(NAS) - Auto-Keras学习笔记
  6. php翻译成中文版,php 翻译函数,可以将中文汉字转换为E文
  7. 47个经典java程序编程题
  8. 本地python版GEE安装及配置步骤(jupyter lab)
  9. plsql快捷执行方式_PLSQL快捷键,很方便
  10. jmeter-连接数据库循环使用数据