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

时间: 2024-10-15 07:46:13

redis集群的学习(一)的相关文章

redis集群学习

1.application.properties配置文件添加配置: 2.从配置中获取参数值: 3.创建jedisCluster连接redis集群: 5.注入jedisCluster 原文地址:https://www.cnblogs.com/Mr-xt/p/9914795.html

redis集群实现(一)集群架构与初始化

redis是一个高可用.高性能.高可扩展性的基于内存也支持持久化存储的kv存储数据库,redis相比较于之前的kv存储memcached而言,不但支持的value类型大大增加,并且还支持数据的持久化,弥补了memcached的不能持久化的缺点,但是在3.0之前的redis并不支持集群功能,这也是redis在3.0之前不能被大量部署的一个原因,但是由于3.0以后的redis支持了集群功能,redis就开始大量的替代之前的memcached,今天我从源代码层次学习下redis是怎么实现集群功能的.

架构设计:系统存储(18)——Redis集群方案:高性能

1.概述 通过上一篇文章(<架构设计:系统存储(17)--Redis集群方案:高可用>)的内容,Redis主从复制的基本功能和进行Redis高可用集群监控的Sentinel基本功能基本呈现给了读者.虽然本人并不清楚上一篇根据笔者实际工作经验所撰写的文章有什么重大问题,导致那么多朋友集体点踩而且截止目前又没有任何人愿意为笔者指出这些问题,但是这不会影响笔者继续学习.总结技术知识的热情.从这篇文章开始我们一起来讨论Redis中两种高性能集群方案,并且在讨论过程中将上一篇文章介绍的高可用集群方案结合

Redis集群方案及实现 - yfk的专栏 - 博客频道 - CSDN.NET

[公告]博客系统优化升级        Unity3D学习,离VR开发还有一步        博乐招募开始啦        虚拟现实,一探究竟 Redis集群方案及实现 2014-08-30 17:20     43035人阅读     评论(15)     收藏     举报 本文章已收录于: .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px #ededed; } .embody_b{ margin

Net分布式系统之五:C#使用Redis集群缓存

本文介绍系统缓存组件,采用NOSQL之Redis作为系统缓存层. 一.背景 系统考虑到高并发的使用场景.对于并发提交场景,通过上一章节介绍的RabbitMQ组件解决.对于系统高并发查询,为了提供性能减少数据库压力,我们加入缓存机制,可以不同层次加入缓存支持,本文主要介绍应用服务层和数据层之间加入缓存机制提升性能.业界缓存组件有Redis.Memcached.MemoryCache.本系统采用Redis缓存组件,有些系统将Redis当作MQ使用,此场景本系统用RabbitMQ,Redis主要用于系

在windows下面配置redis集群遇到的一些坑

最近工作不忙,就决定学习一下redis.因为一直在windows下工作,不会linux,没办法就选择在windows下配置redis. windows下配置redis集群的文章有很多,比如:http://www.cnblogs.com/linjisong/p/6081312.html, 我这里主要说一下我遇到的一些坑. 1.配置文件 安装完redis服务以后,会有两个配置文件,如下图: 按官方解释,一个是命令提示符下启动redis使用的,一个是服务专用的, 但是我有一台机子,改了服务器的配置文件

Redis集群的操作

1.原始集群 1.1    启动Redis集群 [[email protected] ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis.conf [[email protected] ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis.conf [[email protected] ~]# /usr/lo

Redis集群环境的部署记录

Redis Cluster终于出了Stable,这让人很是激动,等Stable很久了,所以还是先玩玩. 一. 集群简单概念. Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为. Redis 集群通过分区(partition)来提供

Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义

Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义 学习了:https://www.cnblogs.com/lori/p/5825691.html 哨兵机制: 原文地址:https://www.cnblogs.com/stono/p/9003930.html