redis(二)內部機制的介紹和啟動過程

2022-07-24 07:30:13 字數 2332 閱讀 4371

redis是一種非關係型資料庫,採用=key,value的形式來儲存資料。key是二進位制資料,對於value的資料型別,redis支援string、hash、list、set、sorted set五種型別。

對於單個redis例項,內部使用多執行緒通訊,但是對外採用resp單執行緒通訊協議,在tcp層通過二進位制方式進行傳輸資料,單執行緒採用同步的請求方式。

redis服務端內部結構為struct redisserver和struct redisdb。redis中預設16個資料庫,可以通過配置來修改資料庫數量,每乙個資料庫對應乙個redisdb。資料庫之間的資料是相互獨立的。查詢資料的時候,可以通過select指定具體某個資料庫。

struct redisserver ;

struct redisdb ;

redisdb中三個字典中的key共享物件,value值不一樣。對於過期的鍵,redis採用惰性刪除和定時刪除相結合的方式,惰性刪除,指執行之前會檢視這個key是否過期,定時刪除值一段時間之後分多次遍歷資料庫,每次只刪除部分過期的資料。

redis-server通過tcp埠或socket來建立和redis-cli的連線,可以修改redis.conf中的maxclients來指定最大連線數,在建立連線之後,socket會被設定為非阻塞模式,同時創造乙個struct redisclient來儲存客戶端的連線資訊。

struct redisclient ;
db:是乙個指標,指向redis伺服器狀態結構中的「db」陣列其中乙個元素,表示當前客戶端正在使用的資料庫。預設情況下,redis客戶端的目標資料庫為0號資料庫,可以通過select命令切換,所以select命令的實現原理為:修改redisclient.db指標,讓它指向伺服器中指定的資料庫。

fd:連線當前客戶端與redis伺服器的套接字描述符。值為-1表示偽客戶端(aof檔案或者lua指令碼),值大於-1則表示普通客戶端。redis客戶端分為普通客戶端與偽客戶端兩種型別,其中通過網路連線與redis伺服器進行連線的就是普通客戶端,反之則是偽客戶端了。偽客戶端也有兩種型別,分別是lua指令碼的偽客戶端和aof檔案的偽客戶端。redis伺服器狀態結構的「lua_client」屬性就儲存了lua指令碼的偽客戶端,它會在redis伺服器初始化時就被建立,負責執行lua指令碼中包含的redis命令,在伺服器執行的整個生命週期一直存在,直至伺服器關閉才會關閉。而aof偽客戶端則是在載入aof檔案時被建立,用於執行aof檔案中的redis命令,在aof檔案載入完成之後被關閉。client list:列出目前所有連線到伺服器的普通客戶端。

redis中的事件分為檔案事件和時間事件

檔案事件:指的是通過epoll實現io多路復用程式來監聽多個套接字,對讀、寫、關閉、連線都支援事務,支援原子操作。

時間事件:指的是redis中在默寫特定時間執行操作,主要有定時事件和週期性事件。所有的時間事件會被放在乙個無須列表中,新加入的事件會在事件的頭部插入。每次執行事件的時候都會去遍歷列表。正常情況下只有乙個servercron時間時間,在benchmark模式下,也只有兩個時間事件。

(1)初始化伺服器狀態結構

新建立乙個struct redisserver型別的例項變數作為伺服器的狀態,記錄著整個伺服器的狀態,並為結構中的各個屬性設定預設值,例如:伺服器的執行id、預設配置檔案路徑、預設埠等等,同時建立redis命令表。

(2)載入配置選項

載入使用者指定的配置引數和配置檔案,並根據使用者設定的配置,對伺服器狀態變數的相關屬性進行修改。

(3)初始化伺服器資料結構

這一步主要是為伺服器狀態中的一些資料結構分配記憶體,例如:

「clients「:鍊錶,儲存所有與伺服器連線的客戶端的狀態結構。

」db「:字典儲存伺服器的所有資料庫。

」lua「:用於執行lua指令碼的lua環境。

」slowlog「:用於儲存慢查詢日誌。

除此之外,還會進行一些非常重要的設定操作,例如:

為伺服器設定程序訊號處理器。

建立共享物件,例如經常經常用到的「ok」回覆字串物件,1到10000的字串物件等等。

為servercron函式建立時間事件。

如果aof持久化功能已經開啟,則開啟現有的aof檔案,若aof檔案不存在,則建立並開啟乙個新的aof檔案,為aof寫入做好準備。

初始化伺服器的後台i/o模組,為將來的i/o操作做好準備。

(4)還原資料庫狀態

若伺服器啟用了aof持久化功能,則載入aof檔案,否則載入rdb檔案,根據aof檔案或rdb檔案記錄的內容還原資料庫狀態,同時在日誌檔案中列印出載入檔案並還原資料庫狀態所耗費的時長。

(5)執行事件迴圈

一切準備就緒,開始執行伺服器的事件迴圈,開始接受客戶端的連線請求,處理客戶端傳送的命令請求。

redis的介紹和使用(二)

本次在windows中進行操作演示,所以介紹的是windows下redis的安裝方法。安裝方法 解壓redis壓縮包就是安裝完畢了 開啟方法 雙擊redis server.exe就啟動了redis服務,占用埠為6379 關閉方法 關閉redis的控制台就可以關閉redis服務了。存string型別資...

ViewPage和內部View的事件機制

根據滑動的距離和快慢,會有兩種情況 1.當緩慢滑動很短距離,viewpager和view的事件都會執行 2.當快速滑動很長的距離,viewpager的事件全部執行,但是view的事件會執行cancel事件,表示取消執行view的事件,並且之後都不在執行view的事件 1.自定義乙個myviewpag...

有關Linux中Redis的更改密碼和啟動和停止

由於國家的護網行動,所以要給專案的redis更改密碼。首先進入到linux中redis中的bin目錄裡,我們公司的redis在 home tongweb redis 4.0.1中。修改密碼在redis.conf中修改 vi redis.conf 進入。找到requirepass 把後面的密碼改掉。w...