Redis和memcache的区别(Redis相关、Redis的String中key和value的最大值是512M)

Redis的String中key和value的最大值(512M)

Redis的特点

  1. 速度快;因为数据存在内存中。类似于HashMap,HashMap的优势就是查找和操作的速度都是O(1);
  2. 支持丰富的数据类型:String、list、set、sorted set、hash
  3. 支持事务,操作都是原子性的;
  4. 丰富的特性:可用于缓存、消息等,按照Key设置过期时间,过期之后自动删除,有多种过期策略
  5. 支持数据的持久化(AOF和RDB),可以将内存中的数据保持在磁盘中(所以Redis可以拥有Session Cache 作为会话缓存);
  6. 支持数据的备份:Master和Slave模式

Redis和memcached的区别

memcached的key的最大长度是250个字符;Redis中的key和value都是512Mb.
最简单的就是数据类型的不同(Memcache只是简单的key-value存储)、还有存储方式(Memcache全部是在内存中,Redis部分在硬盘中,所以Memcache的存储受到了内存大小的限制,Memcache中数据超过内存的大小就会抹掉前面的数据)。
还有以下几种不同

1. 性能

Redis是单核,memcache可以使用多核,所以存储大数据上Memcache性能要好于Redis;
多核多线程在一定程度上性能还是高于单核单线程的操作的。

2.数据类型

与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis内部使用一个redisObject对象来表示所有的key和value。
在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去,序列化再反序列化,这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。

3.数据的备份

memcached挂掉后,数据不可恢复;
redis数据丢失后可以通过aof恢复,Redis支持数据的备份,即master-slave主从模式的数据备份

4. 数据的持久化

Redis和Memcached都是将数据存放在内存中,都是内存数据库。
但是Redis 部分存储在磁盘;Memcache全部都是在内存中,断电就不可恢复,不支持持久化。

5. 集群和分布式的存储

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

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

相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储,但没有采用一致性哈希,其实是cluster集群。最新版本的Redis已经支持了分布式存储功能。**Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。**在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。(具体见redis集群的几种模式)

redis常见性能问题和解决方案:

(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件,因为当快照比较大的时候,会阻塞主线程的工作,影响是非常大的,会间断性暂停服务。

(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

(4) 尽量避免在压力很大的主库上增加从库

(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

Redis使用场景

缓存:会话缓存(Session Cache)和全页缓存(FPC);
队列(list和set 有push和pop的操作)
排行榜和计数器(Set和sorted set)
发布和订阅(基于Redis的发布和订阅功能做社交网络)

Redis的淘汰策略

redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

资料:https://blog.csdn.net/u011489043/article/details/78922390

你可能感兴趣的:(分布式)