快速搭建redis主从结构
1. 工作原理
- slave向master发送sync命令
- master启动后台存盘进程,并收集所有修改数据命令
- master完成后台存盘后,传送整个数据文件到slave
- slave接收数据文件,加载到内存中完成首次完全同步
- 后续有新数据产生时,master继续收集数据修改命令依次传给slave,完成同步
1.1 配置redis主从
>slaveof 主ip 主端口
>info replication //查看复制信息
role: //角色
master_lost://主库ip地址
master_port://主库端口号
master_link_status://与主库连接状态
]# vim /etc/redis/6379.conf
282 slaveof 主ip 主端口
1.1.1反客为主,恢复主服务器
> slaveof no one //命令行临时设置
]# vim /etc/redis/6379.conf
...
slaveof 192.168.1.11 6311 //永久配置
1.1.2密码验证
修改配置文件/etc/redis/6379.conf
requirepass 123456 //定义连接密码
192.168.4.52:6352> CONFIG get masterauth
1) "masterauth"
2) ""
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
1.2 哨兵服务
1 安装源码redis软件
2 编写主配置文件
]# vim /etc/sentinel.conf
bind
sentinel monitor redisser 192.168.1.13 6313 1
:wq
3 启动哨兵服务
]# redis-sentinel /etcsentinel.conf
4 测试配置
停止主服务器192.168.4.53的redis服务
数据类型
1.String字符串
set 赋值 | setrange 修改特定位的值 | strlen key 统计长度 | getrange key start end 获取字符串
set key value [ex seconds] [px milliseconds] [nx|xx]
- 设置key及值,过期时间可以使用秒或者毫秒为单位
setrange key offset value
- 从偏移量开始复写key的特定位的值
> set first "hello world"
> setrange first 6 "Redis" //改写为hello Redis
strlen key, 统计字串长度
> strlen first
getrange key start end
- 返回字串值中的子字串,截取范围为start和end
- 负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符
> set list "hello,the world"
> getrange list -5 -1
> getrange list 0 -1
append 追加 | setbit key offset value 位存储 | bitcount key 统计个数
append key value
- 存在则追加,不存在则创建key及value,返回key长度
> append myname jacob
setbit key offset value
- 对key所存储字串,设置或清除特定偏移量上的位(bit)
- value的值可以为1或者0,offset为0~2^32之间
- key不存在,则创建新key
> setbit bit 1 1 //设置bit第1位为1
> setbit bit 2 0 //设置bit第2位为0
bitcount key
- 统计字串中被设置为1的比特位数量
场景说明:记录网站用户上线频率,如用户A上线了多少天等类似的数据
如用户在某天上线,则使用setbit,以用户名为key,讲网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可.
这样即使网站运行10年,每个用户仅占用10*365比特位即456字节
2.List列表
Redis的list是一个字符队列
先进后出
一个key可以有多个值
lpush 新建/插入 | lrange 范围读取 | lset 修改
lpush key value [v1 v2 v3 ...]
- 将一个或多个值value插入到列表key的表头,注意顺序,往左边加入!!!
- key不存在,则创建key
> lpust list a b c d e f g //list的值一次为gfedcba(往左添加)
lrange key start stop
- 从开始位置读取key的值到stop结束
> lrange list 0 -1 //读取全部,从左到右
lset key index value
- 将key中index位置的值修改为value
lpop 移除 | llen 长度 | index 下标 |
lpop key
- 移除并返回列表头元素数据,key不存在则返回nil
> lpop list //删除表头元素,可以多次执行
llen key
- 返回列表key的长度
lindex key index
- 返回列表中第index个值
rpush 插入 | rpop 删除 | 往右边添加
rpush key value [v1 v2 v3 ...]
- 将value插入到key的末尾
> rpush list a b c d e
rpop key
- 删除并返回key末尾的值
3.Hash表
Redis hash
- 是一个string类型的field和value的映射表
- 一个key可以对应多个field,一个field对应一个value
- 将一个对象存储为hash类型,较于每个字段都存储成string类型更能节省内存
hset 赋值 | hget 取值 | hmset hmget 批量 | hkeys 返回所有field名称 | |
hset key field value
- 将hash表中field值设置为value
hget key field
- 获取hash表中field的值
hmet key field value [field value ...]
- 同时给hash表中的多个field赋值
> hmset site google baidu www.g.cn qq.com wx.qom
hmget key field [field...]
- 返回hash表中多个field的值
> hmget site google baidu
hkeys key
- 返回hash表中所有field名称
> hmset site google www.g.cn baidu wx.com
> hkeys site
| hgetall 取值 | hvals 返回所有field值 | hdel 删除 |
hgetall key
- 返回hash表中所有field的值
hvals key
- 返回hash表中所有field的值
hdel key field [field...]
- 删除hash表中多个field的值,不存在则忽略
> hdel site google baidu
RDB与AOF
1.RDB相关介绍
Redis数据库文件,全称 Redis DataBase
– 数据持久化方式之一
– 数据持久化默认方式
– 按照指定时间间隔,将内存中的数据及快照写入硬盘
定义RDB文件名
– dbfilename “dump.rdb” //文件名
1.1 备份与恢复
备份数据
– 备份dump.rdb文件到其他位置
]# cp 数据库目录/dump.rdb 备份目录
恢复数据
– 拷贝备份文件到数据库目录,启动redis服务
]# cp 备份目录/dump.rdb 数据库目录/
1.2 优化设置
数据从内存保存到硬盘的频率
– save 900 1 //15分钟且有1个key改变即存盘
– save 300 10 //5分钟且有10个key改变即存盘
– save 60 10000 //1分钟且有10000个key改变即存盘
手动存盘
– save //阻塞写存盘,存盘时不可读取
– bgsave //不阻塞写存盘
2. AOF相关介绍
Append Only File
- 追加方式记录写操作的文件
- 记录redis服务所有写操作
- 不断的将新的操作,追加到文件的末尾
- 默认没有启用
- 使用cat命令可以查看文件内容
2.1 优缺点
AOF优点
-- 可以灵活设置持久化方式
-- 出现意外宕机时,尽可能丢失1秒的数据
AOF缺点
-- 持久化文件的体积通常会大于RDB方式
-- 执行fsync策略时的速度可能会比RDB方式慢
2.2 启用AOF
> config set appendonly yes //启用
> config rewrite //写进配置文件
2.3 AOF恢复数据
备份数据
- 备份appendonly.aof文件到其他位置
]# cp 数据库目录/appendonly.aof 备份目录
恢复数据
- 拷贝备份文件到数据库目录
- 启动redis服务
]# cp 备份目录/appendonly.aof 数据库目录
]# /etc/redis/redis_端口 start
2.4 AOF优化配置
- 定义文件名
– appendonly yes //启用aof,默认no
– appendfilename “appendonly.aof” //指定文件名 - AOF文件记录写操作的方式
– appendfsync always //时时记录,并完成磁盘同步
– appendfsync everysec //每秒记录一次,并完成磁盘同步
– appendfsync no //写入aof,不执行磁盘同步 - 触发日志重写
– auto-aof-rewrite-min-size 64mb //首次重写触发值
– auto-aof-rewrite-percentage 100 //再次重写,增长百分比 - 修复AOF文件
– ]# redis-check-aof --fix appendonly.aof