首页 > 数据库 >Memcached与Redis有什么区别

Memcached与Redis有什么区别

时间:2023-02-20 18:32:20浏览次数:102  
标签:存储 区别 Redis value 内存 key Memcached

Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。那么,Memcached与Redis有什么区别呢?让我们一起来看一下。

1、数据操作不同

与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能。Redis支持服务器端的数据操作相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,支持list、set、sorted set、hash等众多数据结构,还同时提供了持久化和复制等功能。而通常在Memcached里,使用者需要将数据拿到客户端来进行类似的修改再set回去,这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作, Redis会是更好的选择。

2、内存管理机制不同

在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。

而Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。

从内存利用率来讲,使用简单的key-value存储的话,Memcached的内存利用率更高。而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。

3、性能不同

由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis也在存储大数据的性能上进行了优化,但是比起Memcached,还是稍有逊色。

4、集群管理不同

Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。

Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。

小结:Redis和Memcached哪个更好?

Redis更多场景是作为Memcached的替代者来使用,当需要除key-value之外的更多数据类型支持或存储的数据不能被剔除时,使用Redis更合适。如果只做缓存的话,Memcached已经足够应付绝大部分的需求,Redis 的出现只是提供了一个更加好的选择。总的来说,根据使用者自身的需求去选择才是最合适的。

标签:存储,区别,Redis,value,内存,key,Memcached
From: https://blog.51cto.com/u_15973676/6069220

相关文章

  • 银河麒麟V10系统安装Redis
    1、[root@localhostopt]#yuminstallcpp输入:y  2、[root@localhostopt]#yuminstallbinutils  3、[root@localhostopt]#yuminstallglibc4、[root@......
  • Redis 数据结构
    本文主要描述reids数据结构和底层数据结构的实现,用于熟悉redis的底层数据结构实现原理,下图是reids的整个数据结构组成。这篇文章主要介绍value对象这部分数据结构 SDS......
  • mobx store 创建区别
    mobx6之前的版本创建store的时候,如果有observable属性,那么store自动变成observable的mobx6之后的版本需要自己在构造函数调用makeObservable函数并传入store本身,从而把......
  • 进程与线程的区别
    1.根本区别:进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元。2.从属关系不同:进程中包含了线程,线程属于进程。3.开销不同:进程的创建、销毁和......
  • java redis 密码输错5次,已锁定,请30分钟后重试!
    Stringusername=sysUser.getUsername();StringretryCountNum=redisService.get(username);if(StrUtil.isNotBlank(retryCountNum)&&Integer.valueOf(retryCountNum......
  • 【转】golang的log.Fatal()和panic()函数的区别
    golang的log.Fatal()和panic()函数的区别在讲两者区别之前我们先看一下os.Exit()函数的定义:funcExit(codeint)Exitcausesthecurrentprogramtoexitwiththe......
  • MySQL中length()、char_length()的区别和用法
    方法概述:char_length(str)计算单位:字符不管汉字还是数字或者是字母都算是一个字符length(str)计算单位:字节utf8编码:一个汉字三个字节,一个数字或字母一个字节。gbk......
  • Centos运行.net core程序的多种方式以及相互之间的区别。
     nohupdotnet/www/wwwroot/xxx.dll--urls"http://*:6001;http://*:6002"&此时候的6001和6002端口对应的程序的内存和static变量都是存在同一个堆栈里面,可以做缓存。......
  • nohup java -jar启动jar包,war包以及nohup和&的区别
    nohupjava-jara.jar>a.log2>&1&上面的命令意识: 1. nohup:不挂断地运行命令。nohangup的缩写,意即“不挂断”,注意没有后台运行功能,如果你直接在shell中用CtrlC,......
  • 微信小程序全局变量(globalData)和缓存(StorageSync)的区别和用法
    globalData和storage的区别一、app.globalData是全局变量,下次进入的时候,就要重新获取,一般用于:1、保存一些可能涉及安全类的数据,例如资源类,每次需要很准确的,就建议用全......