redis集群的学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis集群的学习相关的知识,希望对你有一定的参考价值。
redis配置文件详解
redis默认是不作为守护进程来运行的,你可以把这个设置为yes,让它作为守护进程来运行
注意,当作为守护进程的时候,redis 会把进程ID 写到/var/run/redis.pid
daemonize no
# 当以守护进程方式运行的时候,redis会把进程ID 默认写到/var/run/redis.pid 可以在这里修改路径
pidfile /var/run/redis.pid
接受连接的特定端口.默认是 6379
如果端口设置为0 redis就不会监听TCP 套接字
port 6379
如果你想的话,你可以绑定单一接口,如果这里没单独设置,那么所有接口的连接都会被监听
#bind 127.0.0.1
# 指定用来监听时连接的 unix 套接字的路径,你可以绑定单一接口,如果不指定就不会通过unix套接字监听
unixsocket /tmp/redis.sock
unixsocketperm 755
#一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭)
timeout 0
#设置服务器调试等级
#可能值:
#debug (很多信息,对开发/测试有用)
#verbose(很多精简的有用信息,但是不像debug 等级那么多)
#notice (适量的意思,基本上是生产环境中需要的程度)
#warning (只有狠重要/严重的信息会记录下来)
#指定日志文件名,也可以使用stdout 来强制redis把日志信息写到标准输出上
#注意:如果redis以守护进程方式运行,而你设置日志显示的标准输出的话,那么日志会发送到 /dev/null
logfile stdout (可以写一个日志文件的路径)
#要使用系统日志记录器很简单,只要设置 syslog-enabled 为yes 就可以了
#然后根据需要设置其他一些 syslog 参数就可以了
#syslog-enabled no
#指明 syslog身份
syslog ident redis
指明syslog 的设备,必须是一个用户或者是 local0-local7之一
#syslog-fadlity local 0
database 16
把数据库存到磁盘上
save <seconds> <changes>
会在指定秒数和数据变化次数之后把数据库写到磁盘上
下面的列子将会进行把数据库写入磁盘的操作
#900 秒 (15分钟) 之后,且至少1次变更
#300秒 (5分支) 之后, 且至少10次变更
# 60秒之后,且至少 10000次变更
#注意: 要想不写磁盘的话就把所有 save 设置 注释就行了
save 900 1
save 300 10
save 60 10000
只需要一个参数即可
# 当导出到 .rdb 数据库时 是否用 LZF 压缩字符串对象
#默认设置为yes,所以几乎总是生效的
#如果你想节省CPU 的话你可以把这个设置为 no,但是如果你有可压缩的key的话,那数据文件夹会更大了
rdbcompression yes
#数据库的文件名
dbfilename dump.rdb
#工作目录
#数据库会写到这个目录下,文件名叫是上面的 dbfilename 的值
#累加文件也放在这里
#注意你这里指定的必须是目录,不是文件名
dir
##############################
# 主从同步 通过slaveof 配置来实现redis实例的备份
#注意 这里是本地从远端复制数据 ,也就是说 本地可以有不同的数据库文件 ,绑定不同的IP ,监听不同的IP 监听不同的端口
#
# slaveof <masterip><masterport>
#如果master 设置了密码 (通过下面的"requirepass" 选项来配置),那么slave 在开始同步之前必须进行身份验证,否则它的同步请求会被拒绝
#
#masterauth <master-password>
#当一个 slave失去和 master的连接,或者同步正在进行中,slave的行为有两种可能
1)如果 slave-serve-stale-data设置为yes (默认值),slave 会继续响应客户端请求,可能是正常的数据,
也可能是还没获得值的空数据
2) 如果slave-server-stale-data设置为no,slave 会回复正在从 master同步 SYNC with master in process)
来处理各种请求,除了info和slaveof命令
#
slave-sever-stale-data yes
#下面的选项设置了大块数据I/O 向master请求数据和ping响应的过期时间
#默认值 60秒
#
#一个很重要的事情:确保这个值比 repl-ping-slave-period 大,否则master 和slave之间的传输过期时间比预想的要短
#repl-timeout 60
#要求客户端在处理任何命令时都要验证身份和密码
#警告:因为redis太快了,所以居心不良的人可以每秒尝试150k的密码来试图破解
requirepass redispassword 密码
# 命令重命名
#在共享环境,可以为危险的命令改变名字.比如,你可以为config改个其他不太容易猜到的名字,这样你自己仍然可以使用,而别人却没法做坏事了
#列如
rename-command CONFIG "你自己想命名的名字"
#甚至也可以通过给命令赋值 一个空字符串来完全禁用这条命令
#
# rename-command CONFIG ""
#############限制##########################
#设置最多同时连接客户的数量
#默认没有限制,这个关系到redis进程能够打开的文件描述符数量
#特殊值 0 表示没有限制
#一旦达到这个限制,redis会关闭所有新连接并发送错误 达到最大用户数上限
#maxclients 128
#不要用比设置的上限更多的内存,一旦内存使用达到上限,redis会根据选定的回收策略
参见(maxmemory-policy) 删除key
#如果 因为删除策略问题 redis无法删除key,或者策略设置为noeviction redis会回复需要更多内存的错误信息给命令
例如:set LPUSH 等等,但是会继续合理响应只读命令:比如 get
#在使用redis作为LRU 缓存 ,或者为实例设置了硬性内存限制的时候,(使用noeviction 策略)的时候,这个选项还是蛮有用的)
#警告:当一推slave连上达到内存上限的实例的时候,响应slave需要的输出缓存所需内存不计算在使用内存当中
#这样当请求 一个删除掉的key的时候就不会触发网格问题,重新同步的事件,然后slave就会收到一堆删除指令,直到数据库空了为止
简而言之,如果你用slave 连上一个master的话,那建议你把master内存限制设小点儿,确保有足够的内存用做输出缓存
maxmemory <bytes>
内存策略,如果内存限制了,redis如何删除key,你可以在下面5个里面选
#volatile-lru - 根据lru算法生成 的过期时间来删除
#allkeys-lru - 根据lru算法删除任何key
#volatile-random -根据过期设置来随机删除Key
#allkeys--random -无差别随机删
#volatile-ttl -根据最近过期时间来删除
#noeviction - 谁也不删,直接在写操作时返回错误
# 注意:对所有策略来说,如果redis找不到合适的可以删除的key都会在写操作时返回一个错误
默认值如下
maxmemory-policy volatile-lru
# 默认情况下,redis是异步的把数据导出到磁盘上,这种情况下,当redis挂掉的时候,最新的数据就丢了
#如果不希望丢掉任何一条数据的话就该用纯累加模式,一旦开启这个模式,redis就会把每次写入的数据在接收
后都写入appendonly.aof 文件
#每次启动时redis都会把这个文件的数据读入内存中
#注意,异步导出的数据库文件和纯累加文件可以并存
#如果纯累加模式开启了,那么redis会在启动时载入日志文件而忽略导出的 dump.rdb文件
#重要 查看BGREWRITEAOF 来了解当累加日志文件太大了之后,怎么在后台重新处理这个日志文件
#纯累加文件名字 (默认appendonly.aof)
appendfilename appendonly.aof
# fsync() 请求操作系统马上把 数据写到磁盘上,不要再等了
#有些 操作系统会真的把数据马上刷到磁盘上,有些则要磨蹭一下,但是会尽快去做
#redis支持三种不同的模式
#no:不要立刻写,只有在操作系统需要写的时候再写,比较快
#always:每次写操作都立刻写入到aof文件,慢,但是最安全
# everysec:每秒写一次,折中方案
默认的everysec 通常来说能在速度和数据之间取得比较好的平衡
如果真的理解了这个意味着什么,那么设置no 可以获得更好的性能表现(如果丢数据的话,则只能拿到一个不是很新的快照)
#或者相反的,你选择always 来牺牲速度确保数据安全,完整
如果拿不准 就使用everysec
#appendfsync always
appendfsync everysec
#appendfsync no
#如果你有延迟的问题那就把这个设为yes,否则就保持 no,这是保存持久数据最安全的方式
no-appendfsync-no-rewrite no
#自动重写AOF 文件
如果AOF日志文件大到指定百分比,redis能够通过BGREWRITEAOF 自动重写AOF日志文件
#
#工作原理:redis 记住上次重写时AOF 日志的大小(或者重启后没有写操作的话,那好直接用此时的AOF 文件)
基准尺寸和当前尺寸做比较,如果当前尺寸超过指定比例,就会触发重写操作
你还需要指定被重写日志的最小尺寸,这样避免了达到约定百分比但尺寸仍然很小的情况还要重写
#指定百分比为0 会禁用AOF 自动重写特性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
redis慢查询日志可以记录超过指定时间的查询
例如;连接客户端,发送响应数据等,只计算命令运行的实际时间(这是唯一一种命令运行线程阻塞而无法同时为其他请求服务的场景)
你可以为慢查询日志配置两个参数:一个是超标的时间,单位为微妙
另一个是慢查询日志的长度.当 一个新的命令被写进日志的时候,最老的那个记录会被删掉
下面的时间单位是微妙,所以1000000 就是1秒,注意,负数时间会禁用慢查询日志,而0则会强制记录所有命令
slowlog-log-slower-than 10000
#这个长度没有限制,只要有足够的内存就行,你可以通过 slowlog reset来释放内存
slow-max-len 128
#警告!虚拟内存在redis2.4是反对的
### 非常不鼓励使用虚拟内存
#虚拟内存可以使redis在内存不够的情况下仍然可以将所有数据库序列保存在内存里
为了做到这一点,高频key会调到内存里,而低频key会转到交换文件里,就像操作系统使用内存页一样
#要使用虚拟内存,只要把vm-enabled 设置为yes,并根据需要设置下面三个虚拟内存参数就可以了
vm-enabled no
#vm-enabled yes
#这是交换文件的路径,估计你猜到了,交换文件不能在多个redis实例之间共享,所以确保每个redis实例使用一个独立交换文件
vm-swap-file /tmp/redis.swap
appendonly no
以上是关于redis集群的学习的主要内容,如果未能解决你的问题,请参考以下文章