Memcache与redis的区别?

Memcache与redis的区别?

数据结构:Memcache仅能支持简单的K-V形式,Redis支持的数据更多

多线程:Memcache支持多线程,Redis支持单线程,CPU利用Memcache利用率更高

持久化:Redis支持持久化,Memcache不支持持久化

分布式:Redis做主从结构,而Memcache服务器需要通过hash一致化来支撑主从结构

虚拟内存:Redis当物理内存使用完时,会将一些很久没有用的内存交换到磁盘,而Memcache采取的LUR策略,将一部分数据刷新掉

 

两者进行对比,是因为都是内存数据管理系统,而实际上两者之间区别还是很大,Redis更多的象一个键值对数据,包括数据的持久化,主从架构,数据备份等策略都是为了保证数据安全以及高可用,而Memcache更多的是一个数据缓存系统是为了提升数据的读取效率,所以两者的应用也有所不同,Memcache适合用于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等工作场合,Redis除去做Nosql数据库使用外,还能用做消息队列,数据堆栈和数据缓存等。

 

什么是memcache?

Memcache是一个高性能,分布式于内存对象中的缓存系统,通过在内存中缓存一个巨大的hash表,他能够存储包括图像,文件,sql语句结果等数据,可以理解为它是一个为提升读取效率的数据容器,先将数据从数据库提取到内存中,然后在内存中读取,从而提升读取效率

Memcache的特性

使用物理内存作为缓存区,可独立运行在服务器上,每个进程最大内存为2G。如果想缓存更多的数据,可以开辟更多的Memcache进程(不同端口)或者使用分布式Memcache进行缓存。

使用K-V形式的方式来存储数据,这是一种单索引的结构化数据组织形式,查询的效率高,协议简单:基于文本行的协议,直接通过telnet在Memcache服务器上进程存取数据操作,简单基于libevent高性能通信

内置的内存管理方式:使用stab Allcation进行内存管理,按照既定的内存,将内存切割成特定的长度来存储相应的数据

分布式:使用hash一致性算法,进行分布式存储数据,各个Memcache服务器之间互不通讯,各自独立存取数据,不共享任何信息,服务器并不具有分布式功能,分布式部署取决于memcache客户端

缓存策略:LRU到期失效策略,即在内存用完之后,服务器端会根据LRU策略,计算最近没有使用过的数据,将其进行替换

什么是redis?

Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串,散列, 列表, 集合, 有序集合 与范围查询, 位图,超日志和 地理空间,索引半径查询。 Redis 内置了 复制(LUA脚本, LRU驱动事件,事务和不同级别的 磁盘持久化 并通过 Redis哨兵和自动 分区提供高可用性

 

Redis的特性

Redis支持永久性操作,可以从内存永久化保存在磁盘,下次重启可以从磁盘中恢复数据

除去K-V形式之外,还支持list,set,zset,hash等多种数据结构

支持主从架构数据备份

 

Memcache支持的数据类型有什么?

memcache支持简单的数据类型,想要存入复杂的数据类型必须把复杂的数据类型转变成简单的数据类型。

 

 

 

Redis支持的数据类型有什么?

redis支持的五大数据类型:

1.String(字符串)

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

 

2.Hash(哈希)

Redis hash 是一个键值对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

类似Java里面的Map<String,Object>

 

3.List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

它的底层实际是个链表

 

4.Set(集合)

Redis的Set是string类型的无序集合。它是通过HashTable实现的,

 

5.zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

 

memcache与memcached的区别?

1.由于项目需要这里还是区分下Memcached与Memcache差别,谨防再步入坑中

2.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些。 

 

2 . Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。

3.memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。

4.memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。

为什么使用redis?

速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;

注意:单线程仅仅是说在网络请求这一模块上用一个线程处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理

丰富的数据类型,Redis有8种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);

除了提供的丰富的数据类型,Redis还提供了像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo等个性化功能。

Redis的代码开源在GitHub,代码非常简单优雅,任何人都能够吃透它的源码;它的编译安装也是非常的简单,没有任何的系统依赖;有非常活跃的社区,各种客户端的语言支持也是非常完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、分布式成为可能。

 

Redis 应用场景如何使用?

对于两者的选择还是要看具体的应用场景,如果需要缓存的数据只是key-value这样简单的结构时,我在项目里还是采用memcache,它也足够的稳定可靠。如果涉及到存储,排序等一系列复杂的操作时,毫无疑问选择redis。 

猜你喜欢

转载自blog.csdn.net/weixin_43681591/article/details/85333617