zoukankan      html  css  js  c++  java
  • redis配置注意事项(适合于较大配置)

      根据官方的建议,redis-server的相关配置建议如下,但是有些并不合适,LZ会进行说明(如果redis使用的内存还不到1GB,或者大量qps还不到1000的应用,这已经淘汰了99%的应用,很多配置基本上就无所谓了,基本上没这么大影响,保证高可用即可,不会有性能问题的;):

    1、vm.overcommit_memory = 1。实际中最好让redis主节点仅使用50-60%的内存,剩余的用于执行bgsave和创建写命令的缓冲区,保证最大可能的sla。

    2、禁用linux内核特性transparent huge pages,echo never > /sys/kernel/mm/transparent_hugepage/enabled,oracle也如此要求,TPH和传统的大页在机制上有些不同,参见http://blog.itpub.net/26736162/viewspace-2214374/。

    3、避免使用swap或禁用

    4、设置maxmemory,限制redis使用的内存数量,而非自动,否则发生交换就奇慢无比了;

    5、如果是ssd的话,复制模式下建议master节点启用持久化选项(当超过数GB时,保存快照会对前端影响较大,如果能够容忍极端情况下小部分更新丢失,应在slave节点机进行,而非master节点,主要可能是国外数据没国内这么大);

    6、一般应使用显示的redis.conf,而非使用内置的配置,可在启动时通过命令行指定/etc/redis.conf;

    7、应显示设置rdb、aof日志文件目录及文件名,logfile参数;默认为工作目录:

    # The filename where to dump the DB
    dbfilename dump.rdb   # rdb文件名
    
    # The working directory.
    #
    # The DB will be written inside this directory, with the filename specified
    # above using the 'dbfilename' configuration directive.
    #
    # The Append Only File will also be created inside this directory.
    #
    # Note that you must specify a directory here, not a file name.    # rdb存储目录
    dir ./
    [root@XXX redis-3.2.12]# ll | grep dump
    -rw-r--r--  1 root root  19274 Aug  8 20:12 dump_16379.rdb
    -rw-r--r--  1 root root   1259 Aug  8 22:23 dump_46379.rdb
    -rw-r--r--  1 root root 446620 Nov 23 02:05 dump.rdb
    ############################## APPEND ONLY MODE ###############################
    
    # By default Redis asynchronously dumps the dataset on disk. This mode is
    # good enough in many applications, but an issue with the Redis process or
    # a power outage may result into a few minutes of writes lost (depending on
    # the configured save points).
    #
    # The Append Only File is an alternative persistence mode that provides
    # much better durability. For instance using the default data fsync policy
    # (see later in the config file) Redis can lose just one second of writes in a
    # dramatic event like a server power outage, or a single write if something
    # wrong with the Redis process itself happens, but the operating system is
    # still running correctly.
    #
    # AOF and RDB persistence can be enabled at the same time without problems.
    # If the AOF is enabled on startup Redis will load the AOF, that is the file
    # with the better durability guarantees.
    #
    # Please check http://redis.io/topics/persistence for more information.
    
    appendonly yes
    
    # The name of the append only file (default: "appendonly.aof")
    
    appendfilename "appendonly.aof"
    
    # The fsync() call tells the Operating System to actually write data on disk
    # instead of waiting for more data in the output buffer. Some OS will really flush
    # data on disk, some other OS will just try to do it ASAP.
    #
    # Redis supports three different modes:
    #
    # no: don't fsync, just let the OS flush the data when it wants. Faster.
    # always: fsync after every write to the append only log. Slow, Safest.
    # everysec: fsync only one time every second. Compromise.
    #
    # The default is "everysec", as that's usually the right compromise between
    # speed and data safety. It's up to you to understand if you can relax this to
    # "no" that will let the operating system flush the output buffer when
    # it wants, for better performances (but if you can live with the idea of
    # some data loss consider the default persistence mode that's snapshotting),
    # or on the contrary, use "always" that's very slow but a bit safer than
    # everysec.
    #
    # More details please check the following article:
    # http://antirez.com/post/redis-persistence-demystified.html
    #
    # If unsure, use "everysec".
    
    # appendfsync always   AOF默认每秒写一次,跟mysql的innodb redo刷新机制是一样的
    appendfsync everysec
    # appendfsync no

    8、各个版本的详细配置可参考:

    9、重要的是:

    1、单进程架构,这意味着单个key的value不能过大,例如几兆,这会严重影响TPS,具体拆分可以参考:https://blog.csdn.net/beyond59241/article/details/78889867/
    2、支持多database,不过最好使用多个instance的方式,有些客户端可能不支持多instance,同时性能也比较难以排查
    3、不支持namespace的概念,所以最好使用前提前规划,比如namespace:key_name的方式,避免日后混乱
    4、vm.swappiness=0 在os swap期间,进程会block直到完成,所以应该尽量避免

    10、客户端缓冲大小配置,尤其是是在行情接收场景中。https://blog.csdn.net/luyaoying001/article/details/80264347

    11、其它实践可以参考:https://www.cnblogs.com/ajianbeyourself/p/4472788.html

    12、避免快照所在盘磁盘空间满,否则容易出现redis挂起。

  • 相关阅读:
    Python Generators(生成器)--yield
    [带你飞]一小时带你学会Python
    [Effective C++ --032]确定你的public继承塑模出is-a
    [Effective C++ --031]将文件间的编译依存关系降至最低
    [Effective C++ --030]透彻了解inlining的里里外外
    [Effective C++ --029]为“异常安全”而努力是值得的
    [Effective C++ --028]避免返回handles指向对象内部成分
    unity 获取本机ip地址
    unity 局域网游戏开发知识点
    unity 中函数调用的顺序
  • 原文地址:https://www.cnblogs.com/zhjh256/p/5906706.html
Copyright © 2011-2022 走看看