redis集群和持久化

----------------------------redis----------------------------
一、哪儿用了redis? 为什么用?
    哪儿用了:首页轮播广告
    为什么用:因为mysql走的硬盘顶不住高并发;redis是走内存;
二、什么是redis?
    redis是c语言开发的高性能的k-v形式的数据库,数据存储在内存中
三、redis的安装和启动
    1、安装
        1)安装c语言环境
            yum install gcc-c++
        2)上传并解压
            cd /usr/upload
            tar -zxvf redis-3.0.0.tar.gz
        3)编译并安装
            cd /usr/upload/redis-3.0.0
            make
            make install PREFIX=/usr/local/redis
        4)拷贝并修改配置文件
            cp /usr/upload/redis-3.0.0/redis.conf /usr/local/redis/bin
            vim /usr/local/redis/bin/redis.conf:
                daemonize yes
    2、启动和关闭
        启动:
            /usr/local/redis/bin
            ./redis-server redis.conf
        关闭:
            /usr/local/redis/bin
            ./redis-cli -h 127.0.0.1 -p 6379 shutdown
四、持久化
    1、RDB:默认[数据]
        策略:
            save 900 1
            save 300 10
            save 60 10000

        缺点:不能保证数据完整性
        优点:不影响性能

        实验:
            1、删除dump.rdb
            2、set str 123
            3、./redis-cli shutdown----->观察dump.rdb(生成快照文件并持久化数据)
    2、AOF:[命令]
        策略:
           # appendfsync always
           appendfsync everysec
           # appendfsync no

        缺点:影响性能
        优点:保证数据完整性

        实验:
            1、设置appendonly 为 yes
            2、set str1 123
            3、等待一秒观察appendonly.aof(持久化数据)
五、主从复制
    1、过程
        1)从往主发送sync命令
        2)主往从发送rdb
        3)主往从发送命令
    2、配置步骤
        主:无须配置
        从:slaveof masterip masterport

        实验:
            1)往主写数据,观察从是否同步
            2)关闭主,往从写数据(主死了从只能读)
六、redis-cluster
    1、哨兵的缺点?
        1)主总会满,rdb越来越大
        2)哨兵节点又不存储数据
    2、redis集群是多少台?
        投票容错超过半数:3台   高可用:3台
    3、为什么client连哪一台都行?为什么集群中有一个节点挂了,则整个群都挂了?
        redis集群中有16384个槽分给了3个节点,存取数据时:crc16(key)%16384=0-16383
    4、搭建步骤
        1)安装ruby环境
            yum install ruby
            yum install rubygems
            cd /usr/upload
            gem install redis-3.0.0.gem
            cd redis-3.0.0/src
            ll *.rb
        2)删除dump.rdb和appendonly.aof文件
            cd /usr/local/redis/bin
            rm -f appendonly.aof
            rm -f dump.rdb
        3)拷贝6个节点
            cd /usr/local
            mkdir redis-cluster
            cp -r redis redis-cluster/redis-7001
            cp -r redis redis-cluster/redis-7002
            cp -r redis redis-cluster/redis-7003
            cp -r redis redis-cluster/redis-7004
            cp -r redis redis-cluster/redis-7005
            cp -r redis redis-cluster/redis-7006
        4)修改配置文件
            vim /usr/local/redis-cluster/redis-7001/bin/redis.conf:
                port 7001
                cluster-enable yes
            vim /usr/local/redis-cluster/redis-7002/bin/redis.conf:
                port 7002
                cluster-enable yes
            vim /usr/local/redis-cluster/redis-7003/bin/redis.conf:
                port 7003
                cluster-enable yes
            vim /usr/local/redis-cluster/redis-7004/bin/redis.conf:
                port 7004
                cluster-enable yes
            vim /usr/local/redis-cluster/redis-7005/bin/redis.conf:
                port 7005
                cluster-enable yes
            vim /usr/local/redis-cluster/redis-7006/bin/redis.conf:
                port 7006
                cluster-enable yes
        5)创建启动脚本[v-y-p]
            cd /usr/local/redis-cluster
            vim start-all.sh:
                cd /usr/local/redis-cluster/redis-7001/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7002/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7003/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7004/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7005/bin
                ./redis-server redis.conf
                cd /usr/local/redis-cluster/redis-7006/bin
                ./redis-server redis.conf
            chmod 777 start-all.sh
            ./start-all.sh
            ps -ef | grep redis
        6)使用ruby脚本搭建集群
            cd /usr/upload/redis-3.0.0/src
            ./redis-trib.rb create --replicas 1 192.168.204.31:7001 192.168.204.31:7002 192.168.204.31:7003 192.168.204.31:7004 192.168.204.31:7005  192.168.204.31:7006
        7)测试
           cd /usr/local/redis-cluster/redis-7001/bin
           ./redis-cli -c -p 7001
           a、观察是否按分配的槽存储数据
                127.0.0.1:7001> set str 123
           b、观察主从关系
                127.0.0.1:7001> cluster nodes
           c、把7001停掉, 再观察主从关系
               ./redis-cli -p 7001 shutdown
               ./redis-server redis.conf
               127.0.0.1:7001> cluster nodes

七、基本命令
    keys *:查看所有key值
    exists:判断key值是否存在
    expire和ttl:设置和查看key的失效时间
    incr和decr:自增和自减
八、redis五种数据类型
                        赋值                          取值                       删除                  特点
    string            set k v                       get k                      del k                 string
    hash              hset k kv                     hget k k                   hdel k k              map
    list              lpush/rpush k v...            lrange k 0 -1              lrem k -2 v           double linkedList
    set               sadd k v...                   smembers k                 srem k v              set
    zset              zadd k 2 v...              zrange k 0 -1 withscores      zrem k v              sort set
九、redis的多数据库实例
    1、redis实例中提供了下标是0-15的16个数据库,下标不能修改,但可通过select切换
    2、清空数据库的命令:
        flushdb:清空当前数据库的数据
        fluashall:清空所有数据库的数据

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