zoukankan      html  css  js  c++  java
  • Redis持久化存储(二)

    redis多实例介绍

    接上一篇redis、创建数据存放的目录

    vim redis.conf +187
    dir /application/data/

    重新启动

    mkdir /application/data/
    redis-cli shutdown
    redis-server /application/redis/conf/redis.conf &
    [root@redis01 conf]# redis-cli
    127.0.0.1:6379> auth zsq
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> set names sisi
    OK
    127.0.0.1:6379> get sisi
    (nil)
    127.0.0.1:6379> save
    [34960] 03 Dec 20:29:54.318 * DB saved on disk
    OK
    127.0.0.1:6379> quit
    [root@redis01 conf]# ll /application/data/
    总用量 4
    -rw-r--r-- 1 root root 32 12月  3 20:29 dump.rdb

    Redis AUTH命令是用来向服务器验证给定的密码。 如果密码与在配置文件中的口令相匹配,则服务器会返回OK状态码,并开始接受命令。否则,将返回一个错误,并且客户需要尝试新的密码。

    在配置文件中指定的密码

    requirepass zsq

    创建实例

    [root@redis01 conf]# mkdir /data/6380/data -p
    [root@redis01 conf]# mkdir /data/6381/data -p
    [root@redis01 conf]# cp redis.conf /data/6380/
    [root@redis01 conf]# cp redis.conf /data/6381/
    [root@redis01 conf]# cd /data/6380
    [root@redis01 6380]# ll
    总用量 36
    drwxr-xr-x 2 root root  4096 12月  3 20:35 data
    -rw-r--r-- 1 root root 31236 12月  3 20:35 redis.conf

    跟源文件对比,两个实例修改以下对应的几项

    [root@redis01 6380]# diff redis.conf /application/redis/conf/redis.conf 
    41c41
    < pidfile /data/6380/redis.pid
    ---
    > pidfile /var/run/redis.pid
    45c45
    < port 6380
    ---
    > port 6379
    187c187
    < dir /data/6380/data/
    ---
    > dir /application/data/
    449c449
    < appendonly yes  #开启这项是记录持久化日志
    ---
    > appendonly no   

    开启6380

    [root@redis01 6380]# redis-server /data/6380/redis.conf &
    [root@redis01 6380]# lsof -i :6380
    COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    redis-ser 35011 root    4u  IPv6 2604853      0t0  TCP *:6380 (LISTEN)
    redis-ser 35011 root    5u  IPv4 2604855      0t0  TCP *:6380 (LISTEN)

    测试

    [root@redis01 6380]# redis-cli -p 6380
    127.0.0.1:6380> auth zsq
    OK
    127.0.0.1:6380> set name oldgirl
    OK
    127.0.0.1:6380> get name
    "oldgirl"
    127.0.0.1:6380> save
    [35011] 03 Dec 20:51:25.324 * DB saved on disk
    OK
    127.0.0.1:6380> quit
    [root@redis01 6380]# ll data/
    总用量 8
    -rw-r--r-- 1 root root 109 12月  3 20:51 appendonly.aof  
    -rw-r--r-- 1 root root  34 12月  3 20:51 dump.rdb  #要save才有这个文件
    appendonly.aof 文件记录的操作记录
    [root@redis01 6380]# cat data/appendonly.aof 
    *2
    $6
    SELECT
    $1
    0
    *3
    $3
    Set

    开启6381

    redis-server /data/6381/redis.conf &
    [root@redis01 6380]# lsof -i :6381
    COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
    redis-ser 35034 root    4u  IPv6 2609259      0t0  TCP *:6381 (LISTEN)
    redis-ser 35034 root    5u  IPv4 2609261      0t0  TCP *:6381 (LISTEN)

     redis复制

            复制

    Redis复制很简单易用,它通过配置允许slave Redis Servers或者Master Servers的复制品。接下来有几个关于redis复制的非常重要特性:

    一个Master可以有多个Slaves。

    Slaves能接受其他slave的链接,除了可以接受同一个master下面slaves的链接以外,还可以接受同一个结构图中的其他slaves的链接。

    redis复制是在master段是非阻塞的,这就意味着master在同一个或多个slave端执行同步的时候还可以接受查询。

    复制在slave端也是非阻塞的,假设你在redis.conf中配置redis这个功能,当slave在执行的新的同步时,它仍可以用旧的数据信息来提供查询,否则,你可以配置当redis slaves去master失去联系是,slave会给客户端发送一个错误。

    为了有多个slaves可以做只读查询,复制可以重复2次,甚至多次,具有可扩展性(例如:slaves对话与重复的排序操作,有多份数据冗余就相对简单了)。

    通过复制可以避免master全量写硬盘的消耗:只要配置 master 的配置文件redis.conf来“避免保存”(注释掉所有”save”命令),然后连接一个用来持久化数据的slave即可。但是这样要确保masters 不会自动重启(更多内容请阅读下段)

    redis复制是怎么进行工作

    如果设置了一个slave,不管是在第一次链接还是重新链接master的时候,slave会发送一个同步命令 sync,然后master开始后台保存,收集所有对修改数据的命令。当后台保存完成,master会将这个数据文件传送到slave,然后保存在磁盘,加载到内存中;master接着发送收集到的所有的修改数据的命令,这好比一个流命令,是redis协议本身来实现的。

    你可以自己通过远程登录来进行尝试,当服务器在做一些工作并发送同步命令的时候链接到redis端口,你将会看到大量的数据传输,然后收到的每个命令会显示在远程登录的会话中。

    当master和slave因一些故障当机时,slaves会自动的重链,如果master收到多个slave的同步请求,master会执行一个后台保存,以确保所有的slaves都是正常的。

    当master和slave能够维持链接,就会有一个完整的同步进行。

    redis主从同步实战

    开启两个实例,指定端口,有密码的指定密码

    cd /data/6380

    配置文件redis.conf搜索REPLICATION关键字

    slaveof 192.168.179.161 6379
    masterauth zsq

    重新启动

    redis-cli -p 6380 -a zsq shutdown

    启动的时候会有同步信息输出,如master的IP,端口等信息

    主库也有信息输出

    从库对主库也有个ping的操作过程,每隔10秒发送一个PING,确认是否OK

    monitor类似tcpdump,可以监控其操作

    在主库操作

    从库可以看到其输出信息

    查看从库的数据同步情况

    Slave的几个参数

    Slave是不能写数据的

    默认检测是10秒

    如果连不上的时候,主库是通过backlog来实现slave库的增量同步,以下参数是其大小

    Backlog的生成期,当主库和slave连接断开的时候,backlog在内存里多长时间释放

    优先级,给不同的slave优先级,主库宕机把哪个slave提升为主

    查看redis的状态信息

    同步状态信息

    CPU状态信息

    info是查看全部的状态 ,内存,客户端连接等等

    服务端master的信息,主从,cpu等

  • 相关阅读:
    【计算机视觉】深度学习视觉领域常用数据集汇总
    【计算机视觉】常用图像数据集
    【计算机视觉】ImageNet介绍
    【神经网络与深度学习】卷积与反卷积
    【视频开发】【计算机视觉】全景视频拼接关键技术
    【计算机视觉】分辨率与超分辨率图像重建
    【计算机视觉】【神经网络与深度学习】深度学习在图像超分辨率重建中的应用
    【VS开发】【C/C++开发】关于boost库的C++11导致的undefined符号问题
    【VS开发】【C/C++开发】vs2015编译boost 64位
    【视频开发】【计算机视觉】相机标定(Camera calibration)《二》
  • 原文地址:https://www.cnblogs.com/w787815/p/6749682.html
Copyright © 2011-2022 走看看