memcached和redis的区别
memcache和redis区别
memcach简介
Memcache时一个内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络I/O,
工作机制:
在内存中开辟一块空间,然后建立一个hash表,memcached自管理这些hash表
工作原理
Memcached基于健值对存储,key会通过hash算法转化成hash-key,便于查找。
Memcached有两个核心组件组成:服务端(server)和客户端,在一个memcached的查询中,客户端会先计算key的hash值来确定所出的server位置。当server确定以后,客户端对就会发送一个查询请求给对应的server,让它查找确切的数据。
内存管理机制
emcached会预先分配内存,
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,ltem根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且减少内存碎片的产生,但这种方式也会带来一定程度上的空间浪费
memcache与redis区别
1)redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储
2)内存使用使用效率对比
使用简单的key-value存储的话,memcached的内存利用率会更高一点,如果redis采用hash结构来做key-value存储,由于其组合式的压缩,内存的利用率更高。
3)性能对比:由于redis只使用单核,而memcached使用多核,所以平均在每一个核上redis在存储小数据时比memcached性能更高,而在100Ks=以上的时候memcached性能要高于redis
4)内存管理机制的不同
在redis中,并不是所有的数据都一一直存储在内存中的,这是和memcached相比最大的一个区别
Redis只会缓存所有的key端的信息,如果redis发现内存的使用量超过某一个值,将触发swap的操作,redis根据相应的表达式计算出那些key对应value需要swap到磁盘,然后再将这些这些key对应的value持久化到磁盘中,同时再内存清除。同时由于redis将内存中的数据swap到磁盘的时候,提供服务的主线程和进行swap操作的子进程会共享这部分内存,所以如果更新需要swap的数据,redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改
5)数据持久化的支持
虽然redis是基于内存的存储系统,但是他本身是支持内存数据的持久化,而且主要提供两种主要的持久化策略,RDB快照和AOF日志,而memcached是不支持数据持久化的操作的。
RDB持久化通过保存了数据库的健值对来记录数据库状态的不同,AOF持久化是通过保存reds服务器所执行的命令来保存记录数据库的状态的,
RDB持久化保存数据库状态的方法是将msg,fruits,numbers三个健的健值对保存到RDB文件中,而AOF持久化保存数据库的状态则是将服务器执行的SET,SADD,RPUSH三个命令保存到AOF文件中的,
RDB快照
redis支持将当前的数据快照存放成一个数据文件的持久化机制,即RDB快照,但是一个持续写入的数据库是如何生成快照的,
在生成快照的时候,将当前的进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成RDB文件。我们可以通过redis的slave指令来配置RDB快照生成的时机。RDB文件不会坏掉,因为其写操作是在一个新进程中进行的,当生成一个新的RDB文件时redis生成的子进程会先将数据写到一个临时文件中,然后通过原子性rename系统调用将临时文件重命名为RDB文件。
AOF持久化的实现
OF持久化的实现可以分为命令追击(append),文件写入,文件同步(sync)
1)命令追加
当AOF持久化功能打开的时候,服务器在执行完一个写命令的时候,会以协议的格式将被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾
2)AOF文件的写入与同步
服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓冲区里面,所以服务器在每次结束一个事件循环之前,它都会调用flushAppendonlyFIle函数考虑是否需要将将缓冲区的内容写入和保存到AOF文件里面。如果函数被调用,并且距离上次同步AOF文件已经超过了一秒钟,那么服务器会先将aof_buf中的内容写入到AOF文件中,然后再对AOF文件进行同步
3)文件的载入与数据还原
4)AOF重写
AOF持久化保存的命令越来越多,文件里的内容也月来越多,会对计算机造成影响。为了解决AOF文件体积膨胀问题,REDIS提供了AOF重写功能。Redis服务器可以创建一个新的AOF文件,新旧两个AOF文件保存的数据状态相同,但新AOF文件不会包含任何浪费空间的冗余命令,所以新的AOF会比旧的体积要小
memcached和redis的区别的更多相关文章
- Django缓存系统选择之Memcached与Redis的区别与性能对比
Django支持使用Memcached和Redis这两种流行的内存型数据库作为缓存系统.我们今天来看Memcached和Redis的区别和性能对比. redis和memcached的区别 1.Redi ...
- memcached 与 redis 的区别和具体应用场景
1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...
- memcached和redis的区别和应用场景
一:特性和对比 1.性能上: 性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比 Memcached性能更高 ...
- memcached 与 redis 的区别?
1.Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储.而 memcache 只支持简单数据类型,需要客户端自己处理复 杂对象 2.R ...
- Memcached与Redis对比,Redis基础笔记回顾
Memcached 1.为什么要把数据存入内存?快 2.Memcached和Redis的区别 (1)Memcached缓存.Redis数据库,Memcached不支持持久化到磁盘 (2)Redis提供 ...
- NOSQL学习之一:Memcached, Redis, MongoDB区别
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理. Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. MongoDB是一个基于分布 ...
- redis和memcached的优缺点及区别
1. 使用redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...
- Redis和Memcached到底有什么区别?
前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快.但我们在开发过程中,这两个内存数据库,我们到底要如何选择呢?它们的优劣都有哪些?为什么现在看Redis要比Mem ...
- Memcached、Redis和MongoDB的区别
Memcached和Redis都是内存数据库. Memcached是多线程运行的: Redis单线程是单线程运行的: MongoDB是文档型的非关系型数据库..Net:RavenDB.
随机推荐
- ActiveMQ配置文档
本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...
- vscode + php+ftp
首先,php网站的文件都整理到一个文件夹中: 然后,用vscode的File.Open Folder打开刚才的文件夹: 3,Ctrl+Shift+P,输入SFTP:Config,会打开一个配置文件,编 ...
- js开发问题
error: npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! sha3@1.2.0 install: `node-gyp rebuild` npm ...
- flex布局使用方法简要汇总
近期因为使用inline-block,在项目部署后出现了一点小问题,几番解决未果,遂使用flex布局,于是借此机会对flex布局的用法做一个简要的汇总. 遇到的bug如下: 本想两个div使用inli ...
- unity shader 波动圈
c# //////////////////////////////////////////// // CameraFilterPack - by VETASOFT 2018 ///// /////// ...
- [IJCAI-17 口碑商家客流量预测]
IJCAI-17 口碑商家客流量预测 第 1 赛季截止日期 2017/03/14 赛制介绍 重要时间2月8日 08:00: 评测启动3月7日 10:00: 报 ...
- junction 文件夹做连接到别的分区
加载连接 C:\>junction "C:\Docume~1\Admini~1\LocalS~1\Applic~1\360Chr~1\Chrome\UserDa~1\Default&q ...
- 联盟周赛2019810 csgo (动态规划、不下降子序列)
今天起晚了...就做了俩题 难受的一批... 题目描述 著名第一人称射击游戏 csgo 因其优秀的平衡性,爽快的射击感和科学的战术配比赢得了世界广大玩家的好评. 在一局游戏中,分为两个阵营,他们的目标 ...
- Linux 下面根据端口号 查询 可执行程序的路劲的方法
1. 安装上lsof 的包 2. 使用 lsof 命令查看相关进程 lsof -i: 效果为: 3. 根据/proc 的目录查看可执行目录的文件位置 ll /proc/procid # procid ...
- 委托、泛型委托、多播委托、匿名函数、lamda表达式、事件
1.为什么要使用委托 将一个方法作为参数传递给另一个方法 2.委托概念 public delegate int 委托名(int a, int b); 声明一个委托类型,可以用访问修饰符修饰,deleg ...