redis 消息订阅

来源:互联网 发布:秋瑾 知乎 编辑:程序博客网 时间:2024/04/29 23:19

使用办法:

订阅端: Subscribe 频道名称

发布端: publish 频道名称 发布内容

 

客户端例子:

redis 127.0.0.1:6379> subscribe news

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "news"

3) (integer) 1

1) "message"

2) "news"

3) "good good study"

1) "message"

2) "news"

3) "day day up"

 

服务端例子:

redis 127.0.0.1:6379> publish news 'good good study'

(integer) 1

redis 127.0.0.1:6379> publish news 'day day up'

(integer) 1

 

 

 

 

 

 

 


Redis持久化配置

 

Redis的持久化有2种方式   1快照  2是日志

 

Rdb快照的配置选项

 

save 900 1      // 900,1条写入,则产生快照

save 300 1000   // 如果300秒内有1000次写入,则产生快照

save 60 10000  // 如果60秒内有10000次写入,则产生快照

(3个选项都屏蔽,rdb禁用)

 

stop-writes-on-bgsave-error yes  // 后台备份进程出错时,主进程停不停止写入?

rdbcompression yes    // 导出的rdb文件是否压缩

Rdbchecksum   yes //  导入rbd恢复时数据时,要不要检验rdb的完整性

dbfilename dump.rdb  //导出来的rdb文件名

dir ./  //rdb的放置路径

 

 

 

Aof 的配置

appendonly no # 是否打开 aof日志功能

 

appendfsync always   # 1个命令,都立即同步到aof.安全,速度慢

appendfsync everysec # 折衷方案,每秒写1

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

 

 

no-appendfsync-on-rewrite  yes: # 正在导出rdb快照的过程中,要不要停止同步aof

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

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

 

 


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

: 不会,所有的操作缓存在内存的队列里, dump完成后,统一操作.

 

: aof重写是指什么?

: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.

以解决 aof日志过大的问题.

 

: 如果rdb文件,aof文件都存在,优先用谁来恢复数据?

: aof

 

: 2种是否可以同时用?

: 可以,而且推荐这么做

 

: 恢复时rdbaof哪个恢复的快

: rdb,因为其是数据的内存映射,直接载入到内存,aof是命令,需要逐条执行
redis 服务器端命令

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

1) "1375270361"

2) "504511"

 

redis 127.0.0.1:6380> dbsize  // 当前数据库的key的数量

(integer) 2

redis 127.0.0.1:6380> select 2

OK

redis 127.0.0.1:6380[2]> dbsize

(integer) 0

redis 127.0.0.1:6380[2]>

 

 

BGREWRITEAOF 后台进程重写AOF

BGSAVE       后台保存rdb快照

SAVE         保存rdb快照

LASTSAVE     上次保存时间

 

Slaveof master-Host port  , 把当前实例设为masterslave

 

Flushall  清空所有库所有键

Flushdb  清空当前库所有键

Showdown [save/nosave]

 

: 如果不小心运行了flushall, 立即shutdown nosave ,关闭服务器

然后 手工编辑aof文件,去掉文件中的“flushall ”相关行,然后开启服务器,就可以导入回原来数据.

 

如果,flushall之后,系统恰好bgrewriteaof,那么aof就清空了,数据丢失.

 

Slowlog 显示慢查询

:多慢才叫慢?

: slowlog-log-slower-than 10000 ,来指定,(单位是微秒)

 

服务器储存多少条慢查询的记录?

:  slowlog-max-len 128 ,来做限制

 

Info [Replication/CPU/Memory..]

查看redis服务器的信息

 

Config get 配置项  

Config set 配置项 值 (特殊的选项,不允许用此命令设置,slave-of,需要用单独的slaveof命令来设置)


Redis运维时需要注意的参数

1: 内存

# Memory

used_memory:859192 数据结构的空间

used_memory_rss:7634944 实占空间

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

2: 主从复制

# Replication

role:slave

master_host:192.168.1.128

master_port:6379

master_link_status:up

 

3:持久化

# Persistence

rdb_changes_since_last_save:0

rdb_last_save_time:1375224063

 

4: fork耗时

#Status

latest_fork_usec:936  上次导出rdb快照,持久化花费微秒

注意: 如果某实例有10G内容,导出需要2分钟,

每分钟写入10000,导致不断的rdb导出,磁盘始处于高IO状态.

 

 

5: 慢日志

config get/set slowlog-log-slower-than

CONFIG get/SET slowlog-max-len

slowlog get N 获取慢日志


运行时更改master-slave

修改一台slave(设为A)new master

1) 命令该服务不做其他redis服务的slave

   命令: slaveof no one

2) 修改其readonlyyes

 

其他的slave再指向new master A

1) 命令该服务为new master Aslave

   命令格式 slaveof IP port
监控工具 sentinel

 

 

Sentinel不断与master通信,获取masterslave信息.

监听masterslave的状态

如果某slave失效,直接通知master去除该slave.

 

如果master失效,,是按照slave优先级(可配置), 选取1slavenew master

,把其他slave--> new master

 

疑问: sentinelmaster通信,如果某次因为master IO操作频繁,导致超时,

此时,认为master失效,很武断.

解决: sentnel允许多个实例看守1master,N(N可设置)sentinel都认为master失效,才正式失效.

 

Sentinel选项配置

port 26379 # 端口

sentinel monitor mymaster 127.0.0.1 6379 2 ,

给主机起的名字(不重即可),

2sentinel实例都认为master失效时,正式失效

 

sentinel down-after-milliseconds mymaster 30000  多少毫秒后连接不到master认为断开

sentinel can-failover mymaster yes #是否允许sentinel修改slave->master.如为no,则只能监控,无权修改./

sentinel parallel-syncs mymaster 1 , 一次性修改几个slave指向新的new master.

sentinel client-reconfig-script mymaster /var/redis/reconfig.sh ,# 在重新配置new master,new slave过程,可以触发的脚本

0 0