redis 優化

  • 系統優化
    echo "vm.overcommit_memory=1" > /etc/sysctl.conf?

    0, 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,并把錯誤返回給應用進程。

    1, 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。

    2, 表示內核允許分配超過所有物理內存和交換空間總和的內存
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    禁用NUMA優化機制提高性能
    echo 1024 >/proc/sys/net/core/somaxconn
    修改限制接收新 TCP 連接偵聽隊列的大小,默認128.

  • 文件句柄優化

    修改linux系統參數。vim /etc/security/limits.conf 添加

    *  soft  nofile  65535

    *  hard nofile  65535

  • 內存優化
    采用jemalloc內存分配器,降低內存碎片率
  • 配置優化?
    maxmemory 7g
    maxmemory-policy allkeys-lru
    maxclients 0
    ?

配置文件說明:

daemonize yes
#是否以后臺進程運行,默認為no,如果需要以后臺進程運行則改為yes
pidfile /var/run/redis.pid
#如果以后臺進程運行的話,就需要指定pid,你可以在此自定義redis.pid文件的位置.
port 6379
#接受連接的端口號,如果端口是0則redis將不會監聽TCP socket連接
maxmemory 7g
#最大可使用內存.
#警告:如果你想把Redis視為一個真正的DB的話,那不要設置<maxmemory>,只有你只想把Redis作為cache或者有狀態的server('state' server)時才需要設置.
maxmemory-policy allkeys-lru
#內存清理策略:如果達到了maxmemory,你可以采取如下動作:
# volatile-lru -> (默認策略)使用LRU算法來刪除過期的set
# allkeys-lru -> 刪除任何遵循LRU算法的key
# volatile-random ->隨機地刪除過期set中的key
# allkeys->random -> 隨機地刪除一個key
# volatile-ttl -> 刪除最近即將過期的key(the nearest expire time (minor TTL))
# noeviction -> 根本不過期,寫操作直接報錯
maxmemory-samples 2
#對于處理redis內存來說,LRU和minor TTL算法不是精確的,而是近似的(估計的)算法.所以我們會檢查某些樣本#來達到內存檢查的目的.默認的樣本數是3.
maxclients 0
#設置最大連接數.默認沒有限制,'0'意味著不限制.
tcp-backlog 511
#在高并發的環境中,為避免慢客戶端的連接問題,需要設置一個高速后臺日志.
timeout 0
#連接超時時間,單位秒.0是不超時.
tcp-keepalive 0
#在Linux上,指定值(秒)用于發送 ACKs 的時間.注意關閉連接需要雙倍的時間.默認為0.
loglevel notice
#日志級別,默認是verbose(詳細).
logfile "./6379/6379.log"
#指定log文件的名字,默認是stdout.stdout會讓redis把日志輸出到標準輸出.但是如果使用stdout而又以后臺進程的方式運行redis,則日志會輸出到/dev/null.
databases 16
#設置數據庫數目.默認的數據庫是DB 0.可以通過SELECT <dbid>來選擇一個數據庫,dbid是[0,'databases'-1]的數字.
#save 900 1
#save 300 10
#save 60 10000
#以上面的例子來說明:
#過了900秒并且有1個key發生了改變 就會觸發save動作
#過了300秒并且有10個key發生了改變 就會觸發save動作
#過了60秒并且至少有10000個key發生了改變 也會觸發save動作
#注意:如果你不想讓redis自動保存數據,那就把下面的配置注釋掉!
stop-writes-on-bgsave-error yes
#后臺存儲錯誤停止寫.
rdbcompression yes
#存儲至本地數據庫時(持久化到 rdb 文件)是否壓縮數據,默認為 yes
rdbchecksum yes
#RDB文件的是否直接偶像chcksum.
dbfilename dump.rdb
#保存dump數據的文件名.
dir ./6379
#數據存放目錄.
slave-serve-stale-data yes
#當slave丟失與master的連接時,或者slave仍然在于master進行數據同步時(還沒有與master保持一致),slave可以有兩種方式來響應客戶端請求:
#如果slave-serve-stale-data 設置成 'yes' (the default) slave會仍然響應客戶端請求,此時可能會有問題.
#如果slave-serve-stale data設置成'no'slave會返回"SYNC with master in progress"這樣的錯誤信息.但INFO和SLAVEOF命令除外.
slave-read-only yes
#配置slave實例是否接受寫.寫 slave 對存儲短暫數據(在同 master 數據同步后可以很容易地被刪除)是有用的,但未配置的情況下,客戶端寫可能會發送問題.從 Redis2.6 后,默認 slave 為 read-only.
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
#"yes",Redis 將使用一個較小的數字 TCP 數據包和更少的帶寬將數據發送到 slave , 但是這可能導致數據發送到 slave 端會有延遲 , 如果是 Linux kernel 的默認配置,會達到 40 毫秒.
#"no",則發送數據到slave 端的延遲會降低,但將使用更多的帶寬用于復制.
slave-priority 100
#slave的優先級是一個整數展示在Redis的Info輸出中.如果master不再正常工作了,哨兵將用它來選擇一個slave提升為master.
#優先級數字小的salve會優先考慮提升為master,所以例如有三個slave優先級分別為10,100,25,哨兵將挑選優先級最小數字為10的slave.
#0作為一個特殊的優先級,標識這個slave不能作為master,所以一個優先級為0的slave永遠不會被哨兵挑選提升為master.
#默認優先級為100.
appendonly no
#默認情況下,Redis是異步的把數據導出到磁盤上.這種模式在很多應用里已經足夠好,但Redis進程出問題或斷電時可能造成一段時間的寫操作丟失(這取決于配置的save指令).
#AOF是一種提供了更可靠的替代持久化模式,例如使用默認的數據寫入文件策略(參見后面的配置)
#在遇到像服務器斷電或單寫情況下Redis自身進程出問題但操作系統仍正常運行等突發事件時,Redis能只丟失1秒的寫操作.
#AOF和RDB持久化能同時啟動并且不會有問題.
#如果AOF開啟,那么在啟動時Redis將加載AOF文件,它更能保證數據的可靠性.
appendfilename "appendonly.aof"
#純累加文件名字(默認:"appendonly.aof")
appendfsync everysec
#調用fsync()函數通知操作系統立刻向硬盤寫數據.
#no:不fsync, 只是通知OS可以flush數據了,具體是否flush取決于OS.性能更好.
#always: 每次寫入append only 日志文件后都會fsync.性能差,但很安全.
#everysec: 沒間隔1秒進行一次fsync,折中.
no-appendfsync-on-rewrite no
#如果把這個設置成"yes"帶來了延遲問題,就保持"no",這是保存持久數據的最安全的方式.
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
#自動重寫AOF文件
#如果AOF日志文件增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日志文件.
#工作原理:Redis記住上次重寫時AOF文件的大小(如果重啟后還沒有寫操作,就直接用啟動時的AOF大小)
#這個基準大小和當前大小做比較.如果當前大小超過指定比例,就會觸發重寫操作.你還需要指定被重寫日志的最小尺寸,這樣避免了達到指定百分比但尺寸仍然很小的情況還要重寫.
#指定百分比為0會禁用AOF自動重寫特性.
lua-time-limit 5000
#Lua 腳本的最大執行時間,毫秒為單位
#如果達到了最大的執行時間,Redis將要記錄在達到最大允許時間之后一個腳本仍然在執行,并且將開始對查詢進行錯誤響應.
# 當一個長時間運行的腳本超過了最大執行時間,只有 SCRIPT KILL 和 SHUTDOWN NOSAVE 兩個命令可用.第一個可以用于停止一個還沒有調用寫命名的腳本.第二個是關閉服務器唯一方式,當寫命令已經通過腳本開始執行,并且用戶不想等到腳本的自然 終止.
#設置成0或者負值表示不限制執行時間并且沒有任何警告
slowlog-log-slower-than 10000
#上面的時間單位是微秒,所以1000000就是1秒.注意,負數時間會禁用慢查詢日志,而0則會強制記錄所有命令.
slowlog-max-len 128
#這個長度沒有限制.只是要主要會消耗內存.你可以通過 SLOWLOG RESET 來回收內存.
latency-monitor-threshold 0
notify-keyspace-events ""
#事件通知,默認空字符串意思是禁用通知.
#當事件發生時, Redis 可以通知 Pub/Sub 客戶端.
#可以在下表中選擇 Redis 要通知的事件類型.事件類型由單個字符來標識:
# K?? Keyspace 事件,以?_keyspace@<db>_ 的前綴方式發布
# E?? Keyevent 事件,以?_keysevent@<db>_ 的前綴方式發布
# g?? 通用事件(不指定類型),像 DEL, EXPIRE, RENAME, …
# $?? String 命令
# s?? Set 命令
# h?? Hash 命令
# z?? 有序集合命令
# x?? 過期事件(每次 key 過期時生成)
# e?? 清除事件(當 key 在內存被清除時生成)
# A?? g$lshzxe 的別稱,因此 ”AKE” 意味著所有的事件
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
#當 hash 中包含超過指定元素個數并且最大的元素沒有超過臨界時,
#hash 將以一種特殊的編碼方式(大大減少內存使用)來存儲,這里可以設置這兩個臨界值
#Redis Hash 對應 Value 內部實際就是一個 HashMap ,實際這里會有 2 種不同實現,
#這個 Hash 的成員比較少時 Redis 為了節省內存會采用類似一維數組的方式來緊湊存儲,而不會采用真正的 HashMap 結構,對應的 valueredisObject 的 encoding 為 zipmap,
#當成員數量增大時會自動轉成真正的 HashMap, 此時 encoding 為 ht .
list-max-ziplist-entries 512
list-max-ziplist-value 64
#和 Hash一樣,多個小的 list 以特定的方式編碼來節省空間.
#list數據類型節點值大小小于多少字節會采用緊湊存儲格式.
set-max-intset-entries 512
#set數據類型內部數據如果全部是數值型,且包含多少節點以下會采用緊湊格式存儲.
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#和hashe和list一樣,排序的set在指定的長度內以指定編碼方式存儲以節省空間
#zsort數據類型節點值大小小于多少字節會采用緊湊存儲格式.
hll-sparse-max-bytes 3000
activerehashing yes
#redis 將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用.當你的使用場景中,有非常嚴格的實時性需 要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為 no.如果沒有這么嚴格的實時性要求,可以設置為 yes,以便能夠盡可能快的釋放內存.
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
#Redis 調用內部函數來執行許多后臺任務,如關閉客戶端超時的連接,清除過期的 Key ,等等.
#不是所有的任務都以相同的頻率執行,但 Redis 依照指定的“ hz ”值來執行檢查任務.
#默認情況下,"hz"的被設定為 10 .
#提高該值將在 Redis 空閑時使用更多的 CPU 時,但同時當有多個 key 同時到期會使 Redis 的反應更靈敏,以及超時可以更精確地處理.
#范圍是 1 到 500 之間,但是值超過100通常不是一個好主意.
#大多數用戶應該使用 10 這個預設值,只有在非常低的延遲的情況下有必要提高最大到 100 .
hz 10
aof-rewrite-incremental-fsync yes
#當一個子節點重寫AOF文件時,如果啟用上面的選項,則文件每生成32M數據進行同步.

轉載于:https://www.cnblogs.com/guigujun/p/6137592.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253831.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IC設計常見設計思想

速度與面積互換原則 所謂速度&#xff0c;是指整個工程穩定運行所能夠達到的最高時鐘頻率&#xff0c;它不僅和電路內部各個寄存器的建立時間、保持時間以及外部器件接口的各種時序要求有關&#xff0c;而且還和兩個緊鄰的寄存器間的邏輯延時&#xff0c;走線延時有關。所謂面…

DM365 u-boot啟動分析

http://www.61ic.com/Article/DaVinci/DM644X/201009/27429.html

(十三)Hibernate高級配置

配置數據庫連接池 配置C3P0連接池。先導入c3p0包。然后在hibernate.cfg.xml文件中 &#xff0c;使用下面代碼配置連接池<property name"hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>可以通過下面的…

eclipse中如何配置tomcat

1.打開eclipse上面的Windows選項&#xff0c;選擇Preferences>Server>Runtime Environments>Add 2.選擇你電腦中安裝的tomcat的版本我的是8所以我選的是Apache Tomcat v8.0 3,Next>Browse選擇Tomcat的安裝目錄&#xff0c;選擇jdk 4.Finish>OK tomcat配置完成。…

jsp調試小技巧

console.log($("#toolbar")); 打印對象可知道這個對象的參數信息轉載于:https://www.cnblogs.com/chenweida/p/6149342.html

數字IC驗證學習(一)

一、數據類型 1、logic logic類型只能有一個驅動。使用wire和reg的地方均可使用logic&#xff0c;但如雙向總線等有多個驅動的地方&#xff0c;則不可使用logic。 2、二值邏輯 對于二值邏輯變量與DUT中的四值邏輯變量連接時&#xff0c;如果DUT中產生了X和Z&#xff0c;會被…

SecureCRT 配置文件中 找密碼

打開本地電腦如下路徑 C:\Users\XXX\AppData\Roaming\VanDyke\Config\Sessions 找到配置文件。 運行命令&#xff1a;python SecureCRTDecrypt.py [配置文件名稱] 例如&#xff1a;python SecureCRTDecrypt.py 192.168.1.249.ini ssh root192.168.1.249 # 123456 即可得到密…

刷題比賽

題目描述 給你四個數組A,B,C,D. 給出每個數組的初始值A[1] 1, B[1] 1, C[1] 1, D[1] 1 , A[2] 3, B[2] 3, C[2] 3, D[2] 3; 有以下的遞推公式: (1) a[k2]p* a[k1]qa[k]b[k1]c[k1]r k^2t * k1d[k]; (2)b[k2]u* b[k1]vb[k]a[k1]c[k1]w^kd[k]; (3)c[k2]x c[k1]yc[k]a[k1]b[…

自動化測試用例設計原則

自動化測試用例設計原則&#xff1a;每一個用例 都是一個閉合的業務操作。用例之間要保持獨立 &#xff0c;不要有操作上的依賴關系&#xff0c;就算有也是測試數據上的依賴。第二個用例 依賴第一個用例產生的數據。轉載于:https://www.cnblogs.com/yyjiangnan/p/6149430.html

MII/MDIO接口詳解

MII/MDIO接口詳解 http://dpinglee.blog.163.com/blog/static/144097753201041131115262/

T24412 Cup#182-3 洞穴之旅

弱連通模板題&#xff0c;不過還是不會。。。 這道題在POJ2762有&#xff0c;這個出題人直接翻譯弄過來了。。。 弱連通的定義是&#xff1a;從u能到達v或從v能到達u&#xff0c;則u和v這兩個點弱連通。 顯然如果是強連通分量就一定是弱連通分量啦&#xff0c;所以可以直接縮點…

PCB相關的基礎知識

http://www.elecfans.com/article/89/92/2017/20170425510728.html轉載于:https://www.cnblogs.com/jackn-crazy/p/7300228.html

sql server 修改表結構語法大全

1.增加字段 alter table docdsp add dspcode char(200) 2.刪除字段 alter table table_name drop column column_name 3.修改字段類型 alter table table_name alter column column_name new_data_type 2.6.1. 增加字段 要增加一個字段&#xff0c;使用這條命令…

Flutter - 生成二維碼與識別二維碼

#生成二維碼 ##首先需要在pubspec.yaml:中添加 qr_flutter: ^1.1.3 其次&#xff0c;引入代碼&#xff1a; import package:qr_flutter/qr_flutter.dart; 核心代碼如下&#xff1a; child: QrImage(data: "這里是需要生成二維碼的數據",size: 100.0,onError: (ex) {p…

任意小數分頻設計

對于任意小數分頻&#xff0c;如果有PLL的話&#xff0c;直接倍頻再分頻即可&#xff1b;或常用的方法有雙模前置小數分頻和脈沖刪除小數分頻。前一種方法設計較為復雜&#xff0c;因此主要以第二種方式為主設計了一下。 任意小數均可以化為分數&#xff0c;例如要進行5.3分頻即…

Bootstrap--圓角圖片`圓形圖

轉載于:https://www.cnblogs.com/qiyiyifan/p/6159823.html

邏輯綜合——概述與基本概念

邏輯綜合系列主要說明以下問題&#xff1a; 為什么要邏輯綜合邏輯綜合的基本原理邏輯綜合需要提供哪些文件邏輯綜合過程中施加約束邏輯綜合能產生那些結果 綜合是前端設計的重要步驟之一&#xff0c;其過程是將行為描述的電路、RTL級的電路轉換到門級&#xff0c;其目的在于&a…

Swoole 源碼分析——Server模塊之初始化

前言 本節主要介紹 server 模塊進行初始化的代碼&#xff0c;關于初始化過程中&#xff0c;各個屬性的意義&#xff0c;可以參考官方文檔&#xff1a; SERVER 配置選項 關于初始化過程中&#xff0c;用于監聽的 socket 綁定問題&#xff0c;可以參考&#xff1a; UNP 學習筆記—…