设为首页 收藏本站
查看: 610|回复: 0

[经验分享] redis的配置文件

[复制链接]
发表于 2018-11-2 08:30:56 | 显示全部楼层 |阅读模式
  1. 备释
  当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写):
  1k =< 1000 bytes
  1kb =< 1024 bytes
  1m =< 1000000 bytes
  1mb =< 1024*1024 bytes
  1g =< 1000000000 bytes
  1gb =< 1024*1024*1024 bytes
  2. daemonize no
  默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
  3. pidfile /var/run/redis.pid
  当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis
  服务时,需要指定不同的pid文件和端口。
  4. port 6379
  指定redis运行的端口
  5. bind 127.0.0.1
  翻看网上的文章,此处多翻译为“指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,在
  生产环境中最好设置该项”。这种解释会totally搞糊涂初学者,甚至是错误的。该处的英文原文为
  # If you want you can bind a single interface, if the bind option is not
  # specified all the interfaces will listen for incoming connections.
  # bind 127.0.0.1
  该处说明bind的是interface,也就是说是网络接口。服务器可以有一个网络接口(通俗的说网卡),或者多个。打个比方
  说机器上有两个网卡,分别为192.168.205.5 和192.168.205.6,如果bind 192.168.205.5,那么只有该网卡地址接受外
  部请求,如果不绑定,则两个网卡口都接受请求。
  6. timeout 0
  设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么server端关闭该连接。0为关
  闭该设置。
  7. tcp-keepalive 0
  指定TCP连接是否为长连接,”侦探”信号由server端维护,长连接将会额外的增加server端的开支
  默认为0.表示禁用,非0值表示开启”长连接” ;”侦探”信号的发送间隔将有linux系统决定
  在多次”侦探”后,如果对等端仍不回复,将会关闭连接,否则连接将会被保持开启.
  client端socket也可以通过配置keepalive选项,开启”长连接”.
  8. loglevel notice
  server日志级别,合法值:debug,verbose,notice,warning 默认为notice
  debug适合开发环境,客户端操作信息都会输出日志
  verbose输出一些相对有用的信息,目前效果不明
  notice适合生产环境
  warning异常信息
  9. logfile
  指定Redis日志记录方式,默认值为stdout,表示打印在命令行终端的窗口上,也可设为/dev/null屏蔽日志
  10. databases 16
  设定redis所允许的最大”db簇”(可以理解为数据库)的个数,默认为16个簇.
  客户端可以通过”select”指令指定需要使用的”db簇”索引号,默认为0.
  redis的顶层数据结构中,所有K-V都潜在的包括了”db簇”索引号,任何一个key都将隶属于一个”db”.
  任何对数据的检索,只会覆盖指定的”db”;例如数据被插入到”db 10″中,那么在”db 1″中去get,将会返回null.
  对数据归类到不同的db簇中,可以帮助我们实现一些特定的需求,比如根据不同客户端连接,来指定不同的db索引号.
  11. maxclients 128
  限制同时连接的客户数量。
  当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到 error 信息
  设置为2时候的会显示一下错误
  Error: Connection reset by peer
  12. maxmemory
  设置redis能够使用的最大内存。
  达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key(设置过expire信息的key)
  在删除时,按照过期时间进行删除,最早将要被过期的key将最先被删除
  如果已到期或即将到期的key删光,仍进行set操作,那么将返回错误
  此时redis将不再接收写请求,只接收get请求。
  maxmemory的设置比较适合于把redis当作于类似memcached 的缓存来使用
  13. maxmemory-policy
  当内存达到最大值的时候Redis会选择删除哪些数据?有五种方式可供选择
  ##
  volatile-lru -> 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used )
  # allkeys-lru -> 利用LRU算法移除任何key
  # volatile-random -> 移除设置过过期时间的随机key
  # allkeys->random -> remove a random key, any key
  # volatile-ttl -> 移除即将过期的key(minor TTL)
  # noeviction -> 不移除任何可以,只是返回一个写错误
  ##
  注意:对于上面的策略,如果没有合适的key可以移除,当写的时候Redis会返回一个错误
  ##
  写命令包括: set setnx setex append
  # incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
  # sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
  # zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
  # getset mset msetnx exec sort
  ##
  默认是:
  # maxmemory-policy volatile-lru
  14. syslog-enabled no
  'syslog-enabled'设置为yes会把日志输出到系统日志,默认是no
  15. syslog-ident redis
  指定syslog的标示符,如果'syslog-enabled'是no,则这个选项无效。
  16. syslog-facility local0
  指定syslog 设备(facility), 必须是USER或者LOCAL0到LOCAL7.
  SLOWLOG
  1. slowlog-log-slower-than 10000
  Redis slow log用来记录超过指定执行时间的查询。执行时间不包括I/O计算比如连接客户端,返回结果等,只是命令执
  行时间
  可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(毫秒),另
  一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除
  负数则关闭slow log,0则会导致每个命令都被记录
  2. slowlog-max-len
  对日志长度没有限制,只是要注意它会消耗内存
  可以通过 SLOWLOG RESET 回收被慢日志消耗的内存
  Snapshotting
  1. save
  save ,用来描述”在多少秒期间至少多少个变更操作”触发snapshot
  snapshot最终将生成新的dump.rdb文件
  save “”用来禁用snapshot功能
  例如save 300 1表示5分钟内至少一个key变更,触发snapshot
  2. rdbcompression yes
  是否启用rdb文件压缩手段,默认为yes.
  压缩可能需要额外的cpu开支,不过这能够有效的减小rdb文件的大小,有利于存储/备份/传输/数据恢复.
  3. rdbchecksum yes
  是否对rdb文件使用CRC64校验和,默认为”yes”,那么每个rdb文件内容的末尾都会追加CRC校验和.
  对于其他第三方校验工具,可以很方便的检测文件的完整性
  4. dbfilename dump.rdb
  镜像备份文件的文件名
  # The filename where to dump the DB
  dbfilename dump.rdb
  实际存储文件名:
  www@iZ23s8agtagZ:/var/lib/redis$ ls
  dump.rdb
  5. dir ./
  指定rdb/AOF文件的目录位置,只能为文件夹不能为文件
  # Note that you must specify a directory here, not a file name.
  dir /var/lib/redis
  文件位置以及大小:
  www@iZ23s8agtagZ:/var/lib/redis$ ls -s
  total 11320
  11320 dump.rd
  AOF
  1. appendonly no
  #默认情况下,Redis会异步的把数据保存到硬盘。如果你的应用场景允许因为系统崩溃等极端情况而导致最新数据丢失#
  的话,那这种做法已经很ok了。否则你应该打开‘append only’模式,开启这种模式后,Redis会在#appendonly.aof
  文件中添加每一个写操作,这个文件会在Redis启动时被读取来在内存中重新构建数据集。
  #注意:如果你需要,你可以同时开启‘append only’模式和异步dumps模式(你需要注释掉上面的‘save’表达式
  来禁#止dumps),这种情况下,Redis重建数据集时会优先使用appendonly.aof而忽略dump.rdb
  2. appendfilename appendonly.aof
  AOF文件名称 (默认: &quot;appendonly.aof&quot;)
  3. appendfsync everysec
  # 调用fsync()函数通知操作系统立刻向硬盘写数据
  # Redis支持三种同步AOF文件的策略:
  #
  # no:不fsync, 只是通知OS可以flush数据了,具体是否flush取决于OS.性能更好.
  # always: 每次写入append only 日志文件后都会fsync . 性能差,但很安全.
  # everysec: 没间隔1秒进行一次fsync. 折中.
  #
  # 默认是&quot;everysec&quot;,按照速度和安全折中这是最好的。
  # 如果想让Redis能更高效的运行,你也可以设置为&quot;no&quot;,让操作系统决定什么时候去执行
  # 或者相反想让数据更安全你也可以设置为&quot;always&quot;
  #
  # 如果不确定就用 &quot;everysec&quot;.
  4. no-appendfsync-on-rewrite no
  # AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作
  # 在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理
  #
  # 为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite
  5. auto-aof-rewrite-percentage 100
  auto-aof-rewrite-min-size 64mb
  # append only 文件的自动重写
  # 当AOF 日志文件即将增长到指定百分比时,Redis可以通过调用BGREWRITEAOF 来自动重写append only文件。
  # 它是这么干的:Redis会记住最近一次重写后的AOF 文件size。然后它会把这个size与当前size进行比较,如果当前size
  比指定的百分比大,就会触发重写。同样,你需要指定AOF文件被重写的最小size,这对避免虽然百分比达到了, 但是实
  际上文件size还是很小(这种情况没有必要重写)却导致AOF文件重写的情况很有用。
  # auto-aof-rewrite-percentage 设置为 0 可以关闭AOF重写功能
  高级配置
  1. hash-max-zipmap-entries 512
  hash-max-zipmap-value 64
  redis 2.0后引入了 hash 数据结构。
  当hash中包含超过指定元素个数并且最大的元素没有超过临界时,
  # hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
  # Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,
  # 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结
  构,对应的value redisObject的encoding为zipmap,
  # 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
  2. activerehashing yes
  是否重置Hash表
  设置成yes后redis将每100毫秒使用1毫秒CPU时间来对redis的hash表重新hash,可降低内存的使用
  当使用场景有较为严格的实时性需求,不能接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。
  如果没有这么严格的实时性要求,可以设置为 yes,以便能够尽可能快的释放内存
  3. list-max-ziplist-entries 512
  list-max-ziplist-value 64
  list 数据类型多少节点以下会采用去指针的紧凑存储格式。
  list 数据类型节点值大小小于多少字节会采用紧凑存储格式。
  4. set-max-intset-entries 512
  set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。
  5. zset-max-ziplist-entries 128
  zset-max-ziplist-value 64
  zsort 数据类型多少节点以下会采用去指针的紧凑存储格式。
  zsort 数据类型节点值大小小于多少字节会采用紧凑存储格式。
  Replication(复制)
  1. slaveof
  将当前server做为slave,并为其指定master信息.
  slaveof   当本机为从服务时,设置主服务的IP及端口
  # slaveof  
  slaveof 11.41.8.209 63789
  2. masterauth
  以认证的方式连接到master。 如果master中使用了”密码保护”,slave必须交付正确的授权密码,才能连接成功。
  “requirepass”配置项指定了当前server的密码。
  此配置项中值需要和master机器的”requirepass”保持一致
  masterauth tinywanredis
  3. slave-serve-stale-data yes
  如果当前server是slave,那么当slave与master失去通讯时,是否继续为客户端提供服务,”yes”表示继续,”no”表示终止.
  在”yes”情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期.
  在”no”情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知”error”,但 INFO 和SLAVEOF
  命令除外。
  # When a slave loses its connection with the master, or when the replication
  # is still in progress, the slave can act in two different ways:slave-serve-stale-data yes
  VM(虚拟内存)
  1. vm-enabled no
  是否开启虚拟内存支持。
  redis 是一个内存数据库,当内存满时,无法接收新的写请求,所以在redis2.0后,提供了虚拟内存的支持
  但需要注意的,redis 所有的key都会放在内存中,在内存不够时,只把value 值放入交换区
  虽使用虚拟内存,但性能基本不受影响,需要注意的是要把vm-max-memory设置到足够来放下所有的key
  2. vm-swap-file /tmp/redis.swap
  设置虚拟内存的交换文件路径,不可多个Redis实例共享
  3. vm-max-memory 0
  设置开启虚拟内存后,redis将使用的最大物理内存大小。
  默认为0,redis将把他所有能放到交换文件的都放到交换文件中,以尽量少的使用物理内存
  即当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘
  在生产环境下,需要根据实际情况设置该值,最好不要使用默认的 0
  4. vm-page-size 32
  设置虚拟内存的页大小
  如果 value 值比较大,如要在 value 中放置博客、新闻之类的所有文章内容,就设大一点
  5. vm-pages 134217728
  设置交换文件的总的 page 数量
  注意page table信息是放在物理内存中,每8个page 就会占据RAM中的 1 个 byte
  总的虚拟内存大小 = vm-page-size * vm-pages
  6. vm-max-threads 4
  设置 VM IO 同时使用的线程数量。
  Security(安全)
  1. requirepass foobared
  当前server的授权密码
  任何客户端或者slave与此server交互前,需要提交密码,其他server的masterauth配置和此参数值保持一致
  密码应该足够复杂(64字节)
  需要客户端在执行任何命令之前指定 AUTH
  # Warning: since Redis is pretty fast an outside user can try up to
  # 150k passwords per second against a good box. This means that you should
  # use a very strong password otherwise it will be very easy to break.requirepass tinywanredis
  2. rename-command
  命令重命名.
  例如: rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
  同样可以通过把一个命令重命名为空串来彻底kill掉这个命令,比如:
  rename-command CONFIG &quot;&quot;
  复制代码
  121.41.88.209:63789[1]> config get *max-*-entries*
  1) &quot;hash-max-ziplist-entries&quot;
  2) &quot;512&quot;
  3) &quot;list-max-ziplist-entries&quot;
  4) &quot;512&quot;
  5) &quot;set-max-intset-entries&quot;
  6) &quot;512&quot;
  7) &quot;zset-max-ziplist-entries&quot;
  8) &quot;128&quot;
  复制代码
  修改为:
  # Example:
  rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
  重新获取:
  config get *max-*-entries*
  (error) ERR unknown command 'config'
  Redis官方VM使用建议
  一般情况下不建议使用虚拟内存,如果有特殊需求,请考虑以下几种情况:
  当key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大
  当key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,如可将key,value组合成一个新的value
  最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件
  vm-max-threads参数可设置访问swap文件的线程数,最好不要超过机器的核数;设置为0则所有对swap文件的操
  作都是串行的,可能会造成比较长时间的延迟,但是对数据完整性有很好的保证
  redis数据存储
  redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
  save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。可多个条件配合,默认配置了三个条件。
  appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
  appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629607-1-1.html 上篇帖子: Redis二进制安装 下篇帖子: SuSE11环境下Redis+Keepalived实现高可用技术
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表