把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数据库产品. ...
随机推荐
- svn钩子(hooks)
目录 钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作 所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化 ...
- Python+VSCode+Git【转】
Python+VSCode+Git 学习总结 - 秦无邪 - 博客园
- v8 引擎的内存
一.nodejs查看内容使用情况: process.memoryUsage() 单位为 Btye 转化函数: var format = function(bytes) { return (bytes/ ...
- js中__proto__和prototype的区别和关系?(转)
转自知乎:https://www.zhihu.com/question/34183746
- 偷窥篇:重要的C#语言特性——30分钟LINQ教程
本文转自:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html 千万别被这个页面的滚动条吓到!!! 我相信你一定能在30分钟之内看 ...
- 简介:google ctemplate:简单易用的文字模板(转载)
转自:http://blog.csdn.net/aladdina/article/details/4531736 CTemplate 是一个简单实用.功能强大的文字模板(template langua ...
- werkzeug/routing.py-Map()源码解析
Map类主要用来存储所有的url规则和一些配置参数的.其中有一些配置的值只存储在Map实例里,因为这些值影响着所有的规则,还有一些其他的默认规则可以被重写. 通过之前分析的add_url_rule源码 ...
- ping IP 带时间戳循环显示并写入日志(windos版+linux版)
在工作中,判断网络是否通畅,首选命令就是ping,但有时候我们需要持续ping一个或多个地址时,需要加 -t 即可,但有时候需要在ping的时候加入时间戳并把ping记录写入到日志里面,方法如下: w ...
- -bash: 无法为立即文档创建临时文件: 设备上没有空间---记一次报错
故障发生原因 测试环境,之前用该机器做过docker-compose,后来有需要用到该机器上的docker环境,需要将旧的docker容器全部删除,由于之前启动是使用docker-compose启动的 ...
- Windows下静态库的制作与使用
参考 静态链接 VS 动态链接 静态库 VS 动态库 实验环境 OS:Windows10 企业版 IDE:Visual Studio 2017旗舰版 前言 静态链接库与动态链接库都是共享代码的方式,如 ...