1. 程式人生 > 實用技巧 >使用騰訊地圖SDK快速實現距離測量小工具

使用騰訊地圖SDK快速實現距離測量小工具

 1 # Redis configuration file example.
 2    2 #
 3    3 # Note that in order to read the configuration file, Redis must be   
 4    4 # started with the file path as first argument:  //注意:為了讀取到配置檔案,啟動Redis服務的時候必須帶上檔案的路徑引數
 5    5 #
 6    6 # ./redis-server /path/to/redis.conf
 7    7 
 8    8 # Note on units: when memory size is
needed, it is possible to specify  // 注意單位:當記憶體大小需要是,它可能需要指定具體的數值,一般的形式如 1k,5GB 9 9 # it in the usual form of 1k 5GB 4M and so forth:               // 4M等等. 10 10 # 11 11 # 1k => 1000 bytes 12 12 # 1kb => 1024 bytes 13 13 # 1m => 1000000 bytes 14 14 # 1mb => 1024*1024 bytes 15 15 # 1g => 1000000000
bytes 16 16 # 1gb => 1024*1024*1024 bytes 17 17 # 18 18 # units are case insensitive so 1GB 1Gb 1gB are all the same.        // 單位對大小寫不敏感,如1gb和1GB是一樣的效果.
 20 ################################## INCLUDES ###################################
  21 
  22 # Include one or more other config files here.  This is
useful if you 23 # have a standard template that goes to all Redis servers but also need 24 # to customize a few per-server settings. Include files can include 25 # other files, so use this wisely. 26 # 27 # Notice option "include" won't be rewritten by command "CONFIG REWRITE" 28 # from admin or Redis Sentinel. Since Redis always uses the last processed 29 # line as value of a configuration directive, you'd better put includes 30 # at the beginning of this file to avoid overwriting config change at runtime. 31 # 32 # If instead you are interested in using includes to override configuration 33 # options, it is better to use include as the last line. 34 # 如果你想引入外部的的其它配置檔案,你可以放開下面的註釋,例如引入 /path/to/localRedis.conf,你就可以使用 include /path/to/localRedis.conf的方式引入 35 # include /path/to/local.conf 36 # include /path/to/other.conf
###################################  NETWORK ###################################
 
#指定 redis 只接收來自於該IP地址的請求,如果不進行設定,那麼將處理所有請求
bind 127.0.0.1
 
#是否開啟保護模式,預設開啟。開啟該引數後,redis只會本地進行訪問,拒絕外部訪問。要是開啟了密碼和bind,則需要設定值為no,進行關閉
protected-mode yes
 
#redis監聽的埠號
port 6379
 
#此引數確定了TCP連線中已完成佇列+未完成佇列(完成三次握手和未完成三次握手總數)的總長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,預設是511,
而Linux的預設引數值是128
當系統併發量大並且客戶端速度緩慢的時候,可以將這二個引數一起參考設定。該核心引數預設值一般是128,對於負載很大的服務程式來說大大的不夠。一般會將它修改為2048或者更大。
在/etc/sysctl.conf中新增:net.core.somaxconn = 2048,然後在終端中執行sysctl -
p tcp-backlog 511 #此引數為設定客戶端空閒超過timeout,服務端會斷開連線,如果值設定為0則服務端不會主動斷開連線,不能小於0(比如timeout 10:表示超過10S就會斷開連線) timeout 0 #tcp keepalive引數。如果設定不為0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛掉的對端。降低中間裝置出問題而導致網路看似連線卻已經與對端斷開的問題。
在Linux核心中,設定了keepalive,redis會定時給對端傳送ack。檢測到對端關閉需要兩倍的設定值 tcp
-keepalive 300 #是否在後臺執行,yes:後臺執行;no:不是後臺執行 daemonize yes #redis的程序檔案 pidfile /var/run/redis/redis.pid #指定了服務端日誌的級別。級別包括:
debug(很多資訊,方便開發、測試)
verbose(許多有用的資訊但是沒有debug級別資訊多)
notice(適當的日誌級別,適合生產環境)
warn(只有非常重要的資訊) loglevel notice #指定了記錄日誌的檔案。空字串的話,日誌會列印到標準輸出裝置。後臺執行的redis標準輸出是
/dev/null logfile /usr/local/redis/var/redis.log #是否開啟記錄syslog功能 # syslog-enabled no #syslog的識別符號。 # syslog-ident redis #輸出日誌的裝置 # syslog-facility local0 #資料庫的數量,預設使用的資料庫是0。可以通過”SELECT 【資料庫序號】“命令選擇一個數據庫,序號從0開始 databases 16
###################################  SNAPSHOTTING  ###################################
 
#RDB核心規則配置 save <指定時間間隔> <執行指定次數更新操作>,滿足條件就將記憶體中的資料同步到硬碟中。官方出廠配置預設是 900秒內有1個更改,300秒內有10個更改以及
60秒內有10000個更改,則將記憶體中的資料快照寫入磁碟。 若不想用RDB方案,可以把 save ""
的註釋開啟,下面三個註釋 # save "" save 900 1      // 900s內如果有一個更改則觸發RDB儲存,檔名為xxx.dump save 300 10     // 300s內如果有10個更改,則觸發儲存 save 60 10000    // 60s內如果有10000個更改則觸發儲存 #當RDB持久化出現錯誤後,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以通過info中的rdb_last_bgsave_status瞭解RDB持久化是否有錯誤 stop-writes-on-bgsave-error yes #配置儲存至本地資料庫時是否壓縮資料,預設為yes。Redis採用LZF壓縮方式,但佔用了一點CPU的時間。若關閉該選項,但會導致資料庫檔案變的巨大。建議開啟。 rdbcompression yes #是否校驗rdb檔案;從rdb格式的第五個版本開始,在rdb檔案的末尾會帶上CRC64的校驗和。這跟有利於檔案的容錯性,但是在儲存rdb檔案的時候,會有大概10%的效能損耗,
所以如果你追求高效能,可以關閉該配置 rdbchecksum yes #指定本地資料庫檔名,一般採用預設的 dump.rdb dbfilename dump.rdb #資料目錄,資料庫的寫入會在這個目錄。rdb、aof檔案也會寫在這個目錄 dir
/usr/local/redis/var
###################################  SECURITY  ###################################
#requirepass配置可以讓使用者使用AUTH命令來認證密碼,才能使用其他命令。這讓redis可以使用在不受信任的網路中。為了保持向後的相容性,可以註釋該命令,因為大部分使用者也不需要認證。使用requirepass的時候需要
注意,因為redis太快了,每秒可以認證15w次密碼,簡單的密碼很容易被攻破,所以最好使用一個更復雜的密碼
如果開啟密碼認證的時候需要將該註釋放開,比如你想設定的密碼是root123,只需要如下配置 requirepass root123,同時注意要將保護模式關閉 # requirepass foobared #把危險的命令給修改成其他名稱。比如CONFIG命令可以重新命名為一個很難被猜到的命令,這樣使用者不能使用,而內部工具還能接著使用 # rename
-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #設定成一個空的值,可以禁止一個命令 # rename-command CONFIG ""
###################################  CLIENT ###################################
# 設定能連上redis的最大客戶端連線數量。預設是10000個客戶端連線。由於redis不區分連線是客戶端連線還是內部開啟檔案或者和slave連線等,所以maxclients最小建議設定到32。
如果超過了maxclients,redis會給新的連線傳送’max number of clients reached’,並關閉連線 # maxclients
10000
################################### MEMORY MANAGEMENT ###################################
redis配置的最大記憶體容量。當記憶體滿了,需要配合maxmemory-policy策略進行處理。注意slave的輸出緩衝區是不計算在maxmemory內的。所以為了防止主機記憶體使用完,
建議設定的maxmemory需要更小一些maxmemory 122000000
#記憶體容量超過maxmemory後的處理策略。lru:最近最少使用 #volatile-lru:利用LRU演算法移除設定過過期時間的key。 #volatile-random:隨機移除設定過過期時間的key。 #volatile-ttl:移除即將過期的key,根據最近過期時間來刪除(輔以TTL) #allkeys-lru:利用LRU演算法移除任何key。 #allkeys-
random:隨機移除任何key。 #noeviction:不移除任何key,只是返回一個寫錯誤。 #上面的這些驅逐策略,如果redis沒有選擇合適的key驅逐,對於寫命令,還是會返回錯誤。redis將不再接收寫請求,只接收get請求。寫命令包括:
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 noeviction # lru檢測的樣本數。使用lru或者ttl淘汰演算法,從需要淘汰的列表中隨機選擇sample個key,選出閒置時間最長的key移除
一般設定3-7的數字,數值越小越不準確,但是效能消耗越少. # maxmemory
-samples 5 # 是否開啟salve的最大記憶體 # replica-ignore-maxmemory yes
################################# REPLICATION #################################
# 複製選項,slave複製對應的master。 replicaof 127.0.0.1 6379 # replicaof
<masterip> <masterport> #如果master設定了requirepass,那麼slave要連上master,需要有master的密碼才行。masterauth就是用來配置master的密碼,這樣可以在連上master後進行認證。 # masterauth <master-password> #當從庫同主機失去連線或者複製正在進行,從機庫有兩種執行方式:
1) 如果slave-serve-stale-data設定為yes(預設設定),從庫會繼續響應客戶端的請求。

2) 如果slave-serve-stale-data設定為no, INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY命令之外的任何請求 都會返回一個錯誤”SYNC with master in
progress”。 replica-serve-stale-data yes #作為從伺服器,預設情況下是隻讀的(yes),可以修改成NO,用於寫(不建議) #replica-read-only yes # 是否使用socket方式複製資料。目前redis複製提供兩種方式,disk和socket。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb檔案。有2種方式:
disk方式是master建立一個新的程序把rdb檔案儲存到磁碟,再把磁碟上的rdb檔案傳遞給slave。
socket是master建立一個新的程序,直接把rdb檔案以socket的方式發給slave。
disk方式的時候,當一個rdb儲存的過程中,多個slave都能共享這個rdb檔案。socket的方式就的一個個slave順序複製。在磁碟速度緩慢,網速快的情況下推薦用socket方式。 repl
-diskless-sync no #diskless複製的延遲時間,防止設定為0。一旦複製開始,節點不會再接收新slave的複製請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來 repl-diskless-sync-delay 5 #slave根據指定的時間間隔向伺服器傳送ping請求。時間間隔可以通過 repl_ping_slave_period 來設定,預設10秒。 # repl-ping-slave-period 10 # 複製連線超時時間。master和slave都有超時時間的設定。master檢測到slave上次傳送的時間超過repl-timeout,即認為slave離線,清除該slave資訊。slave檢測到上次和master互動的時間超過repl-timeout,則認為master離線。需要注意的是repl-timeout需要設定一個比repl-ping-slave-period更大的值,不然會經常檢測到超時 # repl-timeout 60 #是否禁止複製tcp連結的tcp nodelay引數,可傳遞yes或者no。預設是no,即使用tcp nodelay。如果master設定了yes來禁止tcp nodelay設定,在把資料複製給slave的時候,
會減少包的數量和更小的網路頻寬。但是這也可能帶來資料的延遲。預設我們推薦更小的延遲,但是在資料量傳輸很大的場景下,建議選擇yes repl
-disable-tcp-nodelay no #複製緩衝區大小,這是一個環形複製緩衝區,用來儲存最新複製的命令。這樣在slave離線的時候,不需要完全複製master的資料,如果可以執行部分同步,只需要把緩衝區的部分資料複製給
slave,就能恢復正常複製狀態。緩衝區的大小越大,slave離線的時間可以更長,複製緩衝區只有在有slave連線的時候才分配記憶體。沒有slave的一段時間,記憶體會被釋放出來,預設1m # repl
-backlog-size 1mb # master沒有slave一段時間會釋放複製緩衝區的記憶體,repl-backlog-ttl用來設定該時間長度。單位為秒。 # repl-backlog-ttl 3600 # 當master不可用,Sentinel會根據slave的優先順序選舉一個master。最低的優先順序的slave,當選master。而配置成0,永遠不會被選舉 replica-priority 100 #redis提供了可以讓master停止寫入的方式,如果配置了min-replicas-to-write,健康的slave的個數小於N,mater就禁止寫入。master最少得有多少個健康的slave存活才能執行寫命令。這個配置雖然不能保證N個slave都一定能接收到master的寫操作,但是能避免沒有足夠健康的slave的時候,master不能寫入來避免資料丟失。設定為0是關閉該功能 # min-replicas-to-write 3 # 延遲小於min-replicas-max-lag秒的slave才認為是健康的slave # min-replicas-max-lag 10 # 設定1或另一個設定為0禁用這個特性。 # Setting one or the other to 0 disables the feature. # By default min-replicas-to-write is set to 0 (feature disabled) and # min-replicas-max-lag is set to 10.
################################# LAZY FREEING #################################
#以非阻塞方式釋放記憶體,使用以下配置指令呼叫了 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no
################################# APPEND ONLY MODE #################################
#Redis 預設不開啟。它的出現是為了彌補RDB的不足(資料的不一致性),所以它採用日誌的形式來記錄每個寫操作,並追加到檔案中。Redis 重啟的會根據日誌檔案的內容將寫指令從前到後執行
一次以完成資料的恢復工作預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的資料丟失,根據save來策略進行持久化,
Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這 個檔案的資料讀入記憶體裡,先忽略RDB檔案。若開啟rdb則將no改為yes appendonly no 指定本地資料庫檔名,預設值為 appendonly.aof appendfilename
"appendonly.aof" #aof持久化策略的配置: no表示不執行fsync,由作業系統保證資料同步到磁碟,速度最快 always表示每次寫入都執行fsync,以保證資料同步到磁碟 everysec表示每秒執行一次fsync,可能會導致丟失這1s資料 appendfsync always appendfsync everysec appendfsync no # 在aof重寫或者寫入rdb檔案的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行 fsync會造成阻塞過長時間,no-appendfsync-on-rewrite欄位設定為預設設定為no。如果對延遲要求很高的 應用,這個欄位可以設定為yes,否則還是設定為no,這樣對持久化特性來說這是更安全的選擇。設定為yes表 示rewrite期間對新寫操作不fsync,暫時存在記憶體中,等rewrite完成後再寫入,預設為no,建議yes。Linux的 預設fsync策略是30秒。可能丟失30秒資料 no-appendfsync-on-rewrite no #aof自動重寫配置。當目前aof檔案大小超過上一次重寫的aof檔案大小的百分之多少進行重寫,即當aof檔案增長到一定大小的時候Redis能夠呼叫bgrewriteaof對日誌檔案進行重寫。
當前AOF檔案大小是上次日誌重寫得到AOF檔案大小的二倍(設定為100)時,自動啟動新的日誌重寫過. auto
-aof-rewrite-percentage 100 #設定允許重寫的最小aof檔案大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫 auto-aof-rewrite-min-size 64mb #aof檔案可能在尾部是不完整的,當redis啟動的時候,aof檔案的資料被載入記憶體。重啟可能發生在redis所在的主機作業系統宕機後,尤其在ext4檔案系統沒有加上data=ordered選項
(redis宕機或者異常終止不會造成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者匯入儘可能多的資料。如果選擇的是yes,當截斷的aof檔案被匯入的時候,
會自動釋出一個log給客戶端然後load。如果是no,使用者必須手動redis
-check-aof修復AOF檔案才可以 aof-load-truncated yes #載入redis時,可以識別AOF檔案以“redis”開頭。字串並載入帶字首的RDB檔案,然後繼續載入AOF尾巴 aof-use-rdb-preamble yes

轉載:https://blog.csdn.net/suprezheng/article/details/90679790(寫的很好)

一般設定37的數字,數值越小樣本越不準確,但是效能消耗也越小。