自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RedisServer、RedisDB與數(shù)據(jù)字典Dict

數(shù)據(jù)庫 Redis
本文通過講解 RedisServer、RedisDB與數(shù)據(jù)字典Dict之間的聯(lián)系,同時通過分析Set指令(v7.0 版本目前有240個命令)的執(zhí)行過程,可以對其底層原理有更深的認知。

1、關(guān)于Redis

眾所周知Redis是流行的、開源的,使用C語言開發(fā)的高性能,基于內(nèi)存的key/value數(shù)據(jù)庫。它具有高效、精心設(shè)計的底層數(shù)據(jù)結(jié)構(gòu),同時支持多種數(shù)據(jù)類型(string、list、set、zset、hash、bitmap、geo、hyperloglog等),讓其能夠擁有100K+/s的讀寫性能。正是由于這些優(yōu)勢讓它在眾多數(shù)據(jù)庫中脫穎而出,支撐著眾多互聯(lián)網(wǎng)公司的海量業(yè)務(wù)。

那么你有沒有想過,它的底層是如何運作的?本文從RedisServer的底層結(jié)構(gòu)入手,并通過追溯Set指令操作過程與key的過期時間窺探一下運行原理。

2、redisServer、redisDB與數(shù)據(jù)字典dict

Redis服務(wù)是常見的c/s架構(gòu)設(shè)計,即:Redis client客戶端通過與Redis Server服務(wù)端建立連接后對存儲在Redis Server端的數(shù)據(jù)進行操作。Redis Server作為一個單獨的進程運行在計算機上,其對數(shù)據(jù)進行操作的工作線程為單線程,減少了鎖開銷以及上下文的切換。

在Redis Server進程內(nèi)部有一個全局變量redisServer,存儲著當(dāng)前Redis Server的所有數(shù)據(jù)庫、key/value數(shù)據(jù)以及其他眾多信息,在Redis Server完全啟動并對外服務(wù)之前對其進行初始化、賦予默認值等操作,它是運行時的一個重要數(shù)據(jù)入口。

從上圖可知,Redis Server默認共擁有(0-15,自定義最大為0-255)16個數(shù)據(jù)庫(redisDB),每個數(shù)據(jù)庫包含有若干數(shù)據(jù)字典(dict),每個數(shù)據(jù)字典存儲不同意義的數(shù)據(jù)。例如:redisDb.dict 是存儲當(dāng)前數(shù)據(jù)庫所有key/value的keyspace,redisDb.expires 是存儲當(dāng)前數(shù)據(jù)庫所有設(shè)置了過期時間的keyspace。

查詢數(shù)據(jù)時從數(shù)據(jù)字典 redisDb.dict 中獲取,判斷/獲取key的過期時間等操作時從數(shù)據(jù)字典 redisDb.expires 中獲取。每個數(shù)據(jù)字典存儲數(shù)據(jù)時,考慮擴容等因素會有用2個 ht_table,在未擴容時數(shù)據(jù)全部存儲在 ht_table[0],否則可能在 ht_table[0]ht_table[1] 都存有數(shù)據(jù),ht_table 使用 bucket+鏈表(不同key在經(jīng)過hash計算之后發(fā)生碰撞,會存儲在同一個bucket的鏈表中)的形式存儲具體的key/value。

3、redis client如何與數(shù)據(jù)庫建立聯(lián)系

每當(dāng)redis client客戶端與Redis Server服務(wù)端建立連接之后,Redis Server為該客戶端創(chuàng)建結(jié)構(gòu)體 client 用于存儲客戶端相關(guān)信息,其中就包含客戶端所使用的數(shù)據(jù)庫(默認為0,可以通過select指令選擇其他數(shù)據(jù)庫)。然后Redis Server服務(wù)端通過雙向鏈表把這些client連接起來,存儲到全局變量redisServer的clients字段中。就這樣redis client客戶端與Redis數(shù)據(jù)庫建立了聯(lián)系,后續(xù)就能直接找到對應(yīng)數(shù)據(jù)庫進行讀、寫等操作。

每當(dāng)redis client客戶端發(fā)送命令到服務(wù)端之后,Redis Server通過 client.db 找到對應(yīng)的數(shù)據(jù)庫,然后進行相關(guān)操作。

4、Set指令執(zhí)行過程

5、小結(jié)

本文通過講解 redisServer、redisDB與數(shù)據(jù)字典dict之間的聯(lián)系,同時通過分析Set指令(v7.0 版本目前有240個命令)的執(zhí)行過程,可以對其底層原理有更深的認知。

曾經(jīng)有一位技術(shù)大咖說過:若想學(xué)習(xí)一個好的開源項目,那么首推Redis,無論從代碼功能、變量聲明,甚至從注釋來看都無可挑剔。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2015-07-22 17:21:34

Oracle數(shù)據(jù)字典

2023-03-06 07:48:01

數(shù)據(jù)字典Spring

2010-04-09 10:13:13

Oracle數(shù)據(jù)字典

2010-04-28 17:49:41

Oracle數(shù)據(jù)字典

2010-04-22 09:36:56

Oracle數(shù)據(jù)字典

2010-03-31 16:38:02

Oracle數(shù)據(jù)字典

2010-04-06 17:17:16

Oracle數(shù)據(jù)字典

2022-10-10 08:01:08

MySQL字典表

2010-04-27 16:18:26

Oracle數(shù)據(jù)字典

2010-05-10 15:22:34

Oracle數(shù)據(jù)字典

2010-07-14 13:50:48

SQL Server數(shù)

2010-11-15 16:08:15

ORACLE系統(tǒng)表

2023-03-04 20:50:19

MySQL字典InnoDB

2010-04-14 14:09:38

Oracle管理腳本

2012-02-02 13:45:28

JavaJSP

2018-03-16 15:30:45

數(shù)據(jù)庫MySQL數(shù)據(jù)字典

2010-04-06 17:36:15

Oracle數(shù)據(jù)字典

2010-04-22 10:00:41

Oracle數(shù)據(jù)字典

2024-07-26 10:50:51

SpringScrew數(shù)據(jù)庫

2009-10-22 16:35:48

Oracle系統(tǒng)管理員Oracle數(shù)據(jù)字典
點贊
收藏

51CTO技術(shù)棧公眾號