搜尋
首頁資料庫RedisRedis6.0中有哪些新特性?一起來看看吧!

這篇文章和大家一起了解下Redis6.0中的新功能。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

Redis6.0中有哪些新特性?一起來看看吧!

Redis 6.0 來了

Redis 6.0.0 穩定版(GA)終於發布,這個版本提供了許多令人心動的新特性及功能改進,例如新網路協定RESP3,新的叢集代理,ACL等,其中關注度最高的應該是“多執行緒”了,帶著眾多疑問,我們來一起開始“Redis 6.0 新特性” 。 【相關推薦:Redis影片教學

1. Redis6.0之前的版本真的是單執行緒嗎?

Redis在處理客戶端的請求時,包括獲取(socket 讀)、解析、執行、內容返回(socket 寫) 等都由一個順序串行的主線程處理,這就是所謂的「單線程」。但如果嚴格來講從Redis4.0之後並不是單線程,除了主線程外,它也有後台線程在處理一些較為緩慢的操作,例如清理髒數據、無用連接的釋放、大 key 的刪除等等。

2. Redis6.0之前為什麼一直不使用多執行緒?

官方曾經做過類似問題的回應:使用Redis時,幾乎不存在CPU成為瓶頸的情況, Redis主要受限於記憶體和網路。例如在一個普通的Linux系統上,Redis透過使用pipelining每秒可以處理100萬個請求,所以如果應用程式主要使用O(N)或O(log(N))的命令,它幾乎不會佔用太多CPU。

使用了單執行緒後,可維護性高。多執行緒模型雖然在某些方面表現優異,但是它卻引入了程式執行順序的不確定性,帶來了並發讀寫的一系列問題,增加了系統複雜度、同時可能存在執行緒切換、甚至加鎖解鎖、死鎖造成的效能損耗。 Redis透過AE事件模型以及IO多路復用等技術,處理效能非常高,因此沒有必要使用多執行緒。單線程機制使得 Redis 內部實現的複雜度大大降低,Hash 的惰性 Rehash、Lpush 等等 “線程不安全” 的命令都可以無鎖進行。

3.Redis6.0為什麼要引進多執行緒呢?

Redis將所有資料放在記憶體中,記憶體的回應時長大約為100奈秒,對於小型資料包,Redis伺服器可以處理80,000到100,000 QPS,這也是Redis處理的極限了,對於80%的公司來說,單線程的Redis已經足夠使用了。

但隨著越來越複雜的業務場景,有些公司動不動就上億的交易量,因此需要更大的QPS。常見的解決方案是在分散式架構中對資料進行分區並採用多個伺服器,但該方案有非常大的缺點,例如要管理的Redis伺服器太多,維護代價大;某些適用於單一Redis伺服器的命令不適用於資料分區;資料分區無法解決熱點讀取/寫入問題;資料偏斜,重新分配和放大/縮小變得更加複雜等等。

從Redis自身角度來說,因為讀寫網路的read/write系統呼叫佔用了Redis執行期間大部分CPU時間,瓶頸主要在於網路的IO 消耗, 最佳化主要有兩個方向:

• 提高網路IO 效能,典型的實作例如使用DPDK 來取代核心網路堆疊的方式
• 使用多執行緒充分利用多核心,典型的實作例如Memcached。

協定棧優化的這種方式跟 Redis 關係不大,支援多執行緒是一種最有效、最便捷的操作方式。所以總結起來,redis支援多執行緒主要是兩個原因:

• 可以充分利用伺服器CPU 資源,目前主執行緒只能利用一個核
• 多執行緒任務可以分攤Redis 同步IO 讀寫負載

4.Redis6.0預設是否開啟了多執行緒?

Redis6.0的多執行緒預設是停用的,只使用主執行緒。如需開啟需要修改redis.conf設定檔:io-threads-do-reads yes

Redis6.0中有哪些新特性?一起來看看吧!

#5.Redis6.0多執行緒開啟時,執行緒數如何設定?

開啟多執行緒後,還需要設定執行緒數,否則是不生效的。同樣修改redis.conf配置文件

Redis6.0中有哪些新特性?一起來看看吧!

關於線程數的設置,官方有一個建議:4核的機器建議設置為2或3個線程,8核的建議設定為6個線程,線程數一定要小於機器核數。還要注意的是,線程數並不是越大越好,官方認為超過了8個基本就沒什麼意義了。

6.Redis6.0採用多執行緒後,效能的提升效果如何?

Redis 作者 antirez 在 RedisConf 2019分享時曾提到:Redis 6 引入的多執行緒 IO 特性對效能提升至少是一倍以上。國內也有大牛曾使用unstable版本在阿里雲esc進行過測試,GET/SET 命令在4線程 IO時性能相比單線程是幾乎是翻倍了。

測試環境

Redis Server: 阿里雲Ubuntu 18.04,8 CPU 2.5 GHZ, 8G 內存,主機型號ecs.ic5.2xlarge
Redis Benchmark Client:阿里雲Ubuntu 18.04,8 2.5 GHZ CPU, 8G 內存,主機型號ecs.ic5.2xlarge

測試結果
Redis6.0中有哪些新特性?一起來看看吧!

#詳見:https://zhuanlan.zhihu.com/p/76788470

說明1:這些效能驗證的測試並沒有針對嚴謹的延時控制和不同並發的場景進行壓測。數據僅供驗證參考而不能作為線上指標。

說明2:如果開啟多線程,至少要4核心的機器,且Redis實例已經佔用相當大的CPU耗時的時候才建議採用,否則使用多線程沒有意義。所以估計80%的公司開發人員看看就好。

7.Redis6.0多執行緒的實作機制?

Redis6.0中有哪些新特性?一起來看看吧!

流程簡述如下

1、主執行緒負責接收建立連線請求,取得socket 放入全域等待讀取處理佇列
2、主執行緒處理完讀事件之後,透過RR(Round Robin) 將這些連線分配給這些IO 執行緒
3、主執行緒阻塞等待IO 執行緒讀取socket 完畢
4 、主執行緒透過單一執行緒的方式執行請求指令,請求資料讀取並解析完成,但不執行
5、主執行緒阻塞等待IO 執行緒將資料回寫socket 完畢
6、解除綁定,清空等待隊列
Redis6.0中有哪些新特性?一起來看看吧!
(圖片來源:https://ruby-china.org/topics/38957)

該設計有以下特點:
1、IO 線程要么同時在讀socket,要嘛同時寫,不會同時讀或寫
2、IO 執行緒只負責讀寫socket 解析指令,不負責指令處理

8.開啟多執行緒後,是否會存在線程並發安全性問題?

從上面的實作機制可以看出,Redis的多執行緒部分只是用來處理網路資料的讀寫和協定解析,執行指令仍然是單執行緒順序執行。所以我們不需要去考慮控制 key、lua、事務,LPUSH/LPOP 等等的並發及線程安全問題。

9.Linux環境上如何安裝Redis6.0.1(6.0的正式版是6.0.1)?

這個和安裝其他版本的redis沒有任何差別,整個流程跑下來也沒有任何的坑,所以這裡就不做描述了。唯一要注意的就是配置多執行緒數一定要小於cpu的核心數,查看核心數量指令:

[root@centos7.5 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3

10.Redis6.0的多執行緒與Memcached多執行緒模型進行比較

前幾年memcached 是各大網路公司常用的快取方案,因此redis 和memcached 的區別基本上成了面試官快取方面必問的面試題,最近幾年memcached用的少了,基本都是redis。不過隨著Redis6.0加入了多執行緒特性,類似的問題可能還會出現,接下來我們只針對多執行緒模型來簡單比較一下。

Redis6.0中有哪些新特性?一起來看看吧!

如上圖所示:Memcached 伺服器採用 master-woker 模式進行工作,服務端採用 socket 與客戶端通訊。主線程、工作線程 採用 pipe管道進行通訊。主線程採用libevent 監聽listen、accept 的讀取事件,事件回應後將連接訊息的資料結構封裝起來,根據演算法選擇合適的工作線程,將連接任務攜帶連接訊息分發出去,相應的線程利用連接描述符建立與客戶端的socket連接並進行後續的存取資料操作。

Redis6.0與Memcached多執行緒模型比較:
相同點:都採用了master執行緒-worker 執行緒的模型
不同點:Memcached 執行主邏輯也是在worker 執行緒裡,模型更加簡單,實現了真正的執行緒隔離,符合我們對執行緒隔離的常規理解。而 Redis 把處理邏輯交還給 master 線程,雖然某種程度上增加了模型複雜度,但也解決了線程並發安全等問題。

11.Redis作者是如何點評 「多執行緒」這個新功能的?

關於多執行緒這個特性,在6.0 RC1時,Antirez曾經做過說明:

Redis支援多執行緒有2種可行的方式:第一種就是像「memcached」一樣,一個Redis實例開啟多個線程,從而提升GET/SET等簡單命令中每秒可以執行的操作。這涉及到I/O、命令解析等多線程處理,因此,我們將其稱之為“I/O threading”。另一種是允許在不同的執行緒中執行較耗時較慢的命令,以確保其它客戶端不會被阻塞,我們將這種執行緒模型稱為「Slow commands threading」。

經過深思熟慮,Redis不會採用“I/O threading”,redis在運行時主要受制於網絡和內存,所以提升redis性能主要是通過在多個redis實例,特別是redis集群。接下來我們主要會考慮改進兩個面向:
1.Redis叢集的多個實例透過編排能夠合理地使用本地實例的磁碟,避免同時重寫AOF。
2.提供一個Redis叢集代理,方便使用者在沒有較好的叢集協定客戶端時抽象化一個叢集。

補充說明一下,Redis和memcached一樣是記憶體系統,但不同於Memcached。多執行緒是複雜的,必須考慮使用簡單的資料模型,執行LPUSH的執行緒需要服務其他執行LPOP的執行緒。

我真正期望的實際上是“slow operations threading”,在redis6或redis7中,將提供“key-level locking”,使得線程可以完全獲得對鍵的控制以處理緩慢的操作。

詳見:http://antirez.com/news/126

12.Redis線程中經常提到IO多路復用,如何理解?

這是IO模型的一種,即經典的Reactor設計模式,有時也稱為非同步阻塞IO。
Redis6.0中有哪些新特性?一起來看看吧!

多路指的是多個socket連接,複用指的是複用一個執行緒。多路復用主要有三種技術:select,poll,epoll。 epoll是最新的也是目前最好的多路復用技術。採用多路I/O 復用技術可以讓單一執行緒高效的處理多個連線請求(盡量減少網路IO的時間消耗),且Redis在記憶體中操作資料的速度非常快(記憶體內的操作不會成為這裡的效能瓶頸),主要以上兩點造就了Redis具有很高的吞吐量。

13.你知道Redis的彩蛋LOLWUT嗎?

這其實從Redis5.0就開始有了,但原諒我剛剛知道。作者是這麼描述這個功能的《LOLWUT: a piece of art inside a database command》,「資料庫指令中的一件藝術品」。你可以把它稱之為情懷,也可以稱之為彩蛋,具體是什麼,我就不透露了。和我一樣不清楚是什麼的小夥伴可以參考:http://antirez.com/news/123,每次運行都會隨機產生的噢。

Redis6.0中有哪些新特性?一起來看看吧!

更多程式相關知識,請造訪:程式設計入門! !

以上是Redis6.0中有哪些新特性?一起來看看吧!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
REDIS:了解其架構和目的REDIS:了解其架構和目的Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

REDIS與SQL數據庫:關鍵差異REDIS與SQL數據庫:關鍵差異Apr 25, 2025 am 12:02 AM

Redis和SQL數據庫的主要區別在於:Redis是內存數據庫,適用於高性能和靈活性需求;SQL數據庫是關係型數據庫,適用於復雜查詢和數據一致性需求。具體來說,1)Redis提供高速數據訪問和緩存服務,支持多種數據類型,適用於緩存和實時數據處理;2)SQL數據庫通過表格結構管理數據,支持複雜查詢和事務處理,適用於電商和金融系統等需要數據一致性的場景。

REDIS:它如何充當數據存儲和服務REDIS:它如何充當數據存儲和服務Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS與其他數據庫:比較分析REDIS與其他數據庫:比較分析Apr 23, 2025 am 12:16 AM

Redis與其他數據庫相比,具有以下獨特優勢:1)速度極快,讀寫操作通常在微秒級別;2)支持豐富的數據結構和操作;3)靈活的使用場景,如緩存、計數器和發布訂閱。選擇Redis還是其他數據庫需根據具體需求和場景,Redis在高性能、低延遲應用中表現出色。

REDIS的角色:探索數據存儲和管理功能REDIS的角色:探索數據存儲和管理功能Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

REDIS:了解NOSQL概念REDIS:了解NOSQL概念Apr 21, 2025 am 12:04 AM

Redis是一種NoSQL數據庫,適用於大規模數據的高效存儲和訪問。 1.Redis是開源的內存數據結構存儲系統,支持多種數據結構。 2.它提供極快的讀寫速度,適合緩存、會話管理等。 3.Redis支持持久化,通過RDB和AOF方式確保數據安全。 4.使用示例包括基本的鍵值對操作和高級的集合去重功能。 5.常見錯誤包括連接問題、數據類型不匹配和內存溢出,需注意調試。 6.性能優化建議包括選擇合適的數據結構和設置內存淘汰策略。

REDIS:現實世界的用例和示例REDIS:現實世界的用例和示例Apr 20, 2025 am 12:06 AM

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

REDIS:探索其功能和功能REDIS:探索其功能和功能Apr 19, 2025 am 12:04 AM

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器