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挂起。