使用fg命令将后台进程变为前台进程使用fg命令将后台进程变为前台进程使用fg命令将后台进程变为前台进程
主从复制工作原理
1 slave向master发送sync命令
2 master启动后台存盘进程,并收集所有使用fg命令将后台进程变为前台进程修改数据命令
3 master完成后台存盘后,传送到整个数据文件到slave
4 slave接收数据文件,加载到内存中完成首次完全同步
5 后续有新数据产生时,master继续收集数据修改命令,依次传给slave,完成同步
一 配置从库
Redis服务运行后,默认都是master服务器
查看复制信息: info replication
指定为1从库:
命令行临时配置
slaveof IP地址 端口号
永久配置
vim /etc/redis/6379.conf
slaveof 主服务器ip 端口
二 反客为主
将从库恢复为主库
命令行临时设置
slaveof no one
三 配置带验证的主从复制
1 配置master
设置连接密码,重启服务
vim +501 /etc/redis/6379.conf
requirepass 密码
2 配置slave
设置连接密码,重启服务
vim +289 /etc/redis/6379.conf
masterauth 密码
在工作中,如何不重启服务就可以设置连接密码:
在命令行下
config get masterauth使用fg命令将后台进程变为前台进程使用fg命令将后台进程变为前台进程
config set masterauth “密码”
config rewrite
哨兵服务
1 哨兵服务简述
监视master服务器
发现master宕机后,将从服务器升级为主服务器
主配置文件sentinel.conf
其模板配置文件存放于redis-4.0.8/sentinel.conf
2 配置哨兵服务
创建主配置文件
cp redis-4.0.8/sentinel.conf /etc/sentinel.conf
修改主配置文件
vim /etc/sentinel.conf
sentinel monitor 主机名 master主机的ip地址 端口 票数(发现主机宕机的哨兵服务器台数)
bind 0.0.0.0 26379
sentinel auth-pass (连接服务密码)
四 持久化
支持数据永久存储
Redis数据库文件,全程Redis database
数据持久化方式之一
数据持久化默认方式
按照指定间隔时间,将内存中的数据及快照写入硬盘
定义RDB文件名
dbfilename “dump.rdb”
1 使用RDB文件恢复数据
备份数据
cp 数据库目录/dump.rdb 备份目录csdn
恢复数据
先停止服务,再删掉数据库目录下的dump.rdb
拷贝备份文件到数据库目录,启动Redis服务
2 优化设置
数据从内从保存到硬盘的频率
save 900 1 (900s且有1个key改变即存盘)
save 300 10 (300s且有10个key改变即存盘)
save 60 10000 (60s且有100000个key改变及存盘)
手动存盘
save (阻塞写存盘)
bgsave (不阻塞写存盘)
3 RDB优点与缺点
优点
高性能的持久化实现
适合大规模数据恢复,且对数据完整性要求不是非常高的场合
缺点
意外宕机时,丢失最后一次持久化的所有数据
4 使用AOF文件恢复数据
追加方式记录写操作的文件
记录redis服务所有写操作
不断的将新的写操作,追加到文件的末尾
默认是没有启用的状态
启动AOF
config set appendonly yes
config rewrite
备份数据
备份appendonly.aof文件到其他位置
cp 数据库目录/appendonly.aof 备份目录
恢复数据
拷贝备份文件到数据库目录
启动Redis服务
cp 备份目录/appendonly.aof 数据库目录
/etc/redis/redis_端口 start
6 优化配置
定义文件名
appendonly yes
appendonlyfilename “文件名”
AOF文件记录写操作的方式
时时记录,并完成磁盘同步
appendfsync always
每秒记录一次,并完成磁盘同步
appendfsync everysec
写入aof,不执行磁盘同步
appendfsync no
日志文件会不断变大,何时触发日志重写
首次重写,触发值
auto-aof-rewrite-min-size 64mb
再次重写,增长值
auto-aof-rewrite-percentage 100
举个例子:
周一时启动AOF,设置的是64M触发,周五时达到64M,触发重写,重写之后是50M,当前设置的percentage值是100,则下次触发值是50的百分百增长,即达到100M后就会再次触发重写
AOF文件修复
把文件恢复到最后一次的正确操作
redis-check-aof --fix appendonly.aof
7 AOF优缺点
优点
可以灵活设置持久化方式
出现意外宕机,仅可能丢失很少的数据
缺点
持久化文件的体积通常会大于RDB方式
执行fsync策略时的速度可能会比RDB方式慢
五 数据类型
1 string字符串
设置key及值,过期时间可以使用秒或毫秒为单位
set a 1 ex 10(单位秒)
set a 1 px 10(单位毫秒)
set b 1 NX(变量不存在赋值)
set b 2 xx(变量存在赋值)
从偏移量开始复写key的特定位的值
set c “iphone6”
setrange c 0 “iphonex”(改写为iphonex)
get c
strlen key,统计字串长度
strlen c
(integer)7
append key value 存在则追加,不存在则创建key及value,返回key长度
append c xuanfei
“iphonexxuanfei”
append d bobo
(integer)4
setbit key offset value 对key所存储字串,设置或清除特定偏移量上的位(bit),value值可以为1或0,offset为0~2^32之间,key不存在,则创建新key
setbit e 0 1(设置bit第0位为1)
setbit e 1 0(设置bit第1位为0)
bitcount key 统计字串中被设置为1的比特位数量
setbit f 0 1
setbit f 3 1
bitcount f
(integer) 1
应用场景
记录网站用户上线频率,如用户A上线了多少天等类似的数据,如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可,这样即使网站运行10年,每个用户仅占用10*365比特位即456字节
decr key 将key中的值减1,key不存在则先初始化为0,再减1
set g 10
decr g
(integer) 9
decr gg
(integer) -1
decrby key decrement 将key中的值,减去decrement
set h 100
decrby h 20
(integer) 80
incr key 将key的值加1,如果key不存在,则初始为0后再加1,主要应用为计数器
set i 20
incr i
(integer) 21
incrby key increment 将key的值增加increment
set j 20
incrby j 20
(integer)40
incrbyfloat key increment 为key中所储存的值加上浮点数增量 increment
set k 20
incrbyfloat k 1.1
21.1
2 list列表
Redis的list是一个字符队列
先进后出
一个key可以有多个值
lpush key value [value…] 将一个或多个值value插入到列表key的表头,Key不存在,则创建key
lpush l 1 2 3 (l的值有三个,依次为3 2 1)
(integer) 3
lrange key start stop 从开始位置读取key的值到stop结束
lrange l 0 2 (从0位开始,读到2位为止)
3
2
1
lrange l 0 -1 (从开始读到结束为止)
3
2
1
lrange list 0 -2 (从开始读到倒数第2位的值)
3
2
lpop key 移除并返回列表头元素数据,key不存在则返回nil
lpop l (删除表头元素,可以执行多次)
3
lpop l
2
llen key 返回列表key的长度
llen l
(integer) 1
lindex key index 返回列表中第index个值
lpush m 4 5 6
lindex m 1
5
lset key index value 将key中index位置的值修改为value
lset m 1 7 (将m中的第1位的值修改为7)
6
7
4
rpush key value [value…] 将value插入到key的末尾
rpush m d (末尾插入d)
6
7
4
d
rpop key 删除并返回key末尾的值
rpop m
d
3 hash表
是一个string类型的field和value的映射表
一个key可对应多个field,一个field对应一个value
将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存
hset key field value 将hash表中field值设置为value
hset n n1 1
hset n n2 2
hget key filed 获取hash表中field的值
hget n n1
hmset key field value [field value…] 同时给hash表中的多个field赋值
hmset o o1 1 o2 2 o3 3
hmget key field [field…] 返回hash表中多个field的值
hmget o o1 o2 o3
hkeys key 返回hash表中所有field名称
hkeys o
o1
o2
o3
hgetall key 返回hash表中所有key名和对应的值列表
hgetall o
o1
1
o2
2
o3
3
hvals key 返回hash表中所有key的值
hvals o
1
2
3
hdel key field [field…] 删除hash表中多个field的值,不存在则忽略
hdel o o1 o2