Redis做為單機緩存使用建議

来源:https://www.cnblogs.com/kingstarer/archive/2020/03/03/12400574.html
-Advertisement-
Play Games

Redis做為單機緩存使用建議 前言 由於原來項目使用的緩存中間件無法在國產麒麟操作系統裡面使用,準備在項目中引入redis做為單機緩存。 配置優化建議 配置redis服務以守護進程啟動 Redis預設不是以守護進程的方式運行,可以通過將配置項daemonize修改為yes,這樣啟動redis-se ...


Redis做為單機緩存使用建議

 

前言

       由於原來項目使用的緩存中間件無法在國產麒麟操作系統裡面使用,準備在項目中引入redis做為單機緩存。

      

配置優化建議

配置redis服務以守護進程啟動

       Redis預設不是以守護進程的方式運行,可以通過將配置項daemonize修改為yes,這樣啟動redis-server後會自動在後臺運行。

安全配置

       將bind配置為127.0.0.1可以避免redis受外部攻擊。另外使用requirepass配置項,可以設置訪問redis伺服器數據時先要輸入密碼。

一個小遺憾是redis只支持在配置文件中使用明文保存訪問密碼,這裡提供一個動態生成配置文件的思路增加安全性:

       首先將redis.conf備份成redis.conf.tml,在裡面的requirepass配置好密碼密文。

在啟動redis服務前使用其它程式讀取redis.conf.tml的requirepass配置項,把密文解密,替換requirepass值生成redis配置文件redis.conf.,啟動redis服務後把redis.conf刪除,這樣就達到保密效果。

設置最大記憶體及記憶體淘汰策略

       為避免redis占用記憶體無限膨脹,導致把系統記憶體耗盡,建議將maxmemory設置為1024mb。(實際用ps命令查看,會發現redis-server最多會使用比maxmemory多一些的記憶體)

同時配置記憶體淘汰策略maxmemory-policy為allkeys-lru,讓redis在記憶體滿時在所有的key中使用LRU演算法對數據進行淘汰。

日誌文件配置

       Redis提供了logfile配置項,可以指定日誌輸出位置。但預設情況下redis會把所有日誌輸出到同一個文件,天常日久,這個日誌文件會越積越大。

       建議修改redis的源碼,把裡面的redisLog函數改為按天輸出日誌。

持久化配置

       由於我們只需要使用redis做資料庫緩存,所以不需要持久化。也不需要擔心redis重啟出現“緩存雪崩”的現象,因為我們業務伺服器有很多台,不會同時重啟。

       單台業務伺服器tps有限,緩存清零對資料庫也不會產生太大壓力。

       關閉持久化方法把原來的save配置屏蔽,增加save ""

慢查詢配置

       設置slowlog-log-slower-than 5000,把所有響應時間大於5ms的請求記錄起來,方便出故障時定位問題。

高風險命令配置

       有一些redis命令會消耗redis伺服器比較多資源,導致查詢緩存效率下降。為了防止新手誤操作,我們可以把這些命令改名,配置如下:

rename-command MONITOR "DANGEROUS_CMD_MONITOR"

rename-command FLUSHALL "DANGEROUS_CMD_FLUSHALL"

rename-command FLUSHDB  "DANGEROUS_CMD_FLUSHDB"

rename-command CONFIG   "DANGEROUS_CMD_CONFIG"

rename-command KEYS     "DANGEROUS_CMD_KEYS"

 

優化前後性能測試比較

 

優化前:

 

[huangcihui:/home/huangcihui] redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e  -q -r 10000  -d 512

PING_INLINE: 56148.23 requests per second

PING_BULK: 55617.35 requests per second

SET: 57570.52 requests per second

GET: 56085.25 requests per second

INCR: 55309.73 requests per second

LPUSH: 54764.51 requests per second

RPUSH: 57570.52 requests per second

LPOP: 54644.81 requests per second

RPOP: 54884.74 requests per second

SADD: 50327.12 requests per second

HSET: 58445.36 requests per second

SPOP: 53191.49 requests per second

LPUSH (needed to benchmark LRANGE): 54945.05 requests per second

LRANGE_100 (first 100 elements): 11693.17 requests per second

LRANGE_300 (first 300 elements): 3824.09 requests per second

LRANGE_500 (first 450 elements): 2342.19 requests per second

LRANGE_600 (first 600 elements): 1671.12 requests per second

MSET (10 keys): 40192.93 requests per second

 

[huangcihui:/home/huangcihui] redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e  -q -r 10000  -d 512

PING_INLINE: 55340.34 requests per second

PING_BULK: 54854.64 requests per second

SET: 53937.43 requests per second

GET: 54347.82 requests per second

INCR: 52910.05 requests per second

LPUSH: 54674.69 requests per second

RPUSH: 51894.13 requests per second

LPOP: 53676.86 requests per second

RPOP: 53022.27 requests per second

SADD: 53676.86 requests per second

HSET: 55401.66 requests per second

SPOP: 56085.25 requests per second

LPUSH (needed to benchmark LRANGE): 54347.82 requests per second

LRANGE_100 (first 100 elements): 11160.71 requests per second

LRANGE_300 (first 300 elements): 3383.98 requests per second

LRANGE_500 (first 450 elements): 2246.33 requests per second

LRANGE_600 (first 600 elements): 1592.66 requests per second

MSET (10 keys): 37622.27 requests per second

 

[huangcihui:/home/huangcihui] redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e  -q -r 10000  -d 512

PING_INLINE: 54734.54 requests per second

PING_BULK: 54024.85 requests per second

SET: 54854.64 requests per second

GET: 52798.31 requests per second

INCR: 55463.12 requests per second

LPUSH: 55432.37 requests per second

RPUSH: 55834.73 requests per second

LPOP: 54495.91 requests per second

RPOP: 53705.69 requests per second

SADD: 52521.01 requests per second

HSET: 54229.93 requests per second

SPOP: 54585.15 requests per second

LPUSH (needed to benchmark LRANGE): 55648.30 requests per second

LRANGE_100 (first 100 elements): 11225.86 requests per second

LRANGE_300 (first 300 elements): 3598.29 requests per second

LRANGE_500 (first 450 elements): 2222.77 requests per second

LRANGE_600 (first 600 elements): 1620.25 requests per second

MSET (10 keys): 38684.72 requests per second

 

 

 

 

優化後:

 

[huangcihui:/home/huangcihui] redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e  -q -r 10000  -d 512 -a pass123

PING_INLINE: 51361.07 requests per second

PING_BULK: 46838.41 requests per second

SET: 49043.65 requests per second

GET: 50150.45 requests per second

INCR: 51786.64 requests per second

LPUSH: 55493.89 requests per second

RPUSH: 50150.45 requests per second

LPOP: 56915.20 requests per second

RPOP: 55928.41 requests per second

SADD: 56369.79 requests per second

HSET: 58651.02 requests per second

SPOP: 57703.40 requests per second

LPUSH (needed to benchmark LRANGE): 56593.10 requests per second

LRANGE_100 (first 100 elements): 11723.33 requests per second

LRANGE_300 (first 300 elements): 3954.76 requests per second

LRANGE_500 (first 450 elements): 2504.95 requests per second

LRANGE_600 (first 600 elements): 1733.61 requests per second

MSET (10 keys): 44444.45 requests per second

 

[huangcihui:/home/huangcihui] redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e  -q -r 10000  -d 512 -a pass123

PING_INLINE: 57339.45 requests per second

PING_BULK: 56561.09 requests per second

SET: 56116.72 requests per second

GET: 56625.14 requests per second

INCR: 57142.86 requests per second

LPUSH: 59880.24 requests per second

RPUSH: 51387.46 requests per second

LPOP: 51599.59 requests per second

RPOP: 51334.70 requests per second

SADD: 55865.92 requests per second

HSET: 57937.43 requests per second

SPOP: 58719.91 requests per second

LPUSH (needed to benchmark LRANGE): 56625.14 requests per second

LRANGE_100 (first 100 elements): 11845.53 requests per second

LRANGE_300 (first 300 elements): 3999.20 requests per second

LRANGE_500 (first 450 elements): 2414.70 requests per second

LRANGE_600 (first 600 elements): 1702.16 requests per second

MSET (10 keys): 39494.47 requests per second

 

[huangcihui:/home/huangcihui] redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e  -q -r 10000  -d 512 -a pass123

PING_INLINE: 51786.64 requests per second

PING_BULK: 38417.21 requests per second

SET: 55524.71 requests per second

GET: 39047.25 requests per second

INCR: 44822.95 requests per second

LPUSH: 53276.50 requests per second

RPUSH: 58582.31 requests per second

LPOP: 57208.24 requests per second

RPOP: 55066.08 requests per second

SADD: 52910.05 requests per second

HSET: 55187.64 requests per second

SPOP: 57405.28 requests per second

LPUSH (needed to benchmark LRANGE): 57570.52 requests per second

LRANGE_100 (first 100 elements): 10960.11 requests per second

LRANGE_300 (first 300 elements): 3794.20 requests per second

LRANGE_500 (first 450 elements): 2355.44 requests per second

LRANGE_600 (first 600 elements): 1705.41 requests per second

MSET (10 keys): 44130.62 requests per second

 

 

經優化後運行效率會有小提升

使用約定

集群

       Redis提供三種集群模式,分別是主從,哨兵,分片三種。但因為我們只打算做為單機緩存,所以不需要配置。

合理使用資料庫和鍵名首碼區分業務

       Redis提供了多資料庫配置,最多支持256個資料庫。我們可以規定不同業務模塊使用不同的資料庫,這樣可以避免資料庫主鍵名稱衝突。

但即使同一業務模塊,也經常容易出現主鍵名稱相同的情況,所以鍵名需要制定一些規範:統一使用”首碼:” + 具體值。

例如set uname:13560453764 huangcihui

       首碼可以使用excel管理起來,這樣基本可以解決鍵名衝突問題。

失效時間

       最好對所有鍵設置失效時間,失效時間最好是某個範圍內的隨機數,這樣可以避免緩存同時失效的情況。

 

壓測

       部署redis前最好先執行壓測命令,看一下性能是否有異常。如果有異常需要考慮是否調整操作系統參數。

redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000  -k 1 -e -a pass123 -q

註意需要使用-k參數,設置長連接,不然測試結果性能會差很多。(我的機器上測試相差5倍)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Windows操作系統日誌分析 一、Windows操作系統日誌介紹: 1.Windows操作系統日誌介紹: <1>.Windows操作系統在運行生命周期,以特定數據結構方式存儲、記錄OS大量運行的日誌信息,例如:System、Security、Application... ...,主要包括:Wind ...
  • 完成SRAM晶元的測試,需要設計測試電路板。測試電路板主要提供測試介面和電源。晶元的控制信號和數據信號由紅色颶風II-Xilinx FPGA 開發板提供,使用ISE13.2 軟體建立測試工程,編寫Verilog 測試程式(主要包括按照時序提供分頻後的測試時鐘、數據信號和控制信號),通過JTAG 下載 ...
  • 自 MySQL5.1.6起,增加了一個非常有特色的功能–事件調度器(Event Scheduler),可以用做定時執行某些特定任務,來取代原先只能由操作系統的計劃任務來執行的工作。事件調度器有時也可稱為臨時觸發器(temporal triggers),因為事件調度器是基於特定時間周期觸發來執行某些任 ...
  • 使用方法: 使用示例: ...
  • ntpdate 系統時間、hwclock 硬體時間1、判斷當前時間是否準確[root@Ecology-APP ~]# date2020年 03月 03日 星期二 10:13:02 CST 2、檢查是否安裝ntpdate[root@Ecology-APP ~]# ntpdate-bash: ntpda ...
  • 字元串按位置切片 ${var:offset:length} offset:從第幾個開始切 length:切多長。可以是負數(從最右面開始切多長,註意負號和冒號之間必須有空格)。 字元串模式 模式: :代表0個或多個任意字元。 ?:代表0個或1個任意字元。 字元串按模式切片(只能從行首或行尾開始切,不 ...
  • i.MXRT1010的市場定位類似於傳統8位MCU或入門級32位MCU,它跟i.MXRT1015/1020/1050一樣內部只集成了一個雙通道8bit的FlexSPI模塊,從低成本開發角度考慮外掛的晶元應該越少越好,因此本文主要介紹單Flash連接,不再像前面幾款i.MXRT晶元那樣去額外介紹雙Fl... ...
  • Windows歷年高危漏洞介紹和分析 一、漏洞介紹: 1.漏洞: <1>.漏洞:是影響網路安全的重要因素; <2>.漏洞利用:成為惡意攻擊的最常用手段; <3>.漏洞攻擊:產業化、低成本化、手段多樣化、低門檻趨勢; <4>.信息化時代:無論個人/企業,都面臨嚴峻的漏洞威脅; <5>.Windows、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...