把redis集群里的主机 恢复为独立的redis服务器(51-58)
]# redis-cli -h 192.168.4.51 -p 6351 shutdown
]# rm -rf /var/lib/redis/6379/*
]# vim /etc/redis/6379.conf (把与集群配置相关的 3项 注释)
]# /etc/init.d/redis_6379 start
]# netstat -utnlp | grep redis-server
1. Redis主从复制
将主机192.168.4.51作为主库
将主机192.168.4.52作为从库
测试配置
命令行指定主库 > slaveof 主库ip 端口
命令行把从库恢复为主库 > slaveof no one
带密码的主库库设置
主库配置:
541 ~]# vim /etc/redis/6379.conf
requirepass 123456
...
从库配置
52 ~]# sed -n '282p;289p' /etc/redis/6379.conf
slaveof 192.168.4.51 6351 主库ip及端口
masterauth 123456 主库密码
哨兵服务配置文件
主库宕机后,从库自动升级为主库
在slave主机编辑sentinel.conf文件
在slave主机运行哨兵程序
52 redis-4.0.8]# cat /etc/sentinel.conf
bind 0.0.0.0
sentinel monitor redis51 192.168.4.51 6351 1
sentinel auth-pass redis51 123456
启动哨兵服务
52 ~]# redis-sentinel /etc/sentinel.conf
新开52窗口,查看效果:
检测:
51宕机
]# redis-cli -h 192.168.4.51 -p 6351 shutdown
观看原52窗口动态变化
新52窗口查询
192.168.4.52:6352> info replication(主库,没有从库)
51开机
]# /etc/init.d/redis_6379 start
Starting Redis server...
新52窗口查询
192.168.4.52:6352> info replication(主库,51为其从库))
2.Redis数据类型
数据管理命令:
string类型
set get strlen setrange getrange
append incr incrby incrbyfloat decr decrby mget mset setbit bitcount
LIST表
lpush llen lrange lset lpop lindex rpop rpush
Hash表
hset hget hmget hmset hgetall hkeys hvals hdel
2.1 String字符串
set key value [ex seconds] [px milliseconds] [nx|xx]
设置key及值,过期时间可以使用秒或毫秒为单位
setrange key offset value
从偏移量开始复写key的特定位的值
192.168.4.52:6352> set first "hello world"
OK
192.168.4.52:6352> get first
"hello world"
192.168.4.52:6352> setrange first 6 "redis" (替换)
(integer) 11
192.168.4.52:6352> get first
"hello redis"
strlen key,统计字串长度
192.168.4.52:6352> strlen first
(integer) 11
setbit key offset value 对key所存储字串,设置或清除特定偏移量上的位(bit),value值可以为1或0,offset为0~2^32之间,key不存在,则创建新key
192.168.4.52:6352> setbit bit 0 1
(integer) 0
192.168.4.52:6352> setbit bit 1 0
(integer) 0
192.168.4.52:6352> get bit
"\x80"
bitcount key 统计字串中被设置为1的比特位数量
192.168.4.52:6352> setbit bits 0 1(0001)
(integer) 0
192.168.4.52:6352> setbit bits 3 1(1001)
(integer) 0
192.168.4.52:6352> get bits
"\x90"
192.168.4.52:6352> bitcount bits
(integer) 2
记录网站用户上线频率,如用户A上线了多少天等类似的数据,如用户在某天上线,则使用setbit,以用户名为key,将网站上线日为offset,并在该offset上设置1,最后计算用户总上线次数时,使用bitcount用户名即可,这样即使网站运行10年,每个用户仅占用10*365比特位即456字节
//网站上线100天用户登录了一次
192.168.4.52:6352> setbit peter 100 1
(integer) 0
//网站上线105天用户登录了一次
192.168.4.52:6352> setbit peter 105 1
(integer) 0
192.168.4.52:6352> bitcount peter
(integer) 2
decr key 将key中的值减1,key不存在则先初始化为0,再减1
192.168.4.52:6352> set z 10
OK
192.168.4.52:6352> decr z
(integer) 9
192.168.4.52:6352> decr z
(integer) 8
192.168.4.52:6352> decr bb
(integer) -1
192.168.4.52:6352> decr bb
(integer) -2
decrby key decrement 将key中的值,减去decrement
192.168.4.52:6352> set count 100
OK
//定义每次减少20(步长)
192.168.4.52:6352> DECRBY count 20
(integer) 80
192.168.4.52:6352> DECRBY count 20
(integer) 60
192.168.4.52:6352> DECRBY cc 20
(integer) -20
192.168.4.52:6352> DECRBY cc 20
(integer) -40
get key 返回key存储的字符串值,若key不存在则返回nil,若key的值不是字串,则返回错误,get只能处理字串
192.168.4.52:6352> get a
(nil)
getrange key start end 返回字串值中的子字串,截取范围为start和end,负数偏移量表示从末尾开始计数,-1表示最后一个字符,-2表示倒数第二个字符
192.168.4.52:6352> set x 123456789
OK
192.168.4.52:6352> getrange x -5 -1
"56789"
192.168.4.52:6352> getrange x 0 4
"12345"
incr key 将key的值加1,如果key不存在,则初始为0后再加1,主要应用为计数器
192.168.4.52:6352> set page 20
OK
192.168.4.52:6352> incr page
(integer) 21
incrby key increment 将key的值增加increment
192.168.4.52:6352> set x 10
OK
192.168.4.52:6352> incrby x 10
(integer) 20
192.168.4.52:6352> incrby x 20
(integer) 40
incrbyfloat key increment 为key中所储存的值加上浮点数增量 increment
192.168.4.52:6352> set num 16.1
OK
192.168.4.52:6352> incrbyfloat num 1.1
"17.2"
mset key value [key value …] 设置多个key及值,空格分隔,具有原子性
192.168.4.52:6352> mset j 9 k 29
OK
192.168.4.52:6352> get j
"9"
192.168.4.52:6352> get k
"29"
2.2 list列表
Redis的list是一个字符队列,先进后出,一个key可以有多个值
lpush key value [value…] 将一个或多个值value插入到列表key的表头,Key不存在,则创建key
//list值依次为c b a
192.168.4.52:6352> lpush list a b c
(integer) 3
//从0位开始,读到2位为止
192.168.4.52:6352> lrange list 0 2
1) "c"
2) "b"
3) "a"
/从开始读到结束为止
192.168.4.52:6352> lrange list 0 -1
1) "c"
2) "b"
3) "a"
//从开始读到倒数第2位值
192.168.4.52:6352> lrange list 0 -2
1) "c"
2) "b"
lpop key 移除并返回列表头元素数据,key不存在则返回nil
192.168.4.52:6352> lpop list
"c"
192.168.4.52:6352> lpop list
"b"
192.168.4.52:6352> lpop list
"a"
192.168.4.52:6352> lpop list
(nil)
llen key 返回列表key的长度
192.168.4.52:6352> llen list
(integer) 3
lindex key index 返回列表中第index个值
192.168.4.52:6352> lindex list1 1
"c"
lset key index value 将key中index位置的值修改为value
192.168.4.52:6352> lpush t1 a b c d
(integer) 4
192.168.4.52:6352> lrange t1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
192.168.4.52:6352> lset t1 3 test
OK
192.168.4.52:6352> lrange t1 0 -1
1) "d"
2) "c"
3) "b"
4) "test"
rpush key value [value…] 将value插入到key的末尾
192.168.4.52:6352> rpush list1 a b c
(integer) 3
192.168.4.52:6352> rpush list1 d
(integer) 4
192.168.4.52:6352> lrange list1 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
rpop key 删除并返回key末尾的值
192.168.4.52:6352> RPOP list1
"d"
192.168.4.52:6352> RPOP list1
"c"
2.3 hash表
hset key field value 将hash表中field值设置为value
192.168.4.52:6352> hset site google 'www.g.cn'
(integer) 1
192.168.4.52:6352> hset site baidu 'www.baidu.com'
(integer) 1
192.168.4.52:6352> hget site google
"www.g.cn"
192.168.4.52:6352> hget site baidu
"www.baidu.com"
hmset key field value [field value…] 同时给hash表中的多个field赋值
192.168.4.52:6352> hmset site google www.g.cn baidu www.baidu.com
OK
hmget key field [field…] 返回hash表中多个field的值
192.168.4.52:6352> hmget site google baidu
1) "www.g.cn"
2) "www.baidu.com"
hkeys key 返回hash表中所有field名称
192.168.4.52:6352> hmset site google www.g.cn baidu www.baidu.com
OK
192.168.4.52:6352> hkeys site
1) "google"
2) "baidu"
hgetall key 返回hash表中所有key名和对应的值列表
192.168.4.52:6352> hgetall site
1) "google"
2) "www.g.cn"
3) "baidu"
4) "www.baidu.com"
hvals key 返回hash表中所有key的值
192.168.4.52:6352> hvals site
1) "www.g.cn"
2) "www.baidu.com"
3 使用RDB文件恢复数据
要求如下:
启用RDB
设置存盘间隔为120秒 10个key改变存盘
备份RDB文件
删除数据
使用RDB文件恢复数据
RDB介绍:
Redis数据库文件,全称Reids DataBase
数据持久化方式之一
在指定时间间隔内,将内存中的数据集快照写入硬盘
术语叫Snapshot快照
恢复时,将快照文件直接读到内存里
相关配置参数
文件名
dbfilename “dump.rdb” 文件名
save “” 禁用RDB
数据从内存保存到硬盘的频率
save 900 1 900秒内且有1次修改
save 300 10 300秒内且有10次修改
save 60 10000 60秒内且有10000修改
3.1 开启
]# vim /etc/redis/6379.conf
dbfilename dump.rdb
# save "" //启用RDB,去掉#号为禁用RDB
save 120 1 //120秒内且有1次修改(满足三个条件中的任意一个都会保存)
save 300 10
save 60 10000
]# /etc/init.d/redis_6379 start
]# redis-cli -h 192.168.4.52 -p 6352
3.2 存入值
192.168.4.52:6352> set v1 k1
OK
192.168.4.52:6352> set v2 k1
OK
192.168.4.52:6352> set v3 k1
OK
192.168.4.52:6352> set v4 k1
OK
192.168.4.52:6352> set v5 k1
OK
192.168.4.52:6352> set v6 k1
OK
192.168.4.52:6352> set v7 k1
OK
192.168.4.52:6352> set v8 k1
OK
192.168.4.52:6352> set v9 k1
OK
192.168.4.52:6352> set v10 k1
OK
192.168.4.52:6352> keys *
1) "v2"
2) "v7"
3) "v1"
4) "v10"
5) "v6"
6) "v5"
7) "v8"
8) "v9"
9) "v4"
10) "v3"
3.3 备份数据
]# redis-cli -h 192.168.4.52 -p 6352 shutdown
]# cd /var/lib/redis/6379/
6379]# ls
dump.rdb
6379]# cp dump.rdb dump.rdb.bak
3.4 删除数据
]# rm -rf dump.rdb
6379]# /etc/init.d/redis_6379 start
Starting Redis server...
6379]# ls
dump.rdb dump.rdb.bak
]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> keys * (已经没有数据)
(empty list or set)
3.5 恢复数据
]# redis-cli -h 192.168.4.52 -p 6352 shutdown
6379]# mv dump.rdb.bak dump.rdb
mv:是否覆盖"dump.rdb"? yes
6379]# ls
dump.rdb
6379]# /etc/init.d/redis_6379 start
Starting Redis server...
6379]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> keys *
1) "v6"
2) "v3"
3) "v9"
4) "v1"
5) "v5"
6) "v8"
7) "v2"
8) "v4"
9) "v7"
10) "v10"
RDB优点:
高性能的持久化实现:创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何IO操作
比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
RDB的缺点:
意外宕机时,最后一次持久化的数据会丢失
4.使用AOF文件恢复数据
启用AOF
备份AOF文件
删除数据
使用AOF文件恢复数据
AOF介绍
只做追加操作的文件,Append Only File
记录redis服务所有写操作
不断的将新的写操作,追加到文件的末尾
使用cat命令可以查看文件内容
参数配置
文件名
appendfilename "appendonly.aof" 指定文件名
appendonly yes 启用aof ,默认no
AOF文件记录写操作的方式
appendfsync always 有新写操作立即记录
appendfsync everysec 每秒记录一次
appendfsync no 从不记录
4.1 开启
]# redis-cli -h 192.168.4.52 -p 6352 shutdown
6379]# rm -rf dump.rdb
6379]# vim /etc/redis/6379.conf(修改,不需要添加)
appendonly yes //启用aof,默认no
appendfilename "appendonly.aof" //文件名
appendfsync everysec //每秒记录一次
4.2 查看测试
]# /etc/init.d/redis_6379 start
Starting Redis server...
6379]# ls
appendonly.aof dump.rdb
6379]# cat appendonly.aof (没东西)
6379]# redis-cli -h 192.168.4.52 -p 6352
插入数据
192.168.4.52:6352> set t1 1
OK
192.168.4.52:6352> set t2 2
OK
192.168.4.52:6352> set t3 3
OK
查看
]# !cat
cat appendonly.aof
*2
$6
SELECT
$1
0
*3
$3
set
$2
t1
$1
1
*3
$3
set
$2
t2
$1
2
*3
$3
set
$2
t3
$1
3
4.3 使用AOF恢复数据
]# cp appendonly.aof appendonly.aof.bak
6379]# ls
appendonly.aof appendonly.aof.bak dump.rdb
6379]# redis-cli -h 192.168.4.52 -p 6352 shutdown
6379]# rm -rf appendonly.aof
6379]# /etc/init.d/redis_6379 start
Starting Redis server...
6379]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> keys * (没了)
(empty list or set)
恢复数据
]# mv appendonly.aof.bak appendonly.aof
mv:是否覆盖"appendonly.aof"? y
6379]# ls
appendonly.aof dump.rdb
6379]# redis-cli -h 192.168.4.52 -p 6352 shutdown
6379]# /etc/init.d/redis_6379 start
Starting Redis server...
6379]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> keys *
1) "t1"
2) "t3"
3) "t2"
修复AOF文件,把文件恢复到最后一次的正确操作
]# vim appendonly.aof
*2 //可以把这一行删除
$6
...
]# redis-check-aof --fix appendonly.aof
...
Continue? [y/N]: y
Successfully truncated AOF
AOF优点:
可以灵活的设置同步持久化appendfsync always或异步持久化appendfsync verysec
宕机时,仅可能丢失1秒的数据
RDB的缺点:
AOF文件的体积通常会大于RDB文件的体积
执行fsync策略时的速度可能会比RDB慢
- Redis实现之AOF持久化
AOF持久化 除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能,与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Red ...
- 图解 Redis | 不就是 AOF 持久化嘛
AOF 日志 试想一下,如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它,这不就相当于恢复了缓存数据了 ...
- (四)Redis主从复制(单机版,不集群)
持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可 ...
- 11 redis之rdb快照持久化
一:Redis持久化配置 Redis的持久化有2种方式[快照,是日志] 二:Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 // 如果3 ...
- redis学习(四)redis持久化之RDB、AOF
redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失.为了解决这个问题,re ...
- 11/6笔记 补充(Redis持久化,RDB&&AOF)
11/6补充笔记 修改redis-6379.conf里面的save10秒2个数据发生改变 (save 10 2) 修改一次数据不发生改变,修改2次数据才发生改变 继续修改数据,发现还是一样的规律 增删 ...
- Redis数据持久化之AOF持久化
一.RDB持久化的缺点创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常耗费资源和时间的操作,所以服务器需要隔一段时间才能创建一个新的RDB文件,就也是说创建RDB文件的操作不能执行 ...
- Redis 中的数据持久化策略(AOF)
上一篇文章,我们讲的是 Redis 的一种基于内存快照的持久化存储策略 RDB,本质上他就是让 redis fork 出一个子进程遍历我们所有数据库中的字典,进行磁盘文件的写入. 但其实这种方式是有缺 ...
- 第一章· Redis入门部署及持久化介绍
Redis简介 Redis安装部署 Redis持久化 Redis简介 软件说明: Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. ...
随机推荐
- WUSTOJ 1335: Similar Word(Java)
题目链接:1335: Similar Word Description It was a crummy day for Lur. He failed to pass to the CET-6 (Col ...
- Vue使用指南(一)
Vue Vue:前台框架 渐进式JavaScript框架 渐进式:vue可以控制页面的一个局部,vue也可以控制整个页面,vue也能控制整个前端项目 -- 根据项目需求,来决定vue控制项目的 ...
- 第二次用map23333
度熊所居住的 D 国,是一个完全尊重人权的国度.以至于这个国家的所有人命名自己的名字都非常奇怪.一个人的名字由若干个字符组成,同样的,这些字符的全排列的结果中的每一个字符串,也都是这个人的名字.例如, ...
- C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法! 如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可. 1.阿拉伯数字转换为中文数字 /// <summary> ...
- 使用Harbor搭建Docker私有镜像仓库
Harbor介绍:https://goharbor.io/ 前置条件 需要安装了docker和docker-compose 下载Harbor 在harbor下载页(https://github.com ...
- google mock C++单元测试框架
转:google mock C++单元测试框架 2012-03-12 09:33:59 http://blog.chinaunix.net/uid-25748718-id-3129590.html G ...
- sql语句中包含引号处理方法
1. 背景 在使用Python脚本向数据库导入日志文件时候,突然报错. 2. 解决思路 查看messages文件,发现有一条语句里包含单引号. 查看sql语句,是使用单引号标注str类型. 3. 得出 ...
- java SE,EE,ME区别
Java SE(Java Platform,Standard Edition):java平台标准版: Java EE(Java Platform.Enterprise Edition):java平台企 ...
- robot framework 的关键字Continue For Loop 用法
Continue For Loop关键字就是python的continue的意思,跳出本层循环,继续执行下一个循环. 我先举个栗子: :FOR ${index} IN RANGE 5 ...
- 关于Vue中,父组件获取子组件的数据(子组件调用父组件函数)的方法
1. 父组件调用子组件时,在调用处传给子组件一个方法 :on-update="updateData" 2. 子组件在props中,接收这个方法并声明 props: { onUp ...