您的位置:首页 > 数据库 > Redis

redis-高级(事务,频道发布,消息订阅,持久化,主从复制,运维监控....)

2017-02-24 15:45 751 查看
================事务==================

mutil:开启事务,存储在队列里

discard:取消命令

exec:执行

mutil后面的语句,可能出现2个错误

1:语法问题,

2:语法没错,适用对象有问题

并发问题:

乐观锁:监听

悲观锁:使用时就开启锁,别人用不了

redis使用的是乐观锁

watch key1[key2…keyn]:监听key1,key2有没有变化,如果有变化则事务取消

unwatch :取消所有watch监听

执行顺序

wtach key1

mutil

exec/discard

unwatch

=========频道发布,消息订阅============

publish 频道 内容:频道发布,返回值为监听个数

subscribe 频道:订阅频道

psubscribe pattern:一次性监听满足条件的频道 (news*会监听所有news开头的频道)

pubsub channels [pattern]:列出当前活动频道, 一个活动频道是指,又发布有订阅。没设置pattern,显示所有

运维层面

=============持久化的方式=============

常见的持久化方式

主从:通过从服务器保存和持久化,如mongoDB的replication sets配置,主服务器就是从内存上面写,保存到从服务器上。

日志:通过生成相关日志,并通过日志来恢复数据

couchDB对于数据内容不修改,只追加,则文件本身就是日志,不会丢失数据

redis持久化方式

一):rdb快照持久化

工作原理

每隔[N分钟]或[N次]写操作后,从内存dump数据形成rdb文件[压缩]放在[备份目录],

[]里面的内容可以配置

redis.conf配置文件里面有

三个选项注释的话,将不会导出文件

save 900 1:900秒修改超过1次,自动备份

save 300 10:300秒修改超过10次,自动备份

save 60 10000:60秒修改10000次,自动备份

stop-writers-on-bgsave-error yes:导出过程出错,停止写入。

rdbcompression yes:压缩rdb导出文件

rdbchecksum yes:导入rdb文件时检测文件是否出错

缺陷:

在2个保存点之间断电,将会丢失1-N分钟的数据

也就是说60秒之内我保存了1W条数据,他会自动导出,然后我在保存1条数据,则不会保存。没触发里面的条件

优点:写入快

二:aof(日志)

conf配置

appendonly no:是否打开aof日志功能,默认关闭

appendfsync everysec:折中方案,每秒写一次

appendfsync always:每一个命令都立即同步到aof,安全,速度慢

appendfsync no:写入工作交给操作系统,由操作系统判断你缓冲区大小统一写到aof,同步频率低,速度快

no-appendfsync-on-rewrite yes:正在导出rdb快照的过程中,要不要停止同步aof,停止,节约io。所有的aof都会存储在队列里,等rdb执行完,在执行aof。所以数据不会丢失

auto-aof-rewrite-percentage :aof文件比起上次重写时的大小,增长率100%重写

auto-aof-rewrite-min-size 64mb:aof文件至少超过64M重写

在dump rdb过程中,aof如果停止同步,会不会丢失数据?

不会,所有的操作缓存在内存的队列里,dump完成后,同意操作

aof重写时指什么?

指的是把内存中的数据,逆化成命令写入到aof日志里,解决zof日志过大问题。实际上就是多次操作同一个数据,都会被记录下来,这样的话,浪费空间,重写就是把最终的结果转换为1个命令。

恢复是,rdb和aof那个恢复快?

rdb快,因为其实数据的内存映射,而aof是命令,需要逐条执行

可以同时使用,并且推荐这样用。

aof和rdb同时存在,会优先采用aof读取

配置文件中开启aof,会生成一个空文件,如果rdb没有先读取,会优先读取aof,所以会导致没有内容。

===========主从复制(集群)=========

集群作用

1:主从备份,防止主机关闭

2:读写分离,分担master的任务

3:任务分离,如从服分别分担备份工作和计算工作

使用slave做rdb写入工作,

1:主配置文件关闭rdb开启信息,aof可关闭可不关闭(因为主服务器同步时间比从服务器即时,如果主服务器开启了,则要关闭从服务器aof,避免反复读写)

2:从配置文件开启slave服务(slaveof localhost 6379),并配置端口为主服务器端口

3:从服务器配置开启rdb,并关闭aof

4:从服务器配置slave-read-only为只读,保证数据一致。

4:从服务器配置跟主服务器不重复端口,以及pidfile文件名字,还有rdb文件名字

5:配置密码,如果master有密码

主配置文件equirepass 密码:配置密码

从配置文件masterauth 密码:配置密码

客户端连接客户端口,auth 密码

redis-cli -p 指定从的端口就开启slave

缺陷:每次slave断开后,无论任意情况,在连接master,

都要master全部dump出来,在aof,即同步的过程都要重新执行一遍,

多台slave不要一起启动,否则master可能io剧增

====================运维===============

客户端命令

time:显示服务器时间,时间戳(秒),微秒数

dbsize:当前数据库key数量

bgrewriteaof:手动重写aof

save:手动保存rdb

bgsave:手动保存rdb,后台重启进程保存

lastsave :
d037
上次保存rdb时间

flushdb:清空当前db

flushall:清空所有db

showdown [save/nosave]:关闭服务器,保存|不保存,默认保存后重写aof

info [statu][fork][…]:显示信息

memory

used_memory:XXX 数据结构的空间

used_memory_rss:实占空间

mem_fragmentation_ratio:前2者的比例,1为最佳,如果值过大,说明redis的内存碎片化严重,可以在导出再导入一次

主从复制

role:slave

master_host

master_port

mester_link_status:up

持久化

rdb_changes_since_last_save:0 上次保存后到现在有几个改动

rdb_last_save_time:上次保存时间

status

latest_fork_usec:导入导出多少微秒

config get requirepass:获取是否有密码

config get slowlog-log-slower-then:获取慢日志信息,大于多少秒记下来

config set slowlog-log-slower-then 微秒:设置慢日志时间

config get slowlog-max-len :获取存储多少条慢查询的记录

slowlog get [count]:获取慢日志

slowlog-log-slower-then 微秒:设置慢日志时间

slaveof master-Host port:把当前实例设为master的slave

===============aof恢复与服务器间迁移===================

如果运行了flushall,立即showdown nosave关闭服务器,然后手工编辑aof文件,去掉文件中的flushall相关(3行一对)行,然后开启服务器就可以导回原来数据

或者,aof改名字,让系统找不到,让他读取rdb即可

复制一份rdb文件,名字改为另一个redis服务器引用,即可。

复制rdb文件时要保证调用rdb的进程关闭,否则另一个redis应用失败(因为2个rdb处在同一句柄)。

aof也同理

==================运维监控===========

master down之后

一:手工配置

1:指定任意一台slave设置slaveof no one,表示角色更换为master

2:设置slave-read-only no:表示可写

3:其他slave,新的master

设置:slaveof IP地址 端口

二:使用sentinel监控主服务器

1:cp 源代码目录下sentinel.conf 到redis目录

2:sentinel.conf配置信息

sentinel monitor 定义的名字 ip 端口 次数 :监视那个地址,一定的失效次数没有连接上,确定失效

sentinel auth-pass 名字跟上面定义的名字一致 012_345:设置密码

sentinel down-after-milliseconds 名字同上 30000:30秒没有连接上,失效次数增加1

sentinel can-failover 名字同上 yes:是否允许故障转移(slave更改为master),建议只有一台设置为yes,因为监控的sentinel多了之后,配置的yes也多了之后,会导致一台服务器失效后,一起修改。

sentinel parallel-syncs 名字 数量:当master死机时候,指定新的master时,指定一定的数量slave启动连接,防止masterio剧增

sentinel failover-timeout 名字 时间:超过时间没有完成设置,监控失败。

3:开启

./bin/redis-server –help,开启server帮助

开启哨兵模式

./bin/redis-server ./sentinel.conf –sentinel &

4:master死机后,哨兵随机指定新的master,手动配置

每一个redis.conf里面配置slave-priority优先级,数字越小越靠前,也就是越有限指定为master
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐