`
sskhnje
  • 浏览: 15645 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
文章分类
社区版块
存档分类
最新评论

redis笔记

 
阅读更多

Security

 

redis期望是在一个安全的网络环境中,不提供过多的ACL。

可以设定只绑定来自某几个IP的客户端,在redis.config中配置:

bind 127.0.0.1

也可以在redis.config中设置一个密码auth,客户端需要密码才能连上。在redis.config中配置

requirepass "hello world"

 

密码是明文的,如果你还想更安全些,那就用SSL吧。

 

也可以禁用哪些命令,只需要rename它们到一个猜不到的名字即可。

 

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

 如果你要完全禁用它,就把它remame为空的字符串

rename-command CONFIG ""

 

 

 

 

 

 

 

 

 

 

Replication

 

实现replication,只需要在slave的redis.config文件中加上一行:

slaveof 192.168.1.1 6379

后面的IP和端口指向master。

slave也可以接自己的slave,master和slave的结构可以像树一下。

 

slave是否第一次连上master都没关系,

是第1次的话,master会先传database file给它,slave会保存到硬盘,然后再把文件读入内存。

之后,master再把缓存的那些命令(database file更新之后接收到的命令)发给slave,slave执行后就与master一致了。

以上用的是 SYNC命令。

 

如果是重连 ,默认也会跟第1次连一样,重走整个过程。即也执行SYNC命令。

但从2.8版本起,也支持部分同步了。执行的是PSYNC命令。

 

 

2.6起,slave默认都是只读的,即拒绝写操作。

在redis.config中可以配置:

slave-read-only true

 但不表示slave就可以暴露在不安全的环境中了,因为虽然不可写,但还是可以执行管理命令,诸如DEBUG、CONFIG等命令。所以为了安全起见,可以禁用这些命令(改名)。

 

如果master要验证密码,则slave要在redis.config中加上密码:

masterauth <password>

 

从2.8开始,支持以下特性:

有至少N个slave连上时,master才接受写操作。

 

slave每秒都会ping master一次,可以设置M秒内ping过master,就表示它连着。

在redis.config中设置:

min-slaves-to-write <number of slaves>
min-slaves-max-lag <number of seconds>

 

 

 

Persistence

redis存储有两种方式:RDB( RDB 文件)和AOF(appendOnly file)。

RDB是每隔一段时间就把整个内存的数据的快照dump到文件。

AOF是每隔一段时间就把命令列表append到aof文件里。

 

RDB是全部数据生成一个快照文件,简单,还原快,但频次不能太大,免得影响性能。遇到突发情况,会丢掉最近的数据。

AOF是一个命令一个命令的append到aof文件里,频次可以很大,默认是1秒1次,遇到突发情况,丢失的数据少,但还原较慢。

 

可以两个结合起来用。

 

要开启RDB,在redis.config里配置:

 

save 60 1000
 after 60 sec if at least 1000 keys changed

 

表示60秒后,如果有1000个key更新了,就把快照写到文件。

 

如果要禁用RDB,在redis.config里配置:

 

save ""
 
RDB是通过fork出一个子线程来做这事的。
 

 

 

要开启AOF,

 

appendonly yes
 在禁用AOF,

 

 

appendonly no
AOF可以是每执行一个写命令就同步一次(append到aof),也可以每秒同步一次,或者不同步。默认是每秒同步一次,兼顾了性能和减少数据丢失的情况。 
# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no
 
AOF也是通过Fork子线程来做这事的。

 

随之着执行的命令越来越多,aof也被append得越来越大,如果一个key被set 100次,就存100条语句在aof里面,显然还原时,只执行最后一个命令就行了,其他99条是多余的。

要做这样的优化和瘦身,就要用到BGREWITEAOF。

 

 

BGREWITEAOF的过程是:

1.子线程先复制目前的aof一份,然后在一边慢慢优化。

2.与此同时,主线程仍然向外提供服务,接收新的命令并append到目前的aof,并将命令缓存。

3.子线程优化完后,会向主线程发一个信号,然后主线程再把缓存里的命令也append到新aof文件里。

4.完后再以新aof替旧aof。

 

因为新命令一直有append到目前的aof文件,所以就算rewrite失败,数据也不会丢失。

 

 

如果开启了AOF,在append 命令到aof文件的过程中突然停电,aof文件损坏,可按以下步骤恢复:

备份下aof,存到其他电脑上;

执行命令:

$ redis-check-aof --fix

使用修复好的aof文件,重启redis。

 

 

redis已经在运行,并且使用RDB,可转成AOF,步骤如下:

1.备份最新的dump.rdb到安全的地方;

2.执行:

redis-cli config set appendonly yes
redis-cli config set save ""

在执行第1个命令时,redis会阻塞以生成一个最新的dump,然后生成一个aof,接收命令并append。

第2个命令不执行也行,不执行就同时使用RDB和AOF了。

 

 

 

 

 slave priority

设置如果master停止服务后,slave提升为master的优先级。

为整数,数值越小,优先级越高。

如3个slave, 优先级分别是 priority 10, 100, 25,最后优先选为master的是10。

如果设为0,表示不能选作master。

# By default the priority is 100.
slave-priority 100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics