NOSQL(三)主从复制,持久化,数据类型


    redis服务器   服务器IP地址    端口
    mysql50       192.168.4.50/24 无
    mysql51       192.168.4.51/24 6351    
    mysql52       192.168.4.52/24 6352 
    mysql53       192.168.4.53/24 6353 
    mysql54       192.168.4.54/24 6354
    mysql55       192.168.4.55/24 6355 
一、主从复制
1.一主一从 主mysql51 从mysql52
redis服务器启动默认就是主服务器
[root@mysql51 ~]# redis-cli -h 192.168.4.51 -p 6351 
192.168.4.51:6351> info replication
# Replication
role:master
--------------------------------------------------------
配置从服务器:slaveof 主服务器主机名 端口
    命令行配置即可生效
    修改配置文件永久生效
--------------------------------------------------------
[root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> slaveof 192.168.4.51 6351
OK
192.168.4.52:6352> info replication
# Replication
role:slave
master_host:192.168.4.51
master_port:6351
master_link_status:up
[root@mysql52 ~]# vim /etc/redis/6352.conf        ==>>永久配置从服务器
 282  slaveof 192.168.4.51 6351
    恢复从库为主库
[root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352   ==>>临时恢复从库为主库,永久修改配置文件
192.168.4.52:6352> slaveof no one 
    配置带验证的主从复制
[root@mysql51 ~]# vim +501 /etc/redis/6351.conf 
 501  requirepass 123456
 [root@mysql51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456
192.168.4.51:6351> shutdown
[root@mysql51 ~]# /etc/init.d/redis_6351 start

[root@mysql52 ~]# vim +289 /etc/redis/6352.conf 
 289  masterauth 123456                                   ==>>主库密码
[root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> shutdown
[root@mysql52 ~]# /etc/init.d/redis_6352 start
    在命令行修改服务器配置,并且永久有效
    [root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352
    192.168.4.52:6352> CONFIG set masterauth "123456"
    OK
    192.168.4.52:6352> CONFIG GET masterauth
    1) "masterauth"
    2) "123456"
    192.168.4.52:6352> CONFIG REWRITE
    OK
    
2.一主多从
3.主从从 主mysql53 从mysql54 从从mysql55
[root@mysql53 ~]# redis-cli -h 192.168.4.53 -p 6353
192.168.4.53:6353> info replication
# Replication
role:master
connected_slaves:0
[root@mysql54 ~]# redis-cli -h 192.168.4.54 -p 6354
192.168.4.54:6354> slaveof 192.168.4.53 6353
OK
192.168.4.54:6354> CONFIG REWRITE
OK
192.168.4.54:6354> info replication
# Replication
role:slave
master_host:192.168.4.53
master_port:6353
master_link_status:up
[root@mysql55 ~]# redis-cli -h 192.168.4.55 -p 6355
192.168.4.55:6355> slaveof 192.168.4.54 6354
OK
192.168.4.55:6355> CONFIG REWRITE
OK
192.168.4.55:6355> info replication
# Replication
role:slave
master_host:192.168.4.54
master_port:6354
master_link_status:up
[root@mysql54 ~]# redis-cli -h 192.168.4.54 -p 6354
192.168.4.54:6354> info replication
# Replication
role:slave
master_host:192.168.4.53
master_port:6353
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:280
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=192.168.4.55,port=6355,state=online,offset=280,lag=1
哨兵服务
    监视master服务器
    发现master宕机后,将从服务器升级为主服务器
    sentinel monitor 主机名 master主机的IP地址 master主机redis服务使用的端口 票数(发现主库宕机的哨兵服务器台数)
[root@mysql57 ~]# yum -y install gcc
[root@mysql57 ~]# tar -zxf redis-4.0.8.tar.gz 
[root@mysql57 ~]# cd redis-4.0.8/
[root@mysql57 redis-4.0.8]# make && make install
[root@mysql57 redis-4.0.8]# vim /etc/sentinel.conf
sentinel monitor server53 192.168.4.51 6351 1
bind 0.0.0.0                ==>>服务地址
#port 23067                ==>>端口号
#sentinel auth-pass server53 123456    ==>>连接服务密码
[root@mysql57 redis-4.0.8]# redis-sentinel /etc/sentinel.conf 

二、持久化
1.RDB
    Redis数据库文件,全称Redis DataBase
    数据持久化方式之一
    数据持久化默认方式
    按照指定时间间隔,将内存中的数据集快照写入硬盘
    优点:
        高性能的持久化实现--创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,在用这个临时文件替换上次持久化好的文件;过程中不做任何IO操作
        比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
    缺点:
        意外宕机时,丢失最后一次持久化的多有数据
        
[root@mysql50 ~]# vim /etc/redis/6379.conf 
 219 save 900 1             ==>>900秒且有1个可以改变即存盘
 220 save 300 10            ==>>300秒且有10个可以改变即存盘
 221 save 60 10000          ==>>60秒且有10000个可以改变即存盘
 254 dbfilename dump.rdb    ==>>定义RDB文件名
------------------------------------------------------------------------
手动存盘:
save    阻塞写存盘
bgsave  不阻塞写存盘
------------------------------------------------------------------------
[root@mysql50 ~]# cp /var/lib/redis/6379/dump.rdb /root/  ==>>备份dump.rdb文件到其他位置
    恢复数据
[root@mysql57 ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@mysql57 ~]# rm -f /var/lib/redis/6379/dump.rdb 
[root@mysql57 ~]# cp dump.rdb /var/lib/redis/6379/
[root@mysql57 ~]# /etc/init.d/redis_6379 start
Starting Redis server...

2.AOF
    Append Only File
    追加方式记录写操作的文件
    记录redis服务所有写操作
    不断的将新的写操作,追加到文件的末尾
    默认没有启用
    使用cat命令可以查看文件内容
    优点:
        可以灵活设置持久化方式
        出现意外宕机时,仅可能丢失1秒的数据
    缺点:
        持久化文件的体积通常会大于RDB方式
        执行fsync策略时的速度可能会比RDB方式慢

[root@mysql50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
192.168.4.50:6350> CONFIG SET appendonly yes      ==>>启用AOF
OK
192.168.4.50:6350> CONFIG REWRITE            ==>>写入配置文件
OK
[root@mysql50 ~]# ls /var/lib/redis/6379/
appendonly.aof  dump.rdb
[root@mysql50 ~]# cp /var/lib/redis/6379/appendonly.aof /root/   ==>>备份数据到其他目录
    恢复数据
[root@mysql57 ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@mysql57 ~]# vim /etc/redis/6379.conf 
 673 appendonly yes                          ==>>启用AOF,默认为no
 677 appendfilename "appendonly.aof"         ==>>指定文件名
[root@mysql57 ~]# /etc/init.d/redis_6379 start
[root@mysql57 ~]# rm -f /var/lib/redis/6379/appendonly.aof 
[root@mysql57 ~]# cp appendonly.aof /var/lib/redis/6379/
[root@mysql57 ~]# /etc/init.d/redis_6379 restart
Starting Redis server...

[root@mysql50 ~]# cat /etc/redis/6379.conf
 702 # appendfsync always      ==>>时时记录,并完成磁盘同步
 703 appendfsync everysec      ==>>每秒记录一次,并完成磁盘同步
 704 # appendfsync no          ==>>写入AOF,不执行磁盘同步
 744 auto-aof-rewrite-percentage 100   ==>>再次重写,增长百分比
 745 auto-aof-rewrite-min-size 64mb    ==>>首次重写触发值

[root@mysql50 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof   ==>>修复AOF文件   

三、数据类型
1.字符类型
    set key value [EX seconds] [PX milliseconds] [NX|XX]
        EX    过期时间单位秒
        PX    过期时间单位毫秒
        NX    数据不存在时存储
        XX    数据存在也存储(默认)
    get key
        返回key存储的字符串值,若key不存在则返回null
        若key的值不是字符串,则返回错误,get只能处理字符串
    SETRANGE key offset value      ==>>从偏移量复写key特定的值
    APPEND key value             ==>>存在就追加,不存在就创建
    STRLEN key                ==>>统计字符串长度
    SETBIT key offset value      ==>>多用于统计用户上线天数
        对key所存储字串,设置或清除特定偏移量上的位(bit)
        value值只能是1或0,offset为0~2^32之间
        key不存在,则创建新key
    BITCOUNT key [start end]           ==>>统计字符串被设置为1的比特位数量
    DECR key            ==>>将key中的值减1,key不存在则先初始化为0,再减1
    DECRBY key decrement   ==>>将key值减去decrement
    GETRANGE key start end
        返回字符串值的子字符串,截取范围为start和end
        负数偏移量表示从末尾开始计数
    INCR key
        将key值加1,key不存在则先初始化为0,再加1。主要应用计数器
    INCRBY key increment            ==>>将key值加上increment
    INCRBYFLOAT key increment     ==>>为key中所存储的值加上浮点数增量 increment
    mget key [key ...]       ==>>获取一个或多个key值,空格分隔,具有原子性
    mset key value [key value ...]  ==>>设置多个key值,空格分隔,具有原子性

192.168.4.50:6350> set name myllovechina
OK
192.168.4.50:6350> SETRANGE name 0 we
(integer) 12
192.168.4.50:6350> get name
"wellovechina"
192.168.4.50:6350> APPEND name 123
(integer) 15
192.168.4.50:6350> get name
"wellovechina123"
192.168.4.50:6350> STRLEN name
(integer) 15
192.168.4.50:6350> SETBIT bit 0 1
(integer) 0
192.168.4.50:6350> SETBIT bit 1 1
(integer) 0
192.168.4.50:6350> BITCOUNT bit
(integer) 2
192.168.4.50:6350> set age 89
OK
192.168.4.50:6350> DECR age
(integer) 88
192.168.4.50:6350> DECRBY age 20
(integer) 68
192.168.4.50:6350> GETRANGE name 0 6
"wellove"
192.168.4.50:6350> GETRANGE name -5 -1
"na123"
192.168.4.50:6350> get age
"69"
192.168.4.50:6350> INCR age
(integer) 70
192.168.4.50:6350> INCRBY age 20
(integer) 90
192.168.4.50:6350> set num 19.2
OK
192.168.4.50:6350> INCRBYFLOAT num 1.1
"20.3"

2.列表类型
    redis的list是一个字符队列
    先进后出
    一个key可以有多个值
    
    LPUSH key value [value ...]
        将一个或多个值value插入到列表key的表头
        key不存在,则创建key
    LRANGE key start stop     ==>>从开始位置读取key值到stop结束
    LPOP key                  ==>>移除并返回列表头元素数据,key不存在则返回nil
    LLEN key                  ==>>返回列表key的长度
    lindex key index          ==>>返回列表中第index个值
    LSET key index value      ==>>将key中index位置的值修改为value
    RPUSH key value [value ...]  ==>>将value插入到key的末尾
    RPOP key                 ==>>删除并返回key末尾的值
    
192.168.4.50:6350> LPUSH alist a b c    ==>>list值一次为c,b,a
(integer) 3
192.168.4.50:6350> LRANGE alist 0 1
1) "c"
2) "b"
192.168.4.50:6350> LPOP alist
"c"
192.168.4.50:6350> LPOP alist
"b"
192.168.4.50:6350> LLEN alist
(integer) 1
192.168.4.50:6350> LPUSH blist a s s s df g ge q yu i j 
(integer) 11
192.168.4.50:6350> LINDEX blist 3
"q"
192.168.4.50:6350> LINDEX blist 2
"yu"
192.168.4.50:6350> LINDEX blist 0
"j"
192.168.4.50:6350> LSET blist 0 ss
OK
192.168.4.50:6350> LINDEX blist 0
"ss"
192.168.4.50:6350> RPUSH alist v c x z
(integer) 5
192.168.4.50:6350> LINDEX alist 4
"z"
192.168.4.50:6350> RPOP alist
"z"

3.哈希类型
    是一个string类型的field和value的映射表
    一个key可以对应多个field,一个field对应一个value
    将一个对象存储为hash类型,较于每隔字段都存储城string类型更节省内存
    
    HSET key field value       ==>>将hash表中的field值设置为value
    HGET key field             ==>>获取hash表中的field的值
    HMSET key field value [field value ...]   ==>>同时给hash表中的多个field赋值
    HMGET key field [field ...]     ==>>返回hash表中多个field的值
    HKEYS key                  ==>>返回hash表中所有field名称
    HGETALL key                ==>>返回hash表中多有field的值
    HVALS key                  ==>>返回hash表中多有field的值
    HDEL key field [field ...] ==>>删除hash表中多个field的值,不存在则忽略

192.168.4.50:6350> HSET site qq 'www.qq.com'
(integer) 1
192.168.4.50:6350> HGET site qq
"www.qq.com"
192.168.4.50:6350> HMSET site goole www.g.cn baidu www.baidu.com
OK
192.168.4.50:6350> HMGET site goole baidu qq
1) "www.g.cn"
2) "www.baidu.com"
3) "www.qq.com"
192.168.4.50:6350> HKEYS site
1) "qq"
2) "goole"
3) "baidu"
192.168.4.50:6350> HVALS site
1) "www.qq.com"
2) "www.g.cn"
3) "www.baidu.com"
192.168.4.50:6350> HDEL site goole baidu
(integer) 2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值