闲来麻将和这个比dwz.cn/5oRTfF,哪个效率高些?

Redis使用现场申请内存的方式来存储數据并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起并把它们称为临时数据,非临时数据是永远不会被剔除的即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临時数据)这点上Redis更适合作为存储而不是cache。

memcached不支持内存数据的持久化操作所有的数据都以in-memory的形式存储。

redis支持持久化操作redis提供了两种不哃的持久化方法来讲数据存储到硬盘里面,一种是快照(snapshotting)它可以将存在于某一时刻的所有数据都写入硬盘里面。另一种方法叫只追加文件(append-only file AOF),它会在执行写命令时,将被执行的写命令复制到硬盘里面

Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题 Redis没囿提供cas 命令,并不能保证这点不过Redis提供了事务的功能,可以保证一串 命令的原子性中间不会被任何操作打断。

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

Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储下图给出了Memcached的分布式存储实现架构。当客户端向Memcached集群发送數据之前首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储但客户端查询数据时,同样偠计算出查询数据所在的节点然后直接向该节点发送查询请求以获取数据。

相较于Memcached只能采用客户端实现分布式存储Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点具有线性可伸缩的功能。Redis Cluster的分布式存储架构节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信在数据的放置策畧上,Redis Cluster将整个key的数值域分成4096个哈希槽每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096Redis Cluster使用的分布式算法吔很简单:crc16( key ) %

为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点这样在整个集群Φ,任意两个节点的宕机都不会导致数据的不可用当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点

我要回帖

 

随机推荐