linux下载安装:
    安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
    1.从官网下载 http://download.redis.io/releases/redis-x.x.x.tar.gz 根据需要下载对应版本
    2.解压源码 tar -zxvf redis-x.x.x.tar.gz
    3.进入解压目录进行编译 make
    4.安装到制定目录 make PREFIX=/usr/local/redis install  路径可以自定义
    5.安装之后在安装目录下的bin目录下有以下文件
    -------------------------------------------
    redis-benchmark    redis性能测试工具
    redis-check-aof    redis的aof日志检查工具
    redis-check-rdb    redis的rdb日志检查工具
    redis-cli       redis的客户端工具
    redis.conf         从源码目录中拷贝的redis的配置文件,本身并不存在该文件
    redis-server       redis的服务
    -------------------------------------------
    6.执行bin下面的redis-server 并指定配置文件 启动redis进程,默认端口为6379 ---- bin/redis-server redis.conf
    7.在另一个窗口启动redis-cli客户端连接服务器
redis配置:
    1.daemonize no      --- 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。
    2.port 6379         --- 监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
    3.tcp-backlog 511   --- TCP 监听的最大容纳数量,在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题。Linux 内核会一声不响的把这个值缩小成 /proc/sys/net/core/somaxconn 对应的值,所以你要修改这两个值才能达到你的预期。
    4.timeout 0         --- 指定在一个 client 空闲多少秒之后关闭连接(0 就是不关闭)
    5.databases 16      --- 设置数据库的数目。默认数据库是 DB 0,你可以在每个连接上使用 select <dbid> 命令选择一个不同的数据库
    6.requirepass foobared --- 设置密码
    ...
    参考:
命令:
    redis命令详细描述在 http://www.redis.net.cn/order/3528.html 查看
事务:
    multi 开启事务
    exec  提交事务
    discard 撤销事务
    watch 监视key的值变化
    unwatch 取消所有监视
消息发布与订阅:
    publish channel message 发布信息
    subscribe channel 订阅频道
    psubscribe pattern 匹配订阅
    unsubscribe channel 取消订阅
    punsubscribe pattern 匹配取消订阅
持久化:
    快照rdb:
        工作原理:每隔N分钟或者N次写操作之后从内存生成rdb文件,压缩,放在备份目录
        配置:save 900 1    900秒有1次修改
              save 300 10   300秒有10次修改
              save 60 10000 60秒有10000次修改
              (从下往上检查,全部屏蔽之后不进行rdb持久化)
              stop-writes-on-bgsave-error yes  后台写错误是否停止写入
              rdbcompression yes   导出dump文件是否压缩
              rdbchecksum yes      导入时验证文件完整性
              dbfilename dump.rdb  导出文件的文件名
              dir ./               导出的文件的路径
        缺陷:两个保存点之间容易丢失数据
    aof:
        配置:appendonly no 是否开启aof方式持久化
              appendfilename "appendonly.aof"  aof文件日志文件的文件名称
              appendfsync everysec/always/no  每分钟/总是每一条命令/系统决定 同步
              no-appendfsync-on-rewrite no    正在导出rdb时是否停止追加aof文件
              auto-aof-rewrite-percentage 100 aof文件大小比上次从重写时的增长率为100%时重写
              auto-aof-rewrite-min-size 64mb  aof文件的重写的最小大小限制
        手动触发重写:使用BGREWRITEAOF
        aof和rdb共用:开启aof之后恢复时按照aof为准
性能测试:
    使用redis-benchmark -n count 执行count个命令测试性能

redis集群:
    主从通信:1.rdb同步 2.aof同步 3.replicationFeedSlaves进程同步
    集群原理:1.所有redis节点使用(ping-pong机制)互联
          2.节点的宕机是通过集群中超过半数的节点失效才生效
          3.客户端连接时连接任何一个可用节点即可
          4.集群将所有物理节点映射到0-16383个hash槽上,cluster负责维护
    集群搭建:
        1.redis集群需要ruby支持
        --------------------------------
        #安装ruby
        yum install ruby
        yum install rubygems
        #安装ruby和redis的接口程序
        gem install redis-x.x.x.gem
        --------------------------------
        2.创建集群
            这里需要6台服务器,3台主服务器,3台备份服务器
            伪集群的话在一个服务器上使用不同的端口表示不同的服务器
            例如:主节点--127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003
                  从节点--127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006
            创建集群cluster目录并复制redis安装目录bin下的文件,并重命名redis1-6
            拷贝redis源码目录src下的redis-trib.rb文件到该目录
        3.修改每个redis实例的配置文件
            port xxx                根据实际要分配端口配置
            cluster-enabled yes     开启redis集群支持
            .... 根据需要修改其他配置

        4.创建启动脚本并启动所有redis实例
            -------------------------------
            cd redis1
            ./redis-server redis.conf
            cd ..
            cd redis2
            ./redis-server redis.conf
            cd..
            ...
            -------------------------------
            编写完成之后为文件授予执行权限 chmod +x startall.sh
        5.执行集群创建命令
            -------------------------------
            ./redis-trib.rb create --replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006
            使用create参数创建集群并分配主从节点,--replicas 1表示为每个主节点分配一个从节点,剩下的是节点集合
            -------------------------------
            可以从命令执行的输出情况看出集群的结果
        6.连接集群
            集群连接使用 ./redis-cli -c -h 127.0.0.1 -p 8001 其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号
        7.查询节点信息
            连接集群之后使用 cluster info可以查看集群信息
        8.添加主节点
            新增一个8007端口的redis服务
            修改配置文件
            启动新增的redis服务
            使用./redis-trib.rb add-node 127.0.0.1:8007 127.0.0.1:8001 命令添加节点,add-node是加入集群节点,127.0.0.1:8007作为要添加的节点,127.0.0.1:8001表示要加入的集群,理论上集群中任意节点都可以
            --检查节点状态
            使用 ./redis-trib.rb check 127.0.0.1:8007 查看节点的状态是否添加成功
            --重新分配hash槽
            新增节点并未分配hash槽,所以无法存储数据
            使用 ./redis-trib.rb reshard 127.0.0.1:8001(集群中任意节点即可)
            提示需要为8007分配多少个槽,根据需要进行分配
            还需要输入新增节点的id:根据实际情况输入,输出信息Performing Cluster Check下方为每个节点信息,M:或者S:后面的即为节点id
            之后会询问是否从某个节点获取槽进行分配,输入指定id,槽将从指定节点进行获取分配,输入all节点将会全部重新分配,输入done取消分配
            最后输入yes开始移动槽到目标结点id
        9.添加从节点
            新增一个8008端口的redis服务
            使用./redis-trib.rb add-node --slave --master-id {masterid} 127.0.0.1:8008 127.0.0.1:8001 为指定的主节点添加从节点,最后指定集群
            检查是否添加成功过 ./redis-trib.rb check 127.0.0.1:8008  
        10.删除主节点
            使用 ./redis-trib del-node 127.0.0.1:8002  {node-id} 指定集群,并指定要删除的节点id
            --报错
            删除节点需要被删除节点无数据,需要重新分配hash槽将要删除节点的槽清空
            --重新分配hash槽
            使用 ./redis-trib.rb reshard 127.0.0.1:8001(集群中任意节点即可)
            提示需要为其他节点分配多少个槽,输入要删除的节点的槽大小
            还需要输入要接受槽节点的id
            之后会询问是否从某个节点获取槽进行分配,输入要删除的节点id
            最后输入yes开始移动槽到目标结点id
            --执行删除操作
            ./redis-trib del-node 127.0.0.1:8002  {node-id}
        11.删除从节点
            直接执行 ./redis-trib del-node 127.0.0.1:8002  {node-id}
运维命令:
    time:查看当前时间戳,返回秒数和微秒数
    dbsize:查看当前所选数据库下key的数量
    bgrewriteaof:手动重写aof文件
    save:手动保存rdb文件 bgsave:后台执行保存rdb文件
    lastsave:最后保存rdb文件的时间
    flushdb:清空当前所选数据库的数据
    flushall:清空所有数据
    info [section]:服务器状态及配置等信息
    config get/set conf :查看或者设置配置信息
    slowlog get :查看执行比较慢的日志记录
    shutdown [save | nosave] :关闭服务器