1. Memcache
Memcache是一个高性能,分布式内存对象缓存系统,通过在内存中缓存一个巨大的hash表,他能够存储包括图像,文件,索引,sql语句结果等数据,可以理解为它理解为一个为提升读取效率的数据容器,先将数据从数据库提取到内存中,然后在内存中读取,从而提升读取效率
1.1 Memcache的特性
使用物理内存作为缓存区,可独立运行在服务器上,每个进程最大内存为2G。如果想缓存更多的数据,可以开辟更多的Memcache进程(不同端口)或者使用分布式Memcache进行缓存。
使用K-V形式的方式来存储数据,这是一种单索引的结构化数据组织形式,查询的效率高
协议简单:基于文本行的协议,直接通过telnet在Memcache服务器上进程存取数据操作,简单
基于libevent高性能通信
内置的内存管理方式:使用stab Allcation进行内存管理,按照既定的内存,将内存切割成特定的长度来存储相应的数据
分布式:使用hash一致性算法,进行分布式存储数据,各个Memcache服务器之间互不通讯,各自独立存取数据,不共享任何信息,服务器并不具有分布式功能,分布式部署取决于memcache客户端
缓存策略:LRU到期失效策略,即在内存用完之后,服务器端会根据LRU策略,计算最近没有使用过的数据,将其进行替换
 
2. Redis
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
2.1 Redis的特性
Redis支持永久性操作,可以从内存永久化保存在磁盘,下次重启可以从磁盘中恢复数据
除去K-V形式之外,还支持list,set,zset,hash等多种数据结构
支持主从架构数据备份
2.2 Redis各种数据类型应用和实现方式
String:数据结构是简单的K-V类型,v可以是数据,也可以是数字(常用操作:set,get,decr,incr,mget)
set:sadd,spop,smembers,sunion,sinter
list :lpush/rpush,lpop/rpop,lpoprpush,lrange
hash:hset,hgetall,hget
zset:zadd,zrank,zrange,zrem,zcard
- 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和Redis的详细理解与区别的更多相关文章

  1. PHP面试常考内容之Memcache和Redis(1)

    你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...

  2. NoSQL数据库memcache和redis区别

    在web后台发开面试中,经常会被问道memcache和redis的区别和使用情况. 其中memcache和redis都是基于内存存储的缓存系统,存储形式key--value键值对的形式. 区别: 1. ...

  3. memcache and redis 的区别

    memcache和redis都属于缓存但是memcache的存储大小是收到 限制的memcache的 键值长度是250,内存的大小限制是1M并且memcache不支持数据的持久化缓存 redis支持五 ...

  4. 缓存框架有使用过哪些?memcache和redis有什么区别?项目中,怎么去选择?

    缓存有:ehcache,memcache和redis等 区别: 1. Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等. ...

  5. 面试题:3年工作经验 已看1 有用 memcache和redis有什么区别

    此内容偏中高级,适合有三年经验者. 1.       java中wait和sleep有什么区别?多线程条件下如何保证数据安全? 答:最大区别是等待时wait会释放锁(乐观锁),而sleep会一直持有锁 ...

  6. Memcache与Redis有什么区别?

    Redis 和 Memcache 都是基于内存的数据存储系统.Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库.Redis是一个开源的key-value存储系 ...

  7. Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  8. (转)memcache、redis缓存

    memcache原理.内存模型: http://www.csdn.net/article/2016-03-16/2826609 redis原理: http://baike.baidu.com/link ...

  9. Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

随机推荐

  1. 例题3_3 回文词(UVa401)

    输入一个字符串,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓回文串,就是反转以后和原串相同,如abba和madam.所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE.注意,并 ...

  2. python:布尔类型

    bool:有两个值,True 和 False bool 其实是int类型的一个子类,True一般为1,False一般为0 判断前一个是否是后一个的子类:issubclass(A, B) 内建函数boo ...

  3. list中的对象或者map中的版本号排序 version排序

    经常会用到版本号排序,直接把他封装成一个工具用起来比较方便. List<A> aList = new ArrayList<>(); ...aList 赋值 ... Collec ...

  4. ASA-有关AAA用户登录的问题

    问题示例:I have created a test user that is set to privilege 15 in the config: When I log in to the ASA ...

  5. OpenThreads库学习

    在看STM32资料中看到STM32WB系列“双核无线微控制器配备双核无线微控制器(MCU)配备Bluetooth® 5.OpenThread和ZigBee®3.0连接技术,同时兼备超低功耗性能“不知道 ...

  6. 【PAT甲级】1052 Linked List Sorting (25 分)

    题意: 输入一个正整数N(<=100000),和一个链表的头结点地址.接着输入N行,每行包括一个结点的地址,结点存放的值(-1e5~1e5),指向下一个结点的地址.地址由五位包含前导零的正整数组 ...

  7. C — 小知识

    老是记错int与void*之间的转换,所以记录一个,顺便用一下一些宏.预处理... int与void*的转换.打印变量名: #include <stdio.h> // 打印变量名 #def ...

  8. IIS7和IIS8环境下 ThinkPHP专用URL Rewrite伪静态规则

      这是适用于IIS7,IIS7.5,IIS8.0及以上的ThinkPHP的伪静态规则,把以下代码保存成web.config文件,放到FTP的web目录内即可. <?xml version=&q ...

  9. KEAZ128 时钟配置

    本文介绍如何用KEAZ128评估版(FRDM-KEAZ128Q80)配置为40MHz core freqency/20MHz bus frequency. 1.了解器件时钟特性 参见NXP KEA12 ...

  10. js数组和java数组的区别

    1,js数组可以自动扩容,不会出现数组越界的情况 2,js数组中可以存放任意数据类型 3,java数组一旦定义长度,不可以更改 4,java数组中的数据类型必须一致