Redis简介

  • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单, 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis定义

  • redis是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
  • Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
  • Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。同步对读取操作的可扩展性和数据冗余很有帮助。
  • Redis存储

redis使用了两种文件格式:全量数据和增量请求。

  • 全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;
  • 增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。
  • Redis群集
  • Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

  • Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
  • Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。
  • 下面说一下 Redis 集群搭建规划,由于集群至少需要6个节点(3主3从模式), 我本地也起不了那么多虚拟机 , 计划是在一台机器上模拟一个集群, 这和生产环境的集群搭建没本质区别。

  • Redis安装

    # wget http://download.redis.io/releases/redis-3.0.7.tar.gz
    # tar xzvf redis-3.0.7.tar.gz 
    # ln -s redis-3.0.7 redis
    # cd redis
    # make && make install
    
    # redis-server &   //启动服务 &=后台运行
    # redis-cli shutdown   停止服务
  • 创建多节点
  • 创建实例目录

    # mkdir /usr/local/redis-cluster
    # cd redis-cluster/
    # mkdir -p 6379/data 6380/data 6381/data 6382/data 6383/data 6384/data
  • 复制执行脚本

    # mkdir /usr/local/redis-cluster/bin
    # cd /usr/local/redis/src
    # cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server redis-trib.rb /usr/local/redis-cluster/bin
  • 复制一个新 Redis 实例

    # cp /usr/local/redis/* /usr/local/redis-cluster/6379
    # vim /usr/local/redis-cluster/6379/redis.conf
        port 6379(每个节点的端口号)
        daemonize yes
        bind 192.168.86.130(绑定当前机器 IP)
        dir /usr/local/redis-cluster/6379/data/(数据文件存放位置)
        pidfile /var/run/redis_6379.pid(pid 6379和port要对应)
        cluster-enabled yes(启动集群模式)
        cluster-config-file nodes6379.conf(6379和port要对应)
        cluster-node-timeout 15000
        appendonly yes
  • \cp -rf 命令是不使用别名来复制

    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6380
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6381
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6382
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6383
    # \cp -rf /usr/local/redis-cluster/6379/* /usr/local/redis-cluster/6384
  • 分别修改6380 、6381、6382、6383、6384节点配置文件

    vim redis.conf
    :%s/6379/6380/g       //文本内使用全局替换
  • 开启所有节点服务(&是后台运行)

    # for i in 79 80 81 82 83 84
    do
        /usr/local/bin/redis-server /usr/local/redis-cluster/63$i/redis.conf&
    done
  • 登录随便一个节点验证 确认节点服务可以正常登陆

    # /usr/local/redis-cluster/bin/redis-cli -h 192.168.86.130 -p 6379

    Redis的安装及创建节点、部署群集

  • 安装群集需要的 ruby环境
  • 由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口。

    # wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    # tar xvf ruby-2.3.1.tar.gz
    # cd ruby
    # ./configure -prefix=/usr/local/ruby
    # make && make install
    # cd /usr/local/ruby
    # cp bin/ruby /usr/local/ruby
    # cp bin/gem /usr/local/bin
  • 安装rubygem redis依赖:

    # wget http://rubygems.org/downloads/redis-3.3.0.gem
    # gem install -l redis-3.3.0.gem
    # gem list --check redis gem

Redis的安装及创建节点、部署群集

  • 安装 redis-trib.rb:

    # cp /usr/local/redis/src/redis-trib.rb /usr/local/bin
  • 安装完成ruby环境 执行下面命令确认是否正常

    # redis-trib.rb

    Redis的安装及创建节点、部署群集

  • 创建群集
  • 简单解释一下这个命令:调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

    # /usr/local/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.86.130:6379 192.168.86.130:6380 192.168.86.130:6381 192.168.86.130:6382 192.168.86.130:6383 192.168.86.130:6384
    (yes)

    Redis的安装及创建节点、部署群集



  • 验证
  • 通过客户端命令连接上,通过集群命令看一下状态和节点信息等。

        # /usr/local/redis-cluster/bin/redis-cli -c -h 192.168.86.130 -p 6379   //登录
            192.168.86.130:6379> cluster info            //查看状态
            192.168.86.130:6379> cluster nodes      //查看节点信息

Redis的安装及创建节点、部署群集