剛發現的一個Redis不錯的學習平臺: window平臺Redis安裝 作者:lg831229 window平臺Redis安裝 redis windows安裝文件下載地址:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload# ...
剛發現的一個Redis不錯的學習平臺:
http://lib.csdn.net/article/redis/23966?knId=992
window平臺Redis安裝
window平臺Redis安裝redis windows安裝文件下載地址:http://code.google.com/p/servicestack/wiki/RedisWindowsDownload#Download_32bit_Cygwin_builds_for_Windows
我選擇的redis為最新版的安裝文件,見下圖:
Redis安裝文件解壓後,有以下幾個文件。見下圖
redis-server.exe:服務程式
redis-check-dump.exe:本地資料庫檢查
redis-check-aof.exe:更新日誌檢查
redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢 (類似於 Apache 的ab 工具).
在解壓好redis的安裝文件到E:\根目錄後,還需要在redis根目錄增加一個redis的配置文件redis.conf,文件具體內容附件中有,不過這裡我仍然把配置文件的內容貼上來:
Java代碼
- # Redis configuration file example
- # By default Redis does not run as a daemon. Use 'yes' if you need it.
- # Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
- daemonize no
- # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
- # You can specify a custom pid file location here.
- pidfile /var/run/redis.pid
- # Accept connections on the specified port, default is 6379
- port 6379
- # If you want you can bind a single interface, if the bind option is not
- # specified all the interfaces will listen for connections.
- #
- # bind 127.0.0.1
- # Close the connection after a client is idle for N seconds (0 to disable)
- timeout 300
- # Set server verbosity to 'debug'
- # it can be one of:
- # debug (a lot of information, useful for development/testing)
- # notice (moderately verbose, what you want in production probably)
- # warning (only very important / critical messages are logged)
- loglevel debug
- # Specify the log file name. Also 'stdout' can be used to force
- # the demon to log on the standard output. Note that if you use standard
- # output for logging but daemonize, logs will be sent to /dev/null
- logfile stdout
- # Set the number of databases. The default database is DB 0, you can select
- # a different one on a per-connection basis using SELECT <dbid> where
- # dbid is a number between 0 and 'databases'-1
- databases 16
- ################################ SNAPSHOTTING #################################
- #
- # Save the DB on disk:
- #
- # save <seconds> <changes>
- #
- # Will save the DB if both the given number of seconds and the given
- # number of write operations against the DB occurred.
- #
- # In the example below the behaviour will be to save:
- # after 900 sec (15 min) if at least 1 key changed
- # after 300 sec (5 min) if at least 10 keys changed
- # after 60 sec if at least 10000 keys changed
- save 900 1
- save 300 10
- save 60 10000
- # Compress string objects using LZF when dump .rdb databases?
- # For default that's set to 'yes' as it's almost always a win.
- # If you want to save some CPU in the saving child set it to 'no' but
- # the dataset will likely be bigger if you have compressible values or keys.
- rdbcompression yes
- # The filename where to dump the DB
- dbfilename dump.rdb
- # For default save/load DB in/from the working directory
- # Note that you must specify a directory not a file name.
- dir ./
- ################################# REPLICATION #################################
- # Master-Slave replication. Use slaveof to make a Redis instance a copy of
- # another Redis server. Note that the configuration is local to the slave
- # so for example it is possible to configure the slave to save the DB with a
- # different interval, or to listen to another port, and so on.
- #
- # slaveof <masterip> <masterport>
- # If the master is password protected (using the "requirepass" configuration
- # directive below) it is possible to tell the slave to authenticate before
- # starting the replication synchronization process, otherwise the master will
- # refuse the slave request.
- #
- # masterauth <master-password>
- ################################## SECURITY ###################################
- # Require clients to issue AUTH <PASSWORD> before processing any other
- # commands. This might be useful in environments in which you do not trust
- # others with access to the host running redis-server.
- #
- # This should stay commented out for backward compatibility and because most
- # people do not need auth (e.g. they run their own servers).
- #
- # requirepass foobared
- ################################### LIMITS ####################################
- # Set the max number of connected clients at the same time. By default there
- # is no limit, and it's up to the number of file descriptors the Redis process
- # is able to open. The special value '0' means no limts.
- # Once the limit is reached Redis will close all the new connections sending
- # an error 'max number of clients reached'.
- #
- # maxclients 128
- # Don't use more memory than the specified amount of bytes.
- # When the memory limit is reached Redis will try to remove keys with an
- # EXPIRE set. It will try to start freeing keys that are going to expire
- # in little time and preserve keys with a longer time to live.
- # Redis will also try to remove objects from free lists if possible.
- #
- # If all this fails, Redis will start to reply with errors to commands
- # that will use more memory, like SET, LPUSH, and so on, and will continue
- # to reply to most read-only commands like GET.
- #
- # WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
- # 'state' server or cache, not as a real DB. When Redis is used as a real
- # database the memory usage will grow over the weeks, it will be obvious if
- # it is going to use too much memory in the long run, and you'll have the time
- # to upgrade. With maxmemory after the limit is reached you'll start to get
- # errors for write operations, and this may even lead to DB inconsistency.
- #
- # maxmemory <bytes>
- ############################## APPEND ONLY MODE ###############################
- # By default Redis asynchronously dumps the dataset on disk. If you can live
- # with the idea that the latest records will be lost if something like a crash
- # happens this is the preferred way to run Redis. If instead you care a lot
- # about your data and don't want to that a single record can get lost you should
- # enable the append only mode: when this mode is enabled Redis will append
- # every write operation received in the file appendonly.log. This file will
- # be read on startup in order to rebuild the full dataset in memory.
- #
- # Note that you can have both the async dumps and the append only file if you
- # like (you have to comment the "save" statements above to disable the dumps).
- # Still if append only mode is enabled Redis will load the data from the
- # log file at startup ignoring the dump.rdb file.
- #
- # The name of the append only file is "appendonly.log"
- #
- # IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
- # log file in background when it gets too big.
- appendonly no
- # The fsync() call tells the Operating System to actually write data on disk
- # instead to wait 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 if one second passed since the last fsync. Compromise.
- #
- # The default is "always" that's the safer of the options. It's up to you to
- # understand if you can relax this to "everysec" that will fsync every second
- # or to "no" that will let the operating system flush the output buffer when
- # it want, for better performances (but if you can live with the idea of
- # some data loss consider the default persistence mode that's snapshotting).
- appendfsync always
- # appendfsync everysec
- # appendfsync no
- ############################### ADVANCED CONFIG ###############################
- # Glue small output buffers together in order to send small replies in a
- # single TCP packet. Uses a bit more CPU but most of the times it is a win
- # in terms of number of queries per second. Use 'yes' if unsure.
- glueoutputbuf yes
- # Use object sharing. Can save a lot of memory if you have many common
- # string in your dataset, but performs lookups against the shared objects
- # pool so it uses more CPU and can be a bit slower. Usually it's a good
- # idea.
- #
- # When object sharing is enabled (shareobjects yes) you can use
- # shareobjectspoolsize to control the size of the pool used in order to try
- # object sharing. A bigger pool size will lead to better sharing capabilities.
- # In general you want this value to be at least the double of the number of
- # very common strings you have in your dataset.
- #
- # WARNING: object sharing is experimental, don't enable this feature
- # in production before of Redis 1.0-stable. Still please try this feature in
- # your development environment so that we can test it better.
- # shareobjects no
- # shareobjectspoolsize 1024
# Redis configuration file example # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. daemonize no # When run as a daemon, Redis write a pid file in /var/run/redis.pid by default. # You can specify a custom pid file location here. pidfile /var/run/redis.pid # Accept connections on the specified port, default is 6379 port 6379 # If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for connections. # # bind 127.0.0.1 # Close the connection after a client is idle for N seconds (0 to disable) timeout 300 # Set server verbosity to 'debug' # it can be one of: # debug (a lot of information, useful for development/testing) # notice (moderately verbose, what you want in production probably) # warning (only very important / critical messages are logged) loglevel debug # Specify the log file name. Also 'stdout' can be used to force # the demon to log on the standard output. Note that if you use standard # output for logging but daemonize, logs will be sent to /dev/null logfile stdout # Set the number of databases. The default database is DB 0, you can select # a different one on a per-connection basis using SELECT <dbid> where # dbid is a number between 0 and 'databases'-1 databases 16 ################################ SNAPSHOTTING ################################# # # Save the DB on disk: # # save <seconds> <changes> # # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # # In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed save 900 1 save 300 10 save 60 10000 # Compress string objects using LZF when dump .rdb databases? # For default that's set to 'yes' as it's almost always a win. # If you want to save some CPU in the saving child set it to 'no' but # the dataset will likely be bigger if you have compressible values or keys. rdbcompression yes # The filename where to dump the DB dbfilename dump.rdb # For default save/load DB in/from the working directory # Note that you must specify a directory not a file name. dir ./ ################################# REPLICATION ################################# # Master-Slave replication. Use slaveof to make a Redis instance a copy of # another Redis server. Note that the configuration is local to the slave # so for example it is possible to configure the slave to save the DB with a # different interval, or to listen to another port, and so on. # # slaveof <masterip> <masterport> # If the master is password protected (using the "requirepass" configuration # directive below) it is possible to tell the slave to authenticate before # starting the replication synchronization process, otherwise the master will # refuse the slave request. # # masterauth <master-password> ################################## SECURITY ################################### # Require clients to issue AUTH <PASSWORD> before processing any other # commands. This might be useful in environments in which you do not trust # others with access to the host running redis-server. # # This should stay commented out for backward compatibility and because most # people do not need auth (e.g. they run their own servers). # # requirepass foobared ################################### LIMITS #################################### # Set the max number of connected clients at the same time. By default there # is no limit, and it's up to the number of file descriptors the Redis process # is able to open. The special value '0' means no limts. # Once the limit is reached Redis will close all the new connections sending # an error 'max number of clients reached'. # # maxclients 128 # Don't use more memory than the specified amount of bytes. # When the memory limit is reached Redis will try to remove keys with an # EXPIRE set. It will try to start freeing keys that are going to expire # in little time and preserve keys with a longer time to live. # Redis will also try to remove objects from free lists if possible. # # If all this fails, Redis will start to reply with errors to commands # that will use more memory, like SET, LPUSH, and so on, and will continue # to reply to most read-only commands like GET. # # WARNING: maxmemory can be a good idea mainly if you want to use Redis as a # 'state' server or cache, not as a real DB. When Redis is used as a real # database the memory usage will grow over the weeks, it will be obvious if # it is going to use too much memory in the long run, and you'll have the time # to upgrade. With maxmemory after the limit is reached you'll start to get # errors for write operations, and this may even lead to DB inconsistency. # # maxmemory <bytes> ############################## APPEND ONLY MODE ############################### # By default Redis asynchronously dumps the dataset on disk. If you can live # with the idea that the latest records will be lost if something like a crash # happens this is the preferred way to run Redis. If instead you care a lot # about your data and don't want to that a single record can get lost you should # enable the append only mode: when this mode is enabled Redis will append # every write operation received in the file appendonly.log. This file will # be read on startup in order to rebuild the full dataset in memory. # # Note that you can have both the async dumps and the append only file if you # like (you have to comment the "save" statements above to disable the dumps). # Still if append only mode is enabled Redis will load the data from the # log file at startup ignoring the dump.rdb file. # # The name of the append only file is "appendonly.log" # # IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append # log file in background when it gets too big. appendonly no # The fsync() call tells the Operating System to actually write data on disk # instead to wait 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 if one second passed since the last fsync. Compromise. # # The default is "always" that's the safer of the options. It's up to you to # understand if you can relax this to "everysec" that will fsync every second # or to "no" that will let the operating system flush the output buffer when # it want, for better performances (but if you can live with the idea of # some data loss consider the default persistence mode that's snapshotting). appendfsync always # appendfsync everysec # appendfsync no ############################### ADVANCED CONFIG ############################### # Glue small output buffers together in order to send small replies in a # single TCP packet. Uses a bit more CPU but most of the times it is a win # in terms of number of queries per second. Use 'yes' if unsure. glueoutputbuf yes # Use object sharing. Can save a lot of memory if you have many common # string in your dataset, but performs lookups against the shared objects # pool so it uses more CPU and can be a bit slower. Usually it's a good # idea. # # When object sharing is enabled (shareobjects yes) you can use # shareobjectspoolsize to control the size of the pool used in order to try # object sharing. A bigger pool size will lead to better sharing capabilities. # In general you want this value to be at least the double of the number of # very common strings you have in your dataset. # # WARNING: object sharing is experimental, don't enable this feature # in production before of Redis 1.0-stable. Still please try this feature in # your development environment so that we can test it better. # shareobjects no # shareobjectspoolsize 1024
將附件中的redis_conf.rar解壓下來放到redis的根目錄中即可。到此,redis的安裝已經完畢。下麵開始使用redis資料庫。
啟動redis:
輸入命令:redis-server.exe redis.conf
啟動後如下圖所示:
啟動cmd視窗要一直開著,關閉後則Redis服務關閉。
這時服務開啟著,另外開一個視窗進行,設置客戶端:
輸入命令:redis-cli.exe -h 202.117.16.133 -p 6379
輸入後如下圖所示:
然後可以開始玩了:
設置一個Key並獲取返回的值:
Java代碼
- $ ./redis-cli set mykey somevalue
- OK
- $ ./redis-cli get mykey
- Somevalue
$ ./redis-cli set mykey somevalue OK $ ./redis-cli get mykey Somevalue
如何添加值到list:
Java代碼
- $ ./redis-cli lpush mylist firstvalue
- OK
- $ ./redis-cli lpush mylist secondvalue
- OK
- $ ./redis-cli lpush mylist thirdvalue
- OK
- $ ./redis-cli lrange mylist 0 -1
- . thirdvalue
- . secondvalue
- . firstvalue
- $ ./redis-cli rpop mylist
- firstvalue
- $ ./redis-cli lrange mylist 0 -1
- . thirdvalue
- . secondvalue
$ ./redis-cli lpush mylist firstvalue OK $ ./redis-cli lpush mylist secondvalue OK $ ./redis-cli lpush mylist thirdvalue OK $ ./redis-cli lrange mylist 0 -1 . thirdvalue . secondvalue . firstvalue $ ./redis-cli rpop mylist firstvalue $ ./redis-cli lrange mylist 0 -1 . thirdvalue . secondvalue
redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢 (類似於 Apache 的 ab 工具).
Java代碼
- ./redis-benchmark -n 100000 –c 50
- ====== SET ======
- 100007 requests completed in 0.88 seconds (譯者註:100004 查詢完成於 1.14 秒 )
- 50 parallel clients (譯者註:50個併發客戶端)
- 3 bytes payload (譯者註:3位元組有效載荷)
- keep alive: 1 (譯者註:保持1個連接)
- 58.50% <= 0 milliseconds(譯者註:毫秒)
- 99.17% <= 1 milliseconds
- 99.58% <= 2 milliseconds
- 99.85% <= 3 milliseconds
- 99.90% <= 6 milliseconds
- 100.00% <= 9 milliseconds
- 114293.71 requests per second(譯者註:每秒 114293.71 次查詢)
./redis-benchmark -n 100000 –c 50 ====== SET ====== 100007 requests completed in 0.88 seconds (譯者註:100004 查詢完成於 1.14 秒 ) 50 parallel clients (譯者註:50個併發客戶端) 3 bytes payload (譯者註:3位元組有效載荷) keep alive: 1 (譯者註:保持1個連接) 58.50% <= 0 milliseconds(譯者註:毫秒) 99.17% <= 1 milliseconds 99.58% <= 2 milliseconds 99.85% <= 3 milliseconds 99.90% <= 6 milliseconds 100.00% <= 9 milliseconds 114293.71 requests per second(譯者註:每秒 114293.71 次查詢)
Windows下測試併發客戶端極限為60
========================================================================
linux平臺Redis安裝:
Java代碼
- wget http://code.google.com/p/redis/downloads/detail?name=redis-2.0.4.tar.gz
- tar xvzf redis-2.0.4.tar.gz
- cd redis-2.0.4
- make
- mkdir /home/redis
- cp redis-server /home/redis
- cp redis-benchmark /home/redis
- cp redis-cli /home/redis
- cp redis.conf /home/redis
- cd /home/redis
wget http://code.google.com/p/redis/downloads/detail?name=redis-2.0.4.tar.gz tar xvzf redis-2.0.4.tar.gz cd redis-2.0.4 make mkdir /home/redis cp redis-server /home/redis cp redis-benchmark /home/redis cp redis-cli /home/redis cp redis.conf /home/redis cd /home/redis
在安裝過程中可能需要用到sudo命令,可能新裝的redhat虛擬機中新用戶還不能使用sudo命令,因此需要手動的修改/etc/sudoers文件,命令如下:
Java代碼
- cd /etc
- su root ##切換為root用戶,同時輸入密碼
- chmod u+w sudoers ##放開sudoers文件的寫許可權
- ##在root ALL = (ALL) ALL下麵一行增加 "你的用戶名" ALL = (ALL) ALL
- :wq ##保存退出
- chmod u-w sudoers ##取消修改許可權
cd /etc su root ##切換為root用戶,同時輸入密碼 chmod u+w sudoers ##放開sudoers文件的寫許可權 ##在root ALL = (ALL) ALL下麵一行增加 "你的用戶名" ALL = (ALL) ALL :wq ##保存退出 chmod u-w sudoers ##取消修改許可權
啟動
./redis-server redis.conf
進入命令交互模式,兩種:
1: ./redis-cli
2: telnet 127.0.0.1 6379 (ip接埠)
=============================================================
配置文件參數說明:
1. Redis預設不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程
daemonize no
2. 當Redis以守護進程方式運行時,Redis預設會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定
pidfile /var/run/redis.pid
3. 指定Redis監聽埠,預設埠為6379,作者在自己的一篇博文中解釋了為什麼選用6379作為預設埠,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自義大利歌女Alessia Merz的名字
port 6379
4. 綁定的主機地址
bind 127.0.0.1
5.當 客戶端閑置多長時間後關閉連接,如果指定為0,表示關閉該功能
timeout 300
6. 指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,預設為verbose
loglevel verbose
7. 日誌記錄方式,預設為標準輸出,如果配置Redis為守護進程方式運行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null
logfile stdout
8. 設置資料庫的數量,預設資料庫為0,可以使用SELECT <dbid>命令在連接上指定資料庫id
databases 16
9. 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
save <seconds> <changes>
Redis預設配置文件中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。
10. 指定存儲至本地資料庫時是否壓縮數據,預設為yes,Redis採用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致資料庫文件變的巨大
rdbcompression yes
11. 指定本地資料庫文件名,預設值為dump.rdb
dbfilename dump.rdb
12. 指定本地資料庫存放目錄
dir ./
13. 設置當本機為slav服務時,設置master服務的IP地址及埠,在Redis啟動時,它會自動從master進行數據同步
slaveof <masterip> <masterport>
14. 當master服務設置了密碼保護時,slav服務連接master的密碼
masterauth <master-password>
15. 設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,預設關閉
requirepass foobared
16. 設置同一時間最大客戶端連接數,預設無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息
maxclients 128
17. 指定Redis最大記憶體限制,Redis在啟動時會把數據載入到記憶體中,達到最大記憶體後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大記憶體設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
maxmemory <bytes>
18. 指定是否在每次更新操作後進行日誌記錄,Redis在預設情況下是非同步的把數據寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於記憶體中。預設為no
appendonly no
19. 指定更新日誌文件名,預設為appendonly.aof
appendfilename appendonly.aof
20. 指定更新日誌條件,共有3個可選值:
no:表示等操作系統進行數據緩存同步到磁碟(快)
always:表示每次更新操作後手動調用fsync()將數據寫到磁碟(慢,安全)
everysec:表示每秒同步一次(折衷,預設值)
appendfsync everysec
21. 指定是否啟用虛擬記憶體機制,預設值為no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁碟上,訪問多的頁面由磁碟自動換出到記憶體中(在後面的文章我會仔細分析Redis的VM機制)
vm-enabled no
22. 虛擬記憶體文件路徑,預設值為/tmp/redis.swap,不可多個Redis實例共用
vm-swap-file /tmp/redis.swap
23. 將所有大於vm-max-memory的數據存入虛擬記憶體,無論vm-max-memory設置多小,所有索引數據都是記憶體存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁碟。預設值為0
vm-max-memory 0
24. Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共用,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用預設值
vm-page-size 32
25. 設置swap文件中的page數量,由於頁表(一種表示頁面空閑或使用的bitmap)是在放在記憶體中的,,在磁碟上每8個pages將消耗1byte的記憶體。
vm-pages 134217728
26. 設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置為0,那麼所有對swap文件的操作都是串列的,可能會造成比較長時間的延遲。預設值為4
vm-max-threads 4
27. 設置在向客戶端應答時,是否把較小的包合併為一個包發送,預設為開啟
glueoutputbuf yes
28. 指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希演算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
29. 指定是否激活重置哈希,預設為開啟(後面在介紹Redis的哈希演算法時具體介紹)
activerehashing yes
30. 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件
include /path/to/local.conf