redis数据库

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。 Redis开创了一种新的数据存储思路。目前多数的NoSql数据库本质上都是键值对形式,Redis也不例外。作为缓存数据库的一种,和Memcached相比,有以下几种主要的优点:

  • (1)速度上,Redis要比Memcached快,这是基于一些Benchmarks的测试结果得出的,而且在内存使用上,Redis突破了物理内存限制,可以使用虚拟内存;

  • (2)数据类型比Memcached要多,Redis支持List、Set、SortedSet、HashMap等多种数据结构;

  • (3)持久化方面,Memcached没有相应的持久化机制,而Redis有RDB快照和AOF日志两种形式结合做持久化,很大限度上保证了数据的持久化和安全性,不像Memcached断电后全都没了

  • redis-cluster架构图

    redis数据库_第1张图片

    架构细节:

    • (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

    • (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

    • (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

    • (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->key

    • (5)Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求重新发往这个地址,对外部透明。一个Key到底属于哪个Slot由crc16(key) % 16384 决定。

    三、redis安装和部署

    1. 单机部署
    2. 集群部署

      (参考部署文档)
      

    四、redis数据类型

    • 常用数据类型简介:

      redis常用五种数据类型:string,hash,list,set,zset(sorted set)

    • (1)String类型

      String是最简单的类型,一个key对应一个value

      String类型的数据最大1G。

      String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下,该integer的值限制在64位有符号数。

      在list、set和zset中包含的独立的元素类型都是Redis String类型。

    • (2)List类型

      链表类型,主要功能是push、pop、获取一个范围的所有值等。其中的key可以理解为链表的名字。

      在Redis中,list就是Redis String的列表,按照插入顺序排序。比如使用LPUSH命令在list头插入一个元素,使用RPUSH命令在list的尾插入一个元素。当这两个命令之一作用于一个空的key时,一个新的list就创建出来了。

      List的最大长度是2^32-1个元素。

    • (3)Set类型

      集合,和数学中的集合概念相似。操作中的key理解为集合的名字。

      在Redis中,set就是Redis String的无序集合,不允许有重复元素。

      Set的最大元素数是2^32-1。

      Redis中对set的操作还有交集、并集、差集等。

    • (4)ZSet(Sorted Set)类型

      Zset是set的一个升级版本,在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。

      Zset的最大元素数是2^32-1。

      对于已经有序的zset,仍然可以使用SORT命令,通过指定ASC|DESC参数对其进行排序。

    • (5)hash类型

      hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。


你可能感兴趣的:(redis数据库)