Redis

1. 哪里用了redis?为什么要用?

        哪里用:商城首页轮播广告

       为什么用:因为mysql走的是硬盘,顶不住高并发;redis走的是内存

2. 什么是redis?

        redis是c语言开发的高性能的k-v形式的数据库,数据存储在内存中

3. redis的下载安装和启动

   3.1 下载

       http://download.redis.io/releases/redis-3.0.0.tar.gz

   3.2 安装

        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 #后端启动,不占用窗口

   3.3 启动和关闭

        启动:
            /usr/local/redis/bin
            ./redis-server redis.conf
        关闭:
            /usr/local/redis/bin
            ./redis-cli -h 127.0.0.1 -p 6379 shutdown

 4. redis的基本命令

    keys *:查看所有key
    exists:判断key值是否存在
    expire和ttl:设置和查看key的失效时间
    incr和decr:自增和自减

                         赋值                           取值                      删除                    特点
    string            set k v                        get k                      del k                   string
    hash           hset k k v                     hget k k                 hdel k k               map
    list             lpush/rpush k v...        lrange k 0 -1          lrem k 2 v               list
    set               sadd k v...              smembers k              srem k v                set
    zset             zadd k 59 v...      zrange k 0 -1 withscore   zrem k v           sort set

5. 持久化

        Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合用。

   5.1 RDB(默认)

  • 策略

    save 900 1  #900秒内容如果超过1个key被修改,则发起快照保存
    save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
    save 60 10000 #表示60秒内如果超过10000个key被修改,则发起快照保存

  • 优缺点

        优:让redis的数据存取速度变快(不影响性能)

        缺:服务器断电时会丢失部分数据  (数据的完整性得不到保证)

  • 测试

        1. 删除dump.rdb(文件存储在redis/bin目录下)
        2. set str 123
        3. ./redis-cli shutdown----->观察dump.rdb(生成快照文件并持久化数据)

   5.2 AOF

  • 策略

#appendfsync always   #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no        #从不同步。高效但是数据不会被持久化。

  • 优缺点

        优:持久化良好,能保证数据的完整性

        缺:大大降低了redis系统的存取速度(影响性能)

  • 测试

        1. 设置appendonly 为 yes
        2. set str1 123
        3. 等待一秒观察appendonly.aof(持久化数据)

6. 主从复制 

   6.1 什么是主从复制

        持久化保证了即使redis服务重启也会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:

         一个redis既可以是主也可以是从

  

   6.2 主从复制的过程

        

    复制过程说明:

    1. slave 服务启动,slave 会建立和master 的连接,发送sync 命令。

    2. master启动一个后台进程将数据库快照保存到RDB文件中

    3. master 就发送RDB文件给slave

    4. slave 将文件保存到磁盘上,然后加载到内存恢复

    5. master把缓存的命令转发给slave

    注意:主死了,从只能读

   6.3 主从复制配置

  • 拷贝redis

        cd /usr/local
        cp -r redis redis-6380

  •  修改从(redis-6380)的redis.conf

  • 分别开启主从redis,并在主redis存入数据,测试效果

        效果:主从数据库数据一致

  • 关闭主redis,使用从redis存入数据

 

 7. redis集群

    7.1 redis-cluster架构图

        架构细节:

        1. 所有的redis节点彼此互联(PING-PONG机制),节点的fail是通过集群中超过半数的节点检测失效时才生效(redis台数>=3的奇数,每台主机有一台备份机,共六台)

        2. 存取数据时连接任一节点都可以,但集群中有一个节点fail整个集群都会fail

        原因:Redis 集群中内置了 16384 个哈希槽,当需要在Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

 

   7.2 集群搭建

        搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006

1)安装ruby环境
            yum install ruby #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.75.129:7001 192.168.75.129:7002 192.168.75.129:7003 192.168.75.129:7004 192.168.75.129:7005  192.168.75.129: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

     集群搭建效果:

>>> Creating cluster
Connecting to node 192.168.25.153:7001: OK
Connecting to node 192.168.25.153:7002: OK
Connecting to node 192.168.25.153:7003: OK
Connecting to node 192.168.25.153:7004: OK
Connecting to node 192.168.25.153:7005: OK
Connecting to node 192.168.25.153:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.153:7001
192.168.25.153:7002
192.168.25.153:7003
Adding replica 192.168.25.153:7004 to 192.168.25.153:7001
Adding replica 192.168.25.153:7005 to 192.168.25.153:7002
Adding replica 192.168.25.153:7006 to 192.168.25.153:7003
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 192.168.25.153:7001)
M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001
   slots:0-5460 (5461 slots) master
M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002
   slots:5461-10922 (5462 slots) master
M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003
   slots:10923-16383 (5461 slots) master
M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004
   slots: (0 slots) master
   replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3
M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005
   slots: (0 slots) master
   replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01
M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006
   slots: (0 slots) master
   replicates 2935007902d83f20b1253d7f43dae32aab9744e6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost redis-cluster]# 

    测试效果:

8. redis的多数据库实例

        1. redis实例中提供了下标是0-15的16个数据库,下标不能修改,但可通过select切换

        2. 清空数据库命令
            flushdb:清空当前数据库的数据
            fluashall:清空所有数据库的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值