最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis中的配置與優(yōu)化過程

 更新時間:2025年10月09日 14:44:33   作者:ikun·  
本文系統(tǒng)介紹了Redis作為非關(guān)系型數(shù)據(jù)庫的特點,包括其高性能、多數(shù)據(jù)類型支持、內(nèi)存與持久化機制,對比了RDB與AOF的優(yōu)缺點及配置方式,最后講解了內(nèi)存優(yōu)化策略與性能管理方法

一、 Redis 介紹

1. 關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫

數(shù)據(jù)庫按照數(shù)據(jù)庫的結(jié)構(gòu)可以分為關(guān)系型數(shù)據(jù)庫與其他數(shù)據(jù)庫,而這些其他數(shù)據(jù)庫我們將其統(tǒng)稱為非關(guān)系型數(shù)據(jù)庫。

(1) 關(guān)系型數(shù)據(jù)庫

關(guān)系型數(shù)據(jù)庫是一個結(jié)構(gòu)化的數(shù)據(jù)庫,創(chuàng)建在關(guān)系模型基礎(chǔ)上,一般面向于記錄。它借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。關(guān)系模型就是指二維表格模型,因而一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系組成的一個數(shù)據(jù)組織。現(xiàn)實世界中,各種實體與實體之間的各種聯(lián)系都可以用關(guān)系模型來表示。SQL 語句(標準數(shù)據(jù)查詢語言)就是一種基于關(guān)系型數(shù)據(jù)庫的語言,用于執(zhí)行對關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的檢索和操作。

(2) 非關(guān)系型數(shù)據(jù)庫

NoSQL(NoSQL = Not 0nly SQL),意思是“不僅僅是 SQL”,是非關(guān)系型數(shù)據(jù)庫的總稱。主流的 NoSQL 數(shù)據(jù)庫有 Redis、MongBD、Hbase、CouhDB 等等。以上這些非關(guān)系型數(shù)據(jù)庫,他們的存儲方式、存儲結(jié)構(gòu)以及使用的場景都是完全不同的。所以我們認為它是一個非關(guān)系型數(shù)據(jù)庫的集合,而不是像關(guān)系型數(shù)據(jù)庫一樣,是一個統(tǒng)稱。換言之,除了主流的關(guān)系型數(shù)據(jù)庫以外的數(shù)據(jù)庫,都可以認為是非關(guān)系型的。NoSQL 數(shù)據(jù)庫憑借著其非關(guān)系型、分布式、開源及橫向擴展等優(yōu)勢,被認為是下一代數(shù)據(jù)庫產(chǎn)品。

2. Redis 基礎(chǔ)

2.1 Redis 簡介

Redis (RemoteDictionaryServer,遠程字典型)是一個開源的、使用C語言編寫的 NoSQL 數(shù)據(jù)庫。Redis 基于內(nèi)存運行并支持持久化,采用 key-value(鍵值對)的存儲形式,是目前分布式架構(gòu)中不可或缺的一環(huán)。

Redis 服務(wù)器程序是單進程模型,也就是再一臺服務(wù)器上可以同時啟動多個 Redis 進程,而 Redis 的時間處理速度則是完全依靠與主進程的執(zhí)行效率。若再服務(wù)器上只運行一個 Redis 進程,當(dāng)多個客戶端訪問的時,服務(wù)器的處理能力是會有一定程度的下降;若再同一太服務(wù)器上開啟多個 Redis 進程,Redis 在提高并發(fā)處理能力的同時會給服務(wù)器的 CPU 造成很大壓力。即:在實際生產(chǎn)環(huán)境中,需要根據(jù)實際的需求來決定開啟多少個Redis 進程。若對高并發(fā)要求更高一些,可能會考慮在同一臺服務(wù)器上開啟多個進程。若 CPU 資源比較緊張,采用單進程即可。

Redis 具有以下幾個優(yōu)點:

  • 具有極高的數(shù)據(jù)讀寫速度,數(shù)據(jù)讀取的速度最高可達到 110000 次/s,數(shù)據(jù)寫入速度最高可達到 81000 次/s。
  • 支持豐富的數(shù)據(jù)類型,不僅僅支持簡單的 key-value 類型的數(shù)據(jù),還支持Strings,Lists,Hashes,Sets 及 0rdered Sets 等數(shù)據(jù)類型操作。
  • 支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。
  • 原子性,Redis 所有操作都是原子性的
  • 支持數(shù)據(jù)備份,即 master-salve 模式的數(shù)據(jù)備份。

Redis 作為基于內(nèi)存運行的數(shù)據(jù)庫,緩存是其最常應(yīng)用的場景之一。除此之外,Redis常見應(yīng)用場景還包括獲取最新 N個數(shù)據(jù)的操作、排行榜類應(yīng)用、計數(shù)器應(yīng)用、存儲關(guān)系、實時分析系統(tǒng)、日志記錄。

2.2 安裝部署

Redis 的安裝相對于其他服務(wù)來說比較簡單 。首先需要到 Redis 官網(wǎng)(https://www.redis.io)下載相應(yīng)的源碼軟件包,然后上傳至 Linux 系統(tǒng)的服務(wù)器中進行解壓、安裝。本文以 redis-4.0.9.tar.gz 為例進行 Redis 服務(wù)的安裝和配置。

通常情況下,在 Linux 系統(tǒng)中進行源碼編譯安裝,需要先執(zhí)行./configure進行環(huán)境檢查與配置,從而生成 Makefile 文件,再執(zhí)行 make && make install命令進行編譯安裝。而 Redis 源碼包中直接提供了 Makefile 文件,所以在解壓完軟件包后,可直接進入解壓后的軟件包目錄,執(zhí)行make與 make insta11命令進行安裝。

dnf -y install tar gcc zlib-devel
tar xvzf redis-4.0.9. tar.gz
tar xvzf redis-4.0.9. tar.gz
cd redis-4.0.9/
make && make PREFIX=/usr/local/redis install
ln-s /usr/local/redis/bin/* /usr/local/bin/

make insta11 只是安裝了二進制文件到系統(tǒng)中,并沒有啟動腳本和配置文件。

軟件包中默認提供了一個 install server.sh 腳本文件,通過該腳本文件可以設(shè)置 Redis 服務(wù)所需要的相關(guān)配置文件。

當(dāng)腳本運行完畢,Redis 服務(wù)就已經(jīng)啟動,默認偵聽端口為 6379。

 cd utils/
 ./install server.sh
/etc/init.d/redis 6379 start

2.3 配置參數(shù)

Redis 主配置文件為/etc/redis/6379.conf,由注釋行與設(shè)置行兩部分組成。與大多數(shù) Linux 配置文件一樣,注釋性的文字以“#”開始,包含了對相關(guān)配置內(nèi)容進行的說明和解釋。

除了注釋行與空行以外的內(nèi)容即為設(shè)置行。

可根據(jù)生產(chǎn)環(huán)境的需求調(diào)整相關(guān)參數(shù),如下:

vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.10.161 //監(jiān)聽的主機地址
port 6379 //端日
daemonize yes //啟用守護進程
pidfile /var/run/redis 6379.pid //指定 PID 文件
loglevel notice //日志級別
logfile /var/log/redis 6379.1og //指定日志文件

3. Redis 命令工具

Redis 軟件提供了多個命令工具。安裝 Redis 服務(wù)時,所包含的軟件工具會同時被安裝到系統(tǒng)中,在系統(tǒng)中可以直接使用。

這些命令工具的作用分別如下所示:

  • redis-server:用于啟動 Redis 的工具
  • redis-benchmark:用于檢測 Redis 在本機的運行效率
  • redis-check-aof:修復(fù) AOF 持久化文件
  • redis-check-rdb:修復(fù) RDB 持久化文件
  • redis-cli:Redis 命令行工具

3.1 redis-cli 命令行工具

Redis 數(shù)據(jù)庫系統(tǒng)也是一個典型的 C/S(客戶端/服務(wù)器端)架構(gòu)的應(yīng)用,要訪問 Redis 數(shù)據(jù)庫需要使用專門的客戶端軟件。

Redis 服務(wù)的客戶端軟件就是其自帶的 redis-cli 命令行工具。

使用 redis-cli 連接指定數(shù)據(jù)庫,連接成功后會進入提示符為“遠程主機 IP 地址:端口號>”的數(shù)據(jù)庫操作環(huán)境.

3.2 redis-benchmark 測試工具

redis-benchmark 是官方自帶的 Redis 性能測試工具,可以有效的測試Redis 服務(wù)的性能。

基本的測試語法為 redis-benchmark[option] [optionvalue]。

常用選項如下所示:

  • -h:指定服務(wù)器主機名
  • P:指定服務(wù)器端口
  • -s:指定服務(wù)器 socket
  • -c:指定并發(fā)連接數(shù)
  • -n:指定請求數(shù)
  • -d:以字節(jié)的形式指定 SET/GET 值的數(shù)據(jù)大小
  • -k:1=keep alive =reconnect
  • -r:SET/GET/INCR 使用隨機 key,SADD 使用隨機值
  • -p:通過管道傳輸<numreg>請求
  • -q:強制退出 redis。僅顯示 query/sec 值
  • --csv:以CSV 格式輸出
  • -l:生成循環(huán),永久執(zhí)行測試
  • -t:僅運行以逗號分隔的測試命令列表
  • -I:Idle 模式。僅打開 N個idle 連接并等待

4. redis 數(shù)據(jù)庫常用命令

前面提到 Redis 數(shù)據(jù)庫采用 key-value(鍵值對)的數(shù)據(jù)存儲形式。

所使用的命令是 set與 get 命令。

  • set:存放數(shù)據(jù),基本的命令格式為 set key value。
  • get:獲取數(shù)據(jù),基本的命令格式為 get key。

4.1 key 相關(guān)命令

在 Redis 數(shù)據(jù)庫中,與 key 相關(guān)的命令主要包含以下幾種。

(1) keys

用于查找和模式匹配的鍵

KEYS *            # 查看所有鍵
KEYS user:*       # 查看以user:開頭的鍵

(2) exists

檢查鍵是否存在

SET name "Alice"  # 設(shè)置鍵值
EXISTS name       # 返回1(存在)
EXISTS age        # 返回0(不存在)

(3) del

刪除一個或多個鍵

SET a 1 SET b 2    # 設(shè)置兩個鍵
DEL a b           # 刪除兩個鍵,返回2(成功刪除的數(shù)量)

(4) type

獲取鍵的數(shù)據(jù)類型

SET num 100       # 設(shè)置字符串
TYPE num          # 返回string
LPUSH list 1 2    # 創(chuàng)建列表
TYPE list         # 返回list

(5) rename

重命名鍵

SET msg "hello"   # 設(shè)置鍵值
RENAME msg greeting  # 重命名鍵
GET greeting      # 返回"hello"

(6) renamenX

僅在新鍵不存在時重命名

SET old "value"   # 設(shè)置舊鍵
SET new "other"   # 設(shè)置新鍵
RENAMENX old new  # 返回0(新鍵已存在)
DEL new           # 刪除新鍵
RENAMENX old new  # 返回1(重命名成功)

(7) dbsize

查看當(dāng)前數(shù)據(jù)庫的鍵總數(shù)

DBSIZE            # 返回當(dāng)前數(shù)據(jù)庫的鍵數(shù)量

二、 Redis 持久化

1.  RDB 和 AOF 的區(qū)別

維度RDB(快照持久化)AOF(日志持久化)
持久化方式定時生成數(shù)據(jù)庫快照文件(.rdb),保存某一時刻的全量數(shù)據(jù)。記錄所有寫操作命令日志,以追加方式寫入文件(.aof)。
數(shù)據(jù)安全性可能丟失最后一次快照到故障期間的數(shù)據(jù)(取決于快照間隔)。可配置每秒同步(最多丟失 1 秒數(shù)據(jù))或?qū)崟r同步,數(shù)據(jù)更安全。
文件大小快照文件緊湊,占用空間小。日志文件可能較大(需定期重寫)。
恢復(fù)速度加載快照速度快,適合大規(guī)模數(shù)據(jù)恢復(fù)。重放日志速度較慢,尤其是日志文件很大時。
對性能影響快照生成時可能有短暫阻塞(Fork 子進程)。持續(xù)寫入日志對性能影響較小(取決于同步策略)。

2.  RDB 和 AOF 的優(yōu)缺點

2.1 RDB 優(yōu)缺點

優(yōu)點:

  • 文件體積小:適合備份和遠程傳輸,占用磁盤空間少。
  • 恢復(fù)速度快:直接加載二進制快照,比重放日志更快。
  • 對主進程影響小:快照生成由子進程完成,主進程無需阻塞(除 Fork 瞬間)。

缺點

  • 數(shù)據(jù)丟失風(fēng)險:若快照間隔較長(如 5 分鐘),故障時可能丟失大量數(shù)據(jù)。
  • 生成快照時阻塞:Fork 子進程時可能阻塞主進程(取決于數(shù)據(jù)量)。

2.2 AOF 優(yōu)缺點

優(yōu)點:

  • 數(shù)據(jù)安全性高:可配置appendfsync always實時同步,幾乎不丟數(shù)據(jù)。
  • 日志可讀性強:AOF 文件本質(zhì)是命令日志,可手動解析或修改(需謹慎)。
  • 增量寫入:持續(xù)追加日志,無磁盤隨機寫操作,更適合機械硬盤。

缺點

  • 文件膨脹問題:長期寫入會導(dǎo)致 AOF 文件過大,需定期重寫。
  • 恢復(fù)速度慢:重放所有日志命令,數(shù)據(jù)量大時恢復(fù)耗時較長。
  • 性能開銷appendfsync always會降低寫入性能(每次寫操作都同步磁盤)。

3. Redis 持久化配置

3.1 RDB 持久化配置

RDB 配置在redis.conf中,核心參數(shù):

# 快照觸發(fā)條件:900秒內(nèi)至少1個鍵變更,或300秒內(nèi)至少10個鍵變更,或60秒內(nèi)至少10000個鍵變更
save 900 1
save 300 10
save 60 10000

# 禁用RDB(注釋掉所有save配置)
# save ""

# RDB文件名和存儲目錄
dbfilename dump.rdb
dir /var/lib/redis/

3.2 AOF 持久化配置

開啟 AOF 并配置同步策略:

# 啟用AOF
appendonly yes

# AOF同步策略:
# always:每次寫操作都同步磁盤(性能最低,數(shù)據(jù)最安全)
# everysec:每秒同步一次(默認,推薦)
# no:由操作系統(tǒng)決定(性能最高,數(shù)據(jù)可能丟失最多)
appendfsync everysec

# 當(dāng)AOF文件大小超過上次重寫后體積的100%時觸發(fā)自動重寫
auto-aof-rewrite-percentage 100
# 當(dāng)AOF文件至少達到64MB時才觸發(fā)自動重寫
auto-aof-rewrite-min-size 64mb

4. AOF 重寫

  • 作用:壓縮 AOF 文件,移除冗余命令(如多次修改同一鍵的歷史操作)。
  • 觸發(fā)方式:手動觸發(fā):BGREWRITEAOF命令。自動觸發(fā):滿足auto-aof-rewrite-percentageauto-aof-rewrite-min-size配置。
  • 原理:Redis 通過子進程遍歷當(dāng)前數(shù)據(jù)庫,生成新的 AOF 日志(僅包含最終數(shù)據(jù)狀態(tài)的命令),并替換舊文件,過程中不阻塞主進程(基于 Copy-On-Write 機制)。

三、 性能管理

1. 內(nèi)存碎片化

  • 原因:Redis 使用內(nèi)存分配器(如 jemalloc)管理內(nèi)存,分配和釋放小對象時可能產(chǎn)生碎片。
  • 查看方式:通過INFO memory命令查看mem_fragmentation_ratio(理想值 1.0~1.5)。
  • 解決方法:重啟 Redis(重建內(nèi)存布局)。調(diào)整分配器參數(shù)(如 jemalloc 的malloc_profile)或更換分配器(如 tcmalloc)。

2. 內(nèi)存使用率

2.1 針對緩存數(shù)據(jù)大小選擇

  • 避免存儲過大的 value(如大字符串),可拆分為多個小 key 或使用壓縮(如COMPRESS命令)。
  • 示例:存儲 100 萬用戶信息時,用Hash結(jié)構(gòu)(HSET user:1 name "Alice")比 100 萬個字符串鍵更省空間。

2.2 使用 Hash 數(shù)據(jù)結(jié)構(gòu)

當(dāng)數(shù)據(jù)包含多個字段時,用Hash代替多個獨立字符串鍵:

# 推薦方式(節(jié)省內(nèi)存)
HSET user:1 name "Alice" age 25 city "Beijing"

# 不推薦方式(每個字段一個鍵)
SET user:1:name "Alice"
SET user:1:age "25"
SET user:1:city "Beijing"

2.3 設(shè)置 key 的過期時間

  • 對臨時數(shù)據(jù)設(shè)置過期時間(EXPIRE key seconds),避免無用數(shù)據(jù)長期占用內(nèi)存。

3. 回收 key

過期策略

  • 惰性刪除:獲取 key 時檢查是否過期,過期則刪除。
  • 定期刪除:Redis 定期隨機檢查部分 key,刪除過期鍵。

內(nèi)存淘汰策略(當(dāng)內(nèi)存不足時):

  • volatile-lru:從設(shè)置過期時間的鍵中刪除最久未使用的。
  • allkeys-lru:從所有鍵中刪除最久未使用的(推薦常用場景)。
  • volatile-random:隨機刪除設(shè)置過期時間的鍵。
  • noeviction:拒絕寫入操作(默認策略,需手動配置為其他策略)。

配置方式

  • redis.conf中設(shè)置maxmemory-policy allkeys-lru。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis實現(xiàn)分布式鎖的示例代碼

    Redis實現(xiàn)分布式鎖的示例代碼

    分布式鎖其實就是,控制分布式系統(tǒng)不同進程共同訪問共享資源的一種鎖的實現(xiàn),本文就來介紹一下Redis實現(xiàn)分布式鎖的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Redis在多線程情況下寫入失敗的問題及解決

    Redis在多線程情況下寫入失敗的問題及解決

    文章描述了在JRE 7 32位環(huán)境下使用Jedis客戶端并發(fā)調(diào)用`set`方法時出現(xiàn)的問題,懷疑是多線程環(huán)境下獲取連接導(dǎo)致的卡死,通過使用連接池和在JDK 8 64位環(huán)境下進行測試,問題得到解決
    2025-11-11
  • 圖文詳解Windows下使用Redis緩存工具的方法

    圖文詳解Windows下使用Redis緩存工具的方法

    這篇文章以圖文結(jié)合的方式詳解Windows下使用Redis緩存工具的方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 解鎖redis鎖的正確姿勢

    解鎖redis鎖的正確姿勢

    這篇文章主要為大家詳細介紹了解鎖redis鎖的正確姿勢,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 一文了解發(fā)現(xiàn)并解決Redis熱key與大key問題

    一文了解發(fā)現(xiàn)并解決Redis熱key與大key問題

    熱key是服務(wù)端的常見問題,本文主要介紹Redis熱key與大key問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Redis處理高并發(fā)機制原理及實例解析

    Redis處理高并發(fā)機制原理及實例解析

    這篇文章主要介紹了Redis處理高并發(fā)機制原理及實例解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值析,需要的朋友可以參考下
    2020-08-08
  • 使用Redis快速實現(xiàn)共享Session登錄的詳細步驟

    使用Redis快速實現(xiàn)共享Session登錄的詳細步驟

    在Web開發(fā)中,Session通常用于存儲用戶的會話信息,允許用戶在多個頁面之間保持登錄狀態(tài),Redis是一個開源的高性能鍵值數(shù)據(jù)庫,廣泛用于緩存、消息隊列、會話存儲等場景,本文給大家介紹了如何使用Redis實現(xiàn)共享Session登錄,需要的朋友可以參考下
    2025-08-08
  • 防止redis內(nèi)存溢出優(yōu)化方法

    防止redis內(nèi)存溢出優(yōu)化方法

    本文主要介紹了防止redis內(nèi)存溢出優(yōu)化方法,包括使用maxmemory-policy選項、設(shè)置數(shù)據(jù)過期時間和配置Redis集群等,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Redis 數(shù)據(jù)類型的詳解

    Redis 數(shù)據(jù)類型的詳解

    這篇文章主要介紹了Redis 數(shù)據(jù)類型的詳解的相關(guān)資料,支持五種數(shù)據(jù)類型,字符串,哈希,列表,集合及zset,需要的朋友可以參考下
    2017-08-08
  • Redis Template使用詳解示例教程

    Redis Template使用詳解示例教程

    RedisTemplate的底層通過RedisConnectionFactory對多種Redis驅(qū)動進行集成,上層通過RedisOperations提供豐富的API,并結(jié)合Spring基于泛型的bean注入,為開發(fā)提供了極大的便利,這篇文章主要介紹了Redis Template使用詳解示例教程,需要的朋友可以參考下
    2023-11-11

最新評論

东兴市| 昭苏县| 湟源县| 陆川县| 济阳县| 岫岩| 杂多县| 九龙县| 龙里县| 万州区| 永川市| 香河县| 峨山| 阿城市| 淳化县| 昌吉市| 澎湖县| 揭东县| 北票市| 中牟县| 瓮安县| 陆河县| 锦屏县| 华亭县| 黔西县| 开平市| 尼木县| 凯里市| 寻甸| 咸丰县| 铜梁县| 双柏县| 贵德县| 彩票| 石屏县| 南木林县| 玉田县| 邯郸县| 南丹县| 辽宁省| 临洮县|