Redis主从复制,RDBAOF持久化,数据类型

    xiaoxiao2022-07-13  196

    主从复制结构模式

    结构模式:一主一从、一主多从、主从从

    主从复制工作原理

    工作原理

    slave向master发送sync命令master启动后台存盘进程,并收集所有修改数据命令master完成后台存盘后,传送整个数据文件到slaveslave接收数据文件,加载到内存中完成首次完全同步后续有新数据产生时,master继续将新的数据收集到的修改命令依次传给slave,完成同步

    主从复制缺点

    缺点

    网络繁忙,会产生数据同步延时问题系统繁忙,会产生数据同步延时问题

    配置主从复制

    一、查看主从复制信息,redis服务运行后,默认都是master服务器

    [root@ip51 ~]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> info replication

    二、给51配置从库

    命令行配置,临时有效,服务重启消失 [root@ip52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> SLAVEOF 192.168.4.51 6351 //将51设置为52的主库 192.168.4.52:6352> INFO replication 永久配置,修改配置文件 [root@ip52 ~]# vim /etc/redis/6379.conf ... ... slaveof 192.168.4.51 6351 ... ...

    三、数据测试

    [root@ip50 ~]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> set sex boy

    四、配置53主机为51的从库

    [root@ip53 ~]# /etc/init.d/redis_6379 stop [root@ip53 ~]# vim /etc/redis/6379.conf ... ... slaveof 192.168.4.51 6351 ... ... [root@ip53 ~]# /etc/init.d/redis_6379 start [root@ip53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> INFO replication

    五、将54配置为53的从的库(主从从)

    [root@ip54 ~]# /etc/init.d/redis_6379 stop [root@ip54 ~]# vim /etc/redis/6379.conf ... ... slaveof 192.168.4.53 6353 ... ... [root@ip54 ~]# /etc/init.d/redis_6379 start [root@ip54 ~]# redis-cli -h 192.168.4.54 -p 6354 192.168.4.54:6354> INFO replication

    六、把从服务器恢复为独立的服务器

    命令行恢复(临时)

    从服务器上

    192.168.4.52:6352> slaveof no one 永久配置

    注释掉从服务器配置

    [root@ip52 ~]# vim /etc/redis/6379.conf ... ... #slaveof 192.168.4.53 6353 ... ...

    配置带验证的主从复制结构

    一、给55主机上的redis服务配置密码

    添加密码 [root@ip55 ~]# vim /etc/redis/6379.conf ... ... requirepass 123456 ... ... [root@ip55 ~]# /etc/init.d/redis_6379 stop [root@ip55 ~]# /etc/init.d/redis_6379 start 给服务脚本添加密码设置 [root@ip55 ~]# vim /etc/init.d/redis_6379 ... ... $CLIEXEC -p 6355 -h 192.168.4.55 -a 123456 shutdown ... ... 连接55,添加数据 [root@ip55 ~]# redis-cli -h 192.168.4.55 -p 6355 -a 123456 192.168.4.55:6355>

    二、给55主机配置从库

    修改56配置文件 [root@ip56 ~]# vim /etc/redis/6379.conf ... ... slaveof 192.168.4.55 6355 ... ... masterauth 123456 ... ... 重启服务 [root@ip56 ~]# /etc/init.d/redis_6379 stop [root@ip56 ~]# /etc/init.d/redis_6379 start 查看状态信息 192.168.4.56:6356> info replication

    哨兵服务

    哨兵模式

    主库宕机后,从库自动升级为主库在slave主机编辑sentinel.conf文件在slave主机运行哨兵程序

    一、创建哨兵服务配置文件

    [root@ip58 ~]# vim /etc/sentinel.conf 添加如下配置项 bind 0.0.0.0 port 26379 sentinel monitor redisser 192.168.4.55 6355 1 sentinel auth-pass redisser 123456

    sentinel monitor redisser 192.168.4.55 6355 1 主机名 ip地址 端口 票数

    主机名:自定义 IP地址:master主机的IP地址 端口:master主机redis服务使用的端口 票数:有几台哨兵主机连接不上主库时,切换主库

    二、运行哨兵服务

    [root@ip58 ~]# redis-sentinel /etc/sentinel.conf

    三、停掉55主机,查看监控信息

    [root@ip55 ~]# /etc/init.d/redis_6379 stop

    等待一会,监控信息就会显示55宕机,56主动升级为主

    往56主机上存入新的数据

    再打开55主机,55主机就会主动变为56的从库

    [root@ip55 ~]# /etc/init.d/redis_6379 start

    登录55主机查看数据,就会看到56主机上新添加的数据

    持久化之RDB

    RDB介绍

    Redis数据库文件,全称Redis DataBase

    数据持久化方式之一依照指定时间间隔,将内存中的数据集快照写入磁盘术语叫Snapshot快照恢复时,将快照文件直接读如到内存

    相关配置参数

    文件名

    dbfilename “dump.rdb” //文件名save “” //禁用RDB

    数据从内存保存到硬盘的频率

    save 900 1 //900秒内且有一次修改save 300 10 //300秒内且有10次修改save 60 10000 //60秒内且有10000次修改

    手动立刻存盘

    save //阻塞写存盘bgsave //不阻塞写存盘

    压缩

    rdbcompression yes|no

    在存储快照后,使用crc16算法做数据校验

    rdbchecksum yes|no

    bgsave出错时停止写操作

    stop-writes-on-bgsave-error yes|no

    使用RDB文件恢复数据

    备份数据 备份dump.rdb文件到其他为值 #cp 数据库目录/dump.rdb 备份目录

    恢复数据 拷贝备份文件到数据库目录,重启redis服务

    #cp 备份目录/dump.rdb 数据库目录/ #/etc/redis/redis_端口 start

    RDB优点/缺点

    RDB优点

    高性能的持久化实现----创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件,过程中主进程不做任何IO操作比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合

    RDB的缺点

    意外宕机时,最后一次持久化的数据会丢失

    备份恢复操作

    [root@ip51 ~]# scp /var/lib/redis/6379/dump.rdb root@192.168.4.52:/root/ [root@ip52 ~]# /etc/init.d/redis_6379 stop [root@ip52 ~]# rm -rf /var/lib/redis/6379/* [root@ip52 ~]# mv /root/dump.rdb /var/lib/redis/6379/ [root@ip52 ~]# /etc/init.d/redis_6379 start

    持久化之AOF

    只做追加操作的文件,Append Only File

    记录redis服务所有写操作不断的将新的写操作,追加到文件的末尾使用cat命令可以查看文件内容

    相关配置参数

    文件名

    appendfilename “appendonly.aof” //指定文件名appendonly yes //启用aof,默认为no

    AOF文件记录写操作的方式

    appendfsync always //有新写操作立即记录appendfsync everysec //每秒记录一次appendfsync no //从不记录

    开启aof日志

    [root@ip51 ~]# vim /etc/redis/6379.conf ... ... appendonly yes //启用日志 appendfilename "appendonly.aof" //定义文件名,一般采用默认 appendfsync everysec //配置记录写操作的方式 ... ...

    使用AOF文件恢复数据

    备份数据

    备份appendonly.aof文件到其他位置 #cp 数据库目录/appendonly.aof 备份目录

    恢复数据

    拷贝备份文件到数据库目录,重启redis服务 #cp 备份目录/appendonly.aof 数据库目录/ #/etc/redis/redis_端口 start [root@ip52 ~]# /etc/init.d/redis_6379 stop [root@ip52 ~]# rm -rf /var/lib/redis/6379/* [root@ip52 ~]# vim /etc/redis/6379.conf ... ... appendonly yes //启用日志 appendfilename "appendonly.aof" //定义文件名,一般采用默认 appendfsync everysec //配置记录写操作的方式 ... ... [root@ip51 ~]# scp /var/lib/redis/6379/appendonly.aof root@192.168.4.52:/var/lib/redis/6379/ [root@ip52 ~]# /etc/init.d/redis_6379 start

    在命令行启用aof文件不会覆盖已有的数据

    [root@ip53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> CONFIG SET appendonly yes //设置这个配置项的值 192.168.4.53:6353> CONFIG REWRITE //永久修改配置文件 192.168.4.53:6353> save

    修复AOF文件

    把文件恢复到最后一次的正确操作 [root@ip53 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof [root@ip53 ~]# rm -rf /var/run/redis_6379.pid [root@ip53 ~]# /etc/init.d/redis_6379 start

    日志文件不断增大,何时触发日志重写

    redis会记录上次重写时AOF文件的大小默认配置当aof文件是上次rewrite后大小的一倍且文件大于64M时触发 >auto-aof-rewrite-percentage 100 >auto-aof-rewrite-min-size 64mb

    AOF优点/缺点

    AOF优点

    可以灵活设置持久化方式,同步持久化appendfsync always 或异步持久化appendfsync everysec出现意外宕机时,仅可能丢失1秒的数据 AOF缺点持久化文件的体积通常会大于RDB方式执行fsync策略时的速度可能会比RDB方式慢

    数据类型

    String字符串

    字符串操作

    set key value [ex seconds] [px milliseconds] [nx|xx] //加nx表示变量存在时不存,xx表示直接覆盖

    设置key及值,过期时间可以使用秒或者毫秒为单位

    setrange key offset value

    从偏移量开始复写key的特定位的值

    strlen key,统计字串长度

    192.168.4.51:6351> set tel 19999999444455 OK 192.168.4.51:6351> get tel "19999999444455" 192.168.4.51:6351> SETRANGE tel 4 "****" (integer) 14 192.168.4.51:6351> get tel "1999****444455" 192.168.4.51:6351> strlen tel (integer) 14 append key value 存在则追加,不存在则创建key及value,返回key长度 192.168.4.51:6351> append tel **** (integer) 18

    setbit key offset value 对key所存储字串,设置或清除特定偏移量上的位(bit) value值可以为1或0,offset为0~2^32之间 key不存在,则创建新key

    bitcount key 统计字串中被设置为1的比特位数量

    192.168.4.51:6351>setbit bits 0 1 //0001 192.168.4.51:6351>setbit bits 3 1 //1001 192.168.4.51:6351>bitcount bits //结果为2 192.168.4.51:6351>setbit peter 100 1 //网站上线100天用户登录了一次 192.168.4.51:6351>setbit peter 105 1 //网站上线105天用户登录了一次 192.168.4.51:6351>bitcount peter

    场景说明: 记录网站用户上线频率,如用户A上线了多少天等类似的数据 如用户再某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时。使用bitcount用户名即可,这样,即使网站运行10年,每个用户仅占用10*365比特位即456字节

    decr key 将key中的值减1,key不存在则先初始化为0,再减1 192.168.4.51:6351> set test 10 OK 192.168.4.51:6351> decr test (integer) 9 decrby key decrement 将key中的值,减去decrement 192.168.4.51:6351> set count 100 OK 192.168.4.51:6351> DECRBY count 20 (integer) 80

    get key 返回key存储的字符串值,若key不存在则返回null 若key的值不是字串,则返回错误,get只能处理字串

    getrange key start end 返回字串值的子字串,截取范围为start和end 负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符

    192.168.4.51:6351> GETRANGE tel -5 -1 "5****" 192.168.4.51:6351> GETRANGE tel 0 4 "1999*" incr key 将key的值加1,如果key不存在,则初始为0后再加1 主要应用为计数器 192.168.4.51:6351> set page 20 OK 192.168.4.51:6351> incr page (integer) 21 incrby key increment 将key的值增加increment 192.168.4.51:6351> INCRBY page 20 (integer) 41 incrbyfloat key increment 为key中所存储的值加上浮点数增量 increment 192.168.4.51:6351> set num 16.1 OK 192.168.4.51:6351> incrbyfloat num 1.1 "17.2" mget key [key…] 获取一个或者多个key的值,空格分割,具有原子性 192.168.4.51:6351> mget count tel page 1) "80" 2) "1999****444455****" 3) "41" mset key value [key value…] 设置多个key及值,空格分隔,具有原子性 192.168.4.51:6351> MSET q w e r t y u i OK 192.168.4.51:6351> mget q e t u 1) "w" 2) "r" 3) "y" 4) "i"

    List列表

    List列表简介

    Redis的list是一个字符队列先进后出一个key可以有多个值

    List列表操作

    lpush key value [value…] 将一个或多个值value插入到列表key的表头 key不存在,则创建key 192.168.4.51:6351> LPUSH list a b c (integer) 3 lrange key start stop 从开始位置读取key值到stop结束 192.168.4.51:6351> lrange list 0 2 //从0位开始,读到2位为止 1) "c" 2) "b" 3) "a" 192.168.4.51:6351> lrange list 0 -1 //从开始读到结束为止 1) "c" 2) "b" 3) "a" 192.168.4.51:6351> LRANGE list 0 -2 //从开始读到倒数第2位为止 1) "c" 2) "b" lpop key 移除并返回列表头元素数据,key不存在则返回nil 192.168.4.51:6351> lpop list //删除表头元素,可以多次执行 "c" llen key 返回列表key的长度 192.168.4.51:6351> llen list (integer) 2 lindex key index 返回列表中第index个值 192.168.4.51:6351> lindex list 0 "b" 192.168.4.51:6351> lindex list 1 "a" lset key index value 将key中index位置的值修改为value 192.168.4.51:6351> lset list 0 test //将列表list中的第一个值修改为test OK 192.168.4.51:6351> LRANGE list 0 4 1) "test" 2) "a" rpush key value [value…] 将value插入到key的末尾 192.168.4.51:6351> RPUSH list3 a b c //list3值为a b c (integer) 3 192.168.4.51:6351> RPUSH list3 d //末尾插入d (integer) 4 rpop key 删除并返回key末尾的值 192.168.4.51:6351> rpush list4 a b c (integer) 3 192.168.4.51:6351> rpop list4 "c"

    Hash表

    Hash表简介

    Redis hash是一个string类型的field和value映射表一个key可以对应多个field,一个field对应一个value将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存

    Hash表操作

    hset key field value 将hash表中field值设置为value 192.168.4.51:6351> hset site google 'www.g.cn' (integer) 1 192.168.4.51:6351> hset site baidu 'www.baidu.com' (integer) 1

    -hget key field 获取hash表中field的值

    192.168.4.51:6351> hget site google "www.g.cn" 192.168.4.51:6351> hget site baidu "www.baidu.com" hmset key field value [field value…] 同时给hash表中的多个field赋值 192.168.4.51:6351> hmset site google www.g.cn baidu www.baidu.com OK hmget key field [field…] 返回hash表中多个field的值 192.168.4.51:6351> hmget site google baidu 1) "www.g.cn" 2) "www.baidu.com" hkeys key 返回hash表中所有的field名称 192.168.4.51:6351> hkeys site 1) "google" 2) "baidu"

    hgetall key 返回hash表中所有key名和对应的值列表

    hvals key 返回hash表中所有key的值

    hdel key field [field…] 删除hash表中多个field的值,不存在则忽略

    192.168.4.51:6351> hdel site goodle baidu (integer) 1

    管理命令总结

    del key [key…] 删除一个或者多个keyexists key 测试一个key是否存在expire key seconds 设置key的生存周期persist key 设置一个key永不过期ttl key 查看key的生存周期
    最新回复(0)