redis与memcached区别

定义:
redis是一个基于内存亦可持久化的日志型、Key-Value数据库。
memcached是一个基于内存的Key-Value分布式缓存系统。

PS :redis单线程

共同点:
1. 可以做缓存
2. 支持字符串
3. 用于减少数据库负载,提升性能

区别:
1. redis支持字符串(string)、链表(link)、无序集合(set)、有序集合(sorted set)和哈希(hash), memcached只支持字符串
2. redis支持持久化,memcached不支持
3. redis支持主从模式数据备份(master-slave),memcached不支持
4. redis重启可以自动恢复数据(因为有rdb快照和aof日志),memcached不可以
5. redis支持事务,memcached不支持
6. redis的value最大支持1G,memcached最大是1MB

redis优点:
1 读写性能优异
2 支持数据持久化,支持AOF和RDB两种持久化方式
3 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
4 数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构
5.3.0版本后支持集群

redis缺点:
1. Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
2. 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
3. Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
4. Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。


memcached优点:
1. 通信协议简单,使用简单文本协议
2. 支持epoll/kqueue异步I/O模型
3. key-value键值对数据类型
4. 全内存缓存,效率高
5. 支持分布式集群

memcached缺点:
1、数据是保存在内存当中的,一旦服务进程重启,数据会全部丢失

   对策:可以采取更改Memcached的源代码,增加定期写入硬盘的功能

2、Memcached以root权限运行,而且Memcached本身没有任何权限管理和认证功能,安 全性不足
   对策:可以将Memcached服务绑定在内网IP上,通过防火墙进行防护

 


redis应用场景:
1. 少量数据存储,高速读写访问,即所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能


memcached应用场景:
1. 分布式应用。由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。

2. 数据库前段缓存。数据库常常是网站系统的瓶颈。数据库的大并发量访问,常常造成网站内存溢出。当然我们也可以使用hibernate的缓存机制。但memcached是基于分布式的,并可独立于网站应用本身,所以更适合大型网站进行应用的拆分。

3. 服务器间数据共享。举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?这时候,我们便可以使用memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。


总结:redis能够替代memcached,让你的缓存从只能存储数据变得能够更新数据,因此你不再需要每次都重新生成数据了。

各位大牛们,小虾有写得不对的请指正,谢谢。

 

以下是我精心整理的文章:

  • Java 基础面试题,助你轻松搞定面试官,请点击这里进入
  • Java 集合底层原理剖析(List、Set、Map、Queue),请点击这里进入
  • 服务注册与发现原理剖析(Eureka、Zookeeper、Nacos),请点击这里进入
  • 分布式配置管理的原理剖析(Spring Cloud Config、Apollo、Nacos),请点击这里进入

 

你可能感兴趣的:(分布式)