1 Redis是什么
Redis 是一个高性能的开源的、C语言写的Nosql(非关系型数据库),数据保存在内存中。 Redis 是以key-value
形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的些基本要求,比如说,不遵循sql标准,事务,表结构等等,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。 Java中数据结构:String,数组,list,set map… Redis提供了很多的方法,可以用来存取各种数据结构的数据。
2 特点(优势)
1.数据保存在内存,存取速度快,并发能力强
2.它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。
3.redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。
4.它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
5.Redis支持集群(主从同步、负载均衡)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
6.支持持久化,可以将数据保存在硬盘的文件中
7.支持订阅/发布(subscribe/publish)功能 QQ群
1、数据存放:存放到内存中,还能不定期持久化到磁盘。存取速度快,并发能力强,断电后数据不丢失。
2、支持Value类型更多。
3、多种客户端(语言 java php c# js)
4、支持集群来扩展空间 8G+8G+16G
5、开源(免费还有很多人维护)
3 redis缓存
在互联网应用中经常需要用redis来缓存热点数据
。
redis数据在内存,可以保证数据读取的高效,接近每秒数十万次的吞吐量
减少下层持久层数据库读取压力,像mongodb,每秒近千次读取就已经表示压力山大
redis单进程单线程运行,天然具备读写的原子性,避免并发导致脏读等问题
4 Redis服务器集群
Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)
。
Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的错误。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
Redis 集群提供了以下两个好处:
将数据自动切分(split)到多个节点的能力。
当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力
。
集群即Redis Cluster,集群是有多个节点组成,Redis数据分布在这些节点中。集群的节点分为主节点和从节点,主节点负责读写请求和集群信息的维护,从节点维护主节点的数据和状态信息。
5 总结
Redis3.0加入了Redis的集群模式,实现了数据的分布式存储,对数据进行分片,将不同的数据存储在不同的master节点上面,从而解决了海量数据的存储问题。
Redis集群采用去中心化的思想,没有中心节点的说法,对于客户端来说,整个集群可以看成一个整体,可以连接任意一个节点进行操作,就像操作单一Redis实例一样,不需要任何代理中间件,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。
Redis也内置了高可用机制,支持N个master节点,每个master节点都可以挂载多个slave节点,当master节点挂掉时,集群会提升它的某个slave节点作为新的master节点。
如上图所示,Redis集群可以看成多个主从架构组合起来的,每一个主从架构可以看成一个节点(其中,只有master节点具有处理请求的能力,slave节点主要是用于节点的高可用)
Redis集群的数据分布算法:哈希槽算法。