Redis 学习二——持久化RDB AOF 及数据类型

一、redis 主从同步
主从同步工作原理:
——slave向master发送sync(同步请求)命令
——master 启动后台存盘进程,同时收集所有的数据命令
——master执行完后台存盘进程后,传送整个数据文件到slave.
——slave 接收数据文件后,将其存盘并加载到内存中完成首次完全同步
——后续有新数据产生时,master继续将新的所有收集到的修改命令依次传给slave,完成同步。

主从同步的缺点:
——网络繁忙,会产生数据同步延时问题
——系统繁忙,会产生数据同步延迟问题
redis-cli 命令
查看命令帮助 -redis-cli -h
常用选项: -h IP地址 ; -p 端口 ; -c 集群模式

1.1环境准备
192.168.4.61\62\63 三台主机上配置 redis服务,默认配置。
三台redis主机修改配置文件指定ip地址,不再监听本机的回环口

#setenforce 0               (防火墙跟selinux要关闭)
#systemctl stop firewalld.service 
61】#sed  -i '70c bind  192.168.4.61'  /etc/redis/6379.conf
62】sed  -i '70c bind   192.168.4.62'  /etc/redis/6379.conf
63】sed  -i '70c bind   192.168.4.63'  /etc/redis/6379.conf

修改配置文件后全部重启服务
]# /etc/init.d/redis_6379 stop
]# /etc/init.d/redis_6379 start
redis服务默认都是主库

1.2 配置主从库
(192.168.4.61为主库)
]# ]# redis-cli -h 192.168.4.61 (修改配置文件之后连接redis 要指定ip )
】> info replication 查看本机主从复制信息

1.2 配置从库(设置62/63为从库)
主从复制结构:一主一从
一主多从
主从从
slaveof 主库IP 端口

]# redis-cli -h 192.168.4.62
62】127.0.0.1:6379> slaveof  192.168.4.61  6379
OK
127.0.0.1:6379> info replication
]#  redis-cli -h 192.168.4.63
63】127.0.0.1:6379> slaveof  192.168.4.61  6379
127.0.0.1:6379> info replication
61】# redis-cli -h 192.168.4.61    
192.168.4.61:6379> info  replication  (显示从库的信息了)

1.3 测试主从同步

61】192.168.4.61:6379> set k1  v1
192.168.4.61:6379> set k2  v2
192.168.4.61:6379> set k3  v3 
192.168.4.61:6379> keys *
62192.168.4.62:6379> keys *     数据已经同步
63】192.168.4.63:6379> keys * 

取消同步,先停服务后重启 (62/63还原成独立的redis服务器)

]# redis-cli  -h 192.168.4.62 shutdown
]# /etc/init.d/redis_6379  start
]# redis-cli  -h 192.168.4.62
192.168.4.62:6379> info replication     (role:master)
]# redis-cli -h 192.168.4.63   shutdown
]# /etc/init.d/redis_6379  status
#/etc/init.d/redis_6379  start
]# redis-cli -h 192.168.4.63
192.168.4.63:6379> info replication   (又变回主库了,同步复制数据还在)
role:master
61】192.168.4.61:6379> info replication
connected_slaves:0

配置主从从 结构(61主,62是61的从是63的主,63是62的从)

62】192.168.4.62:6379> slaveof  192.168.4.61  6379
192.168.4.62:6379> info replication
192.168.4.63:6379> slaveof 192.168.4.62  6379
192.168.4.63:6379> info replication
61】192.168.4.61:6379> info replication

验证数据同步,63 会同步62 和61redis数据库的数据

61]192.168.4.61:6379> set k4  v1
192.168.4.61:6379> set k4  v2
192.168.4.62:6379> keys  *
192.168.4.63:6379> keys *

反从为主(手动61停止服务,62为主)
> slaveof no one 取消从库

61]  192.168.4.61:6379> shutdown
not connected> quit
62] 192.168.4.62:6379> slaveof  no one
192.168.4.62:6379> info replication   (role:master)

哨兵模式
——主机宕机后,从库自动升级为主库
——在slave主机编辑sentinel.conf 文件
——在salve主机运行哨兵模式
sentinel monitor 主机名 ip地址 端口 票数
主机名:自定义
IP地址:master主机的IP地址
端口:master主机redis服务使用的端口
票数:主机宕机后,票数大于1 的主机被升级为主库

恢复主从从结构

62】]# redis-cli  -h 192.168.4.62
192.168.4.62:6379> slaveof 192.168.4.61  6379
61】]# redis-cli -h 192.168.4.61   (查看61主机上主从信息)
192.168.4.61:6379> info replication
62主机上启动哨兵模式
62]# redis-sentinel     哨兵程序
]# vim  /etc/sentinel.conf     编写哨兵程序配置文件
sentinel  monitor  redis61   192.168.4.61   6379   1 
62】]# redis-sentinel  /etc/sentinel.conf   (启动哨兵程序)
**测试**:  61】192.168.4.61:6379> shutdown  停止服务
62】]# redis-sentinel /etc/sentinel.conf  (这是就会出现日志信息,并显示切换主库)
+switch-master redis61 192.168.4.61 6379 192.168.4.62 6379
另一个62终端上】192.168.4.62:6379> info replication  (role:master   已经切换为主库了)

二、配置带验证的主从复制
ctrl +c 结束62主机上的哨兵程序
61]# /etc/init.d/redis_6379 start
63]# redis-cli -h 192.168.4.63 shutdown
63]# /etc/init.d/redis_6379 start
62 ~]# /etc/init.d/redis_6379 start
61/62/63 】> info replication (查看一下是否都恢复成主库)
2.1 配置master主机61
——设置连接密码,启动服务,连接服务

61】]# vim  /etc/redis/6379.conf 
       501    requirepass  123456 
]# redis-cli  -h 192.168.4.61 shutdown
]# /etc/init.d/redis_6379  start
192.168.4.61:6379> auth 123456

配置从库(62)
——指定主库IP、设置连接密码,启动服务

62】]# grep -n  -i slaveof /etc/redis/6379.conf
  282:# slaveof <masterip> <masterport>
300:#    but to INFO and SLAVEOF.
]# vim /etc/redis/6379.conf
  283 slaveof   192.168.4.61  6379
  289 masterauth  123456
 ]# redis-cli  -h 192.168.4.62 shutdown 
 ]# /etc/init.d/redis_6379  start
 ]# /etc/init.d/redis_6379  status
 

三 、Redis 持久化 RDB和AOF
3.1 RDB :redis database
——数据持久化方式之一,
——在指定的时间间隔内,将内存中的是数据快照写入硬盘
——术语:Snapshot快照
——恢复时,将快照文件直接读取到内存里
RDB的优点:
——持久化时,redis服务会创建一个子进程来进行持久化,会先将数据写入一个临时文件中,带持久
化过程都结束了,再用这个临时文件替换上次持久化好的文件;整个过程中主进程不做任何IO操作,这就确>保了极高的性能。
——如果要进程大规模的数据恢复,且对数据完整行要求不是特别高,使用RDB比AOF更高效。
RDB的缺点:意外宕机时,最后一次持久化的数据可能会丢失。

相关配置参数
文件名:
——dbfilename “dump.rdb” //文件名
——save “” //禁用RDB
数据从内存保存到硬盘的频率
——save 900 1 //900秒内且有1次修好存盘
——save 300 10 //300秒内且有10次修改存盘
——save 60 10000 //60秒内且有10000修改存盘
手动立刻存盘
—— ->save //阻塞写存盘
—— -> bgsave //不阻塞写存盘
**压缩:**是否对数据压缩
——rdbcompression yes | no
在存储快照后,使用crc 16 算法做数据校验
——rdbchecksum yes | no
bgsave 出错停止写操作,对数据一致性要求不高设置为no
- stop-writes-on-bgsave-error yes | no
使用RDB文件数据恢复
——备份dump.rdb 文件到其他位置
#cp 数据库目录 /dump.rdb 备份目录
——恢复数据
:把备份的dump.rdb文件拷贝回数据库目录,重启redis服务

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

+++++++++++++++++++++++++++++++++++++++++++
vim /etc/redis/6379.conf
############ SNAPSHOTTING ######
201 # save
217 # save “” (把改行注释去掉,就代表不用RDB方式存储)
254 dbfilename dump.rdb
]# cd /var/lib/redis/6379/
】# ls
dump.rdb (内存里数据存储到硬盘,恢复数据库数据就是备份这个文件)

]# watch -n -2 /var/lib/redis/6379/ (每隔2秒查一下/var/lib/redis/6379/)

+++++++++++++++++++++++++
AOF:
只追加操作的文件:——Append only file
——记录redis服务所有写操作
——不断的将新的写操作,追加到文件的末尾
——使用cat命令可以查看文件内容
文件名
– appendfilename “appendonly.aof” //文件名
–appendonly yes //启用aof,默认为no
AOF文件记录,写操作的三种方式:
– appendfsync always //有新的写操作立即记录,性能差,完整性好
– appendfsync everysec //每秒记录一次,宕机时会丢失1秒的数据
– appendfsync no //从不记录
日志重写(日志文件会不断增大),何时会触发日志重写呢?
——redis会记录上次重写时AOF文件的大小,默认配置是当aof文件是上次rewrite后大小的1倍且
文件大于64M时触发。
#vim /etc/redis/6379.conf
—— 744 aof-rewrite-percentage 100 (该值若是为零则代表禁止自动AOF重写功能)指定文件大小的百分比
—— 745 aof-rewrite-min-size 64mb

修复AOF文件,把文件恢复到最后一次的正确操作
#redis-check-aof --fix appendonly.aof

使用AOF文件恢复数据
备份数据:
— 备份append.aof 文件到其他位置
#cp 数据库目录/appendonly.aof 备份目录
— 恢复数据
把备份数据appendonly.aof 文件拷贝回数据库目录,重启redis服务
- cp 备份目录/appendonly.aof 数据库目录/
- /etc/redis/redis_端口 start

AOF优缺点
AOF优点:可以灵活的设置同步持久化appendonly alwayl或
异步持久化appendomly verysec宕机时,仅可能丢失1秒的数据。
缺点:
AOF文件的体积通常会大于RDB文件的体积。执行fsync策略时速度可能会比RDB慢‘
——————————————————
]# vim /etc/redis/6379.conf
673 appendonly no (需要 yes 才能启动AOF )
677 appendfilename “appendonly.aof”
685 # no: don’t fsync, just let the OS flush the data when it wants. Faster.
686 # always: fsync after every write to the append only log. Slow, Safest. 同步持久化
687 # everysec: fsync only one time every second. Compromise.
703 appendfsync everysec (默认文件记录的方式)

]# cd /var/lib/redis/6379/ ( appendonly yes 启动了AOF)
]# ls
appendonly.aof dump.rdb (appendonly.aof 由AOF产生的数据文件)
]# redis-cli -h 192.168.4.61
192.168.4.61:6379> set k1 v1
192.168.4.61:6379> set k2 v1
192.168.4.61:6379> set k3 v1
]# cat appendonly.aof (最后在redis的操作会记录在appendonly.aof 结尾)
(appendonly.aof 这个文件是可以被修改的。这个文件被修改损害之后redis服务会启动不起来
#redis-check-aof --fix appendonly.aof 用该命令修复AOF文件
修复之后若是服务启动出现故障(找不到PID 文件)

# /etc/init.d/redis_6379  start 
报错:/var/run/redis_6379.pid  exists,  process  is  already  running or  carshed
# ps  -C   redis-server
#cat   /var/run/redis_6379.pid   (查看PID 号)
#ps  aux  | grep  10046   (没有进程)
# rm  -rf  /var/run/redis_6379.pid
#/etc/init.d/redis_6379  status
#etc/init.d/redis_6379  start    (成功)

注意: 当redis主配置文件中的RDB 和AOF 的功能都开启的时候,redis重启会先读取AOF 文件后读RDB文件

++++++++++++++++++++++++++++++++++++++++++++++++++++++
四、数据类型
4.1 字符 string

——set key value [ex seconds ] [ px milliseconds ] [ nx |xx]
设置key及值,过期时间可以使用秒或者毫秒为单位
—— setrange key offset value
从偏移量开始复写key的特定位的值(即替换)
—— strlen key 统计子串长度
—— append key value
存在则追加,不存在则创建key及value,返回key长度
—— setbit key offset value
对key所存储字串,设置或者清楚特定偏移量上的位(bit);
value 值可以为1或0,offset 为0~2^32 之间
key不存在,则创建新key。
——bitcount key 统计字串中被设置为1的比特位数量(可以用在记录网站用户上线频率)
——decr key 将key中的值减1,key 不存在则先初始化为0,再减1
——decrby key decrement 将key中的值,减去decrment
——get key 返回key存储的字符串值 ,若key不存在则返回null;
若key的值不是字串,则返回错误,get只能处理字串
—— getrangt key start end
返回字串值中的子字串,截取范围为start 和end;
负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符
—— inrc key
将key的值加1,如果key不存在,则初始为0后再加1;主要应用为计数器。
—— inrc key increment 将key的值增加increment。
—— incrbyfloat key increment
为key中所存储存的值加上浮点数增量 Increment
—— mget key [key…]
获取一个或多个key的值,空格分隔,具有原子性
—— mset key value [key value …]
设置多个key及值,空格分隔,具有原子性

+++++++++++++++++++++++++++++++++++++++++++
列表 list
list 列表简介:list 是一个字符队列,先进后出,一个key 可以有多个值。
—— lpush key value 【value…】
将一个或多个值value 插入到列表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 末尾的值

+++++++++++++++++++++++++++++++++++++++++++
hash 表
redis hash 简介:
是一个string类型的filed 和value 的映射表;
一个key可对应多个field,一个field 对应一个value;
将一个对象存储为hash 类型,较于每个字段都存储成string 类型更能节省内存
——hset key filed value 将hash表中的field 值设置为value
—— hget key filed 获取hash表中的field 的值
—— hmset key field value [filed value…]
同时给hash表中的多个filed 赋值
—— hmget key field [field…]
返回hash表中多个field的值
—— hkeys key 返回hash表中所有的field 名称
—— hgetall key 返回hash表中所有的field的值
——hvals key 返回hash 表中所有的filed 的值
——hdel key field [field…] 删除hash表中多个field 的值,不存在则忽略。

++++++++++++++++++++++++++++++++++++++++++++
set 集合
++++++++++++++++++++++++++++++++++++++++++
zset 集合

+++++++++++++++++++++++++++++++++++
管理命令总结
——del key [key…] 删除一个或多个key
——exists key 测试一个key 是否存在
——expire key seconds 设置key的生命周期
——persist key 设置key永不过期
—— ttl key 查看key的生存周期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RDBRedis Database)和AOF(Append-Only File)是Redis中两种常见的持久化方式,它们有以下区别: 1. RDB持久化RDB是将Redis数据库在某个时间点的数据快照保存到硬盘上的一种方式。它通过fork一个子进程来完成持久化操作,首先将数据写入一个临时文件,然后用这个临时文件替换上一个RDB文件,从而实现数据的持久化RDB方式适合用于备份、灾难恢复和数据库迁移等场景。 2. AOF持久化AOF是通过将Redis的写命令追加到文件的末尾来记录数据库的操作。Redis重启时,通过重新执行AOF文件中的命令来恢复数据库状态。相比于RDB方式,AOF可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据。AOF方式适合用于数据持久化和实时备份等场景。 3. RDB的优点:RDB方式对于数据恢复速度较快,在大规模数据恢复时比AOF更高效。由于RDB是一个紧凑的进制文件,相对于AOF文件来说更小,可以节省存储空间。此外,RDB方式对Redis的性能影响较小。 4. AOF的优点:AOF方式可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据。AOF文件是一个文本文件,易于理解和修改。 总结来说,RDB方式适合于备份和灾难恢复,而AOF方式适合于数据持久化和实时备份。在选择持久化方式时,需要根据实际需求进行权衡和选择。另外,也可以同时使用RDBAOF两种方式,以提供更好的数据安全性和灾难恢复能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值