www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]提到Redis,大家一定會(huì)想到的幾個(gè)點(diǎn)是什么呢?高并發(fā)、KV存儲(chǔ)、內(nèi)存數(shù)據(jù)庫(kù)、豐富的數(shù)據(jù)結(jié)構(gòu)、單線程(版本6之前)等。那么,接下來,上面提到的這些,都會(huì)一一給大家解答,帶大家系統(tǒng)剖析一下Redis的架構(gòu)設(shè)計(jì)魅力!

-? ? ? 01、不一樣的Redis? ? -

提到Redis,大家一定會(huì)想到的幾個(gè)點(diǎn)是什么呢?

高并發(fā)、KV存儲(chǔ)、內(nèi)存數(shù)據(jù)庫(kù)、豐富的數(shù)據(jù)結(jié)構(gòu)、單線程(版本6之前)等。

那么,接下來,上面提到的這些,都會(huì)一一給大家解答,帶大家系統(tǒng)剖析一下Redis的架構(gòu)設(shè)計(jì)魅力!


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 02、為什么會(huì)出現(xiàn)緩存?? ? -



一般情況下,數(shù)據(jù)都是在數(shù)據(jù)庫(kù)中,應(yīng)用系統(tǒng)直接操作數(shù)據(jù)庫(kù)。當(dāng)訪問量上萬(wàn),數(shù)據(jù)庫(kù)壓力增大,這個(gè)時(shí)候,怎么辦呢?


有小伙伴會(huì)說,分庫(kù)分表、讀寫分離。的確,這些確實(shí)是解決比較高的訪問量的解決辦法,但是,如果訪問量更大,10萬(wàn),100萬(wàn)呢?怎么分似乎都不解決問題吧,所以我們需要用到其他辦法,來解決高并發(fā)帶來的數(shù)據(jù)庫(kù)壓力。


這個(gè)時(shí)候,緩存出現(xiàn)了,顧名思義,就是先把數(shù)據(jù)緩存在內(nèi)存中一份,當(dāng)訪問的時(shí)候,我們會(huì)先訪問內(nèi)存的數(shù)據(jù),如果內(nèi)存中的數(shù)據(jù)不存在,這個(gè)時(shí)候,我們?cè)偃プx取數(shù)據(jù)庫(kù),之后把數(shù)據(jù)庫(kù)中的數(shù)據(jù)再備份一份到內(nèi)存中,這樣下次讀請(qǐng)求過來的時(shí)候,還是會(huì)直接先從內(nèi)存中訪問,訪問到內(nèi)存的數(shù)據(jù)了之后就直接返回了。這樣做就完美的降低了數(shù)據(jù)庫(kù)的壓力,可能十萬(wàn)個(gè)請(qǐng)求進(jìn)來,全部都訪問了內(nèi)存中備份的數(shù)據(jù),而沒有去訪問數(shù)據(jù)庫(kù),或者說只有少量的請(qǐng)求訪問到了數(shù)據(jù)庫(kù),這樣真的是大大降低了數(shù)據(jù)庫(kù)的壓力,而且這樣做也提高了系統(tǒng)響應(yīng),大家想一下,內(nèi)存的讀寫速度是遠(yuǎn)遠(yuǎn)大于硬盤的讀寫速度的,一個(gè)請(qǐng)求進(jìn)來讀取的內(nèi)存可以比讀取硬盤快很多很多,用戶的體驗(yàn)也會(huì)很高。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 03、什么是緩存?? ? -



緩存原指CPU上的一種高速存儲(chǔ)器,它先于內(nèi)存與CPU交換數(shù)據(jù),速度很快。

現(xiàn)在泛指存儲(chǔ)在計(jì)算機(jī)上的原始數(shù)據(jù)的復(fù)制集,便于快速訪問。

在互聯(lián)網(wǎng)技術(shù)中,緩存是系統(tǒng)快速響應(yīng)的關(guān)鍵技術(shù)之一。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 04、緩存的三種讀寫模式? ? -



1、Cache Aside Pattern(常用)

Cache Aside Pattern(旁路緩存),是最經(jīng)典的緩存+數(shù)據(jù)庫(kù)讀寫模式。

讀的時(shí)候,先讀緩存,緩存沒有的話,就讀數(shù)據(jù)庫(kù),然后取出數(shù)據(jù)后放入緩存,同時(shí)返回響應(yīng)。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


更新的時(shí)候,先更新數(shù)據(jù)庫(kù),然后再刪除緩存。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


為什么是刪除緩存,而不是更新緩存呢?

1、緩存的值是一個(gè)結(jié)構(gòu),hash、list等更新數(shù)據(jù)需要遍歷;

2、懶加載,使用的時(shí)候才更新緩存,也可以采用異步的方式填充緩存。


高并發(fā)臟讀的三種情況:

1、先更新數(shù)據(jù)庫(kù),在更新緩存;

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


update與commit之間,更新緩存,commit失敗,則DB與緩存數(shù)據(jù)不一致。


2、先刪除緩存,再更新數(shù)據(jù)庫(kù)

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


update與commit之間,有新的讀,緩存空,讀DB數(shù)據(jù)到緩存,數(shù)據(jù)是舊的數(shù)據(jù);

commit后DB為新的數(shù)據(jù);

則DB與緩存數(shù)據(jù)不一致。


3、先更新數(shù)據(jù)庫(kù),再刪除緩存(推薦)


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


update與commit之間,有新的讀,緩存空,讀DB數(shù)據(jù)到緩存,數(shù)據(jù)是舊的數(shù)據(jù);

commit后DB為新的數(shù)據(jù);

則DB與緩存數(shù)據(jù)不一致;

采用延時(shí)雙刪策略。


2、Read/Write Through Pattern

應(yīng)用程序只操作緩存,緩存操作數(shù)據(jù)庫(kù);

Read-Through(穿透讀模式/直讀模式):應(yīng)用程序讀緩存,緩存沒有,由緩存回源到數(shù)據(jù)庫(kù),并寫入緩存;

Write-Through(穿透寫模式/直寫模式):應(yīng)用程序?qū)懢彺妫彺鎸憯?shù)據(jù)庫(kù)。該種模式需要提供數(shù)據(jù)庫(kù)的handler,開發(fā)較為復(fù)雜。


3、Write Behind Caching Pattern

應(yīng)用程序只更新緩存;

緩存通過異步的方式將數(shù)據(jù)批量或合并后更新到DB中,不能時(shí)時(shí)同步,甚至?xí)G數(shù)據(jù)。

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 05、Redis又是什么?? ? -


Redis是一個(gè)高性能的開源的,C語(yǔ)言寫的NoSQL(非關(guān)系型數(shù)據(jù)庫(kù))也叫做緩存數(shù)據(jù)庫(kù),數(shù)據(jù)保存在內(nèi)存中。Redis是以key-value形式存儲(chǔ),和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)不一樣。不一定遵循傳統(tǒng)數(shù)據(jù)庫(kù)的那些基本要求。比如,不遵循SQL標(biāo)準(zhǔn)、事務(wù)、表結(jié)構(gòu)等。Redis有非常豐富的數(shù)據(jù)類型,比如String,list,set,zset,hash等。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 06、Redis可以做什么?? ? -


1、減輕數(shù)據(jù)庫(kù)壓力,提高并發(fā)量,提高系統(tǒng)響應(yīng)時(shí)間


2、做Session分離

傳統(tǒng)的Session是由自己的tomcat進(jìn)行維護(hù)和管理的,在集群和分布式情況下,不同的tomcat要管理不同的session,只能在各個(gè)tomcat之間,通過網(wǎng)絡(luò)和IO進(jìn)行session復(fù)制,極大的影響了系統(tǒng)的性能。


Redis解決了這一個(gè)問題,將登陸成功后的session信息,存放在Redis中,這樣多個(gè)tomcat就可以共享Session信息。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


3、做分布式鎖

一般Java中的鎖都是多線程鎖,是在一個(gè)進(jìn)程中的,多個(gè)進(jìn)程在并發(fā)的時(shí)候也會(huì)產(chǎn)生問題,也要控制時(shí)序性,這個(gè)時(shí)候Redis可以用來做分布式鎖,使用Redis的setnx命令來實(shí)現(xiàn)。


4、電商購(gòu)物車:

1、以用戶id為key

2、商品id為field

3、商品數(shù)量為value

電商購(gòu)物車操作:

1、添加商品:hset cart:1001 10088 1

2、增加數(shù)量:hincrby cart:1001 10088 1

3、商品總數(shù):hlen cart:1001

4、刪除商品:hdel cart:1001 10088

5、獲取購(gòu)物車所有商品:hgetall cart:1001


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)




5、zset集合操作實(shí)現(xiàn)排行榜

1、點(diǎn)擊新聞

ZINCRBY hotNews:20190819 1 守護(hù)香港

2、展示當(dāng)日排行前十

ZREVRANGE hotNews:20190819 0 9 WITHSCORES

3、七日搜索榜單計(jì)算

ZUNIONSTORE hotNews:20190813-20190819 7

hotNews:20190813 hotNews:20190814... hotNews:20190819

4、展示七日排行前十

ZREVRANGE hotNews:20190813-201908109 0 9 WITHSCORES


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)



用Redis做緩存,有這么有多優(yōu)點(diǎn),那么,缺點(diǎn)是不是也會(huì)對(duì)應(yīng)的有很多呢?

1、額外的硬件支出

緩存是一種軟件系統(tǒng)中以空間換時(shí)間的技術(shù),需要額外的磁盤空間和內(nèi)存空間來存儲(chǔ)數(shù)據(jù)。


2、高并發(fā)緩存失效

在高并發(fā)的情況下,會(huì)出現(xiàn)緩存失效(緩存穿透,緩存雪崩,緩存擊穿等問題)造成瞬間數(shù)據(jù)庫(kù)訪問量增大,甚至崩潰,所以這些問題是一定要去解決。


3、緩存與數(shù)據(jù)庫(kù)數(shù)據(jù)同步

緩存與數(shù)據(jù)庫(kù)無法做到數(shù)據(jù)的實(shí)時(shí)同步。


4、緩存并發(fā)競(jìng)爭(zhēng)

多個(gè)Redis客戶端同時(shí)對(duì)一個(gè)key進(jìn)行set值的時(shí)候由于執(zhí)行順序引起的并發(fā)的問題。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 07、Redis高性能設(shè)計(jì)? ? -

1、Redis是單線程的么?

Redis的單線程主要是指Redis的網(wǎng)絡(luò)IO和鍵值對(duì)讀寫是由一個(gè)線程來完成的,這也是Redis對(duì)外提供鍵值存儲(chǔ)服務(wù)的主要流程。但Redis的其他功能,比如持久化,異步刪除,集群數(shù)據(jù)同步等,都是由額外的線程執(zhí)行的。


2、Redis單線程為什么還能這么快?

這里我們?cè)诒镜販y(cè)試一下Redis支持的并發(fā)。

執(zhí)行這條命令:./redis-benchmark get
結(jié)果:
============ get ==========
100000 requests completed in 1.02 seconds
50 parallel clients
3 bytes payload
keep alive: 1
host configuration "save": 900 1 300 10 60 10000
host configuration "appendonly": no

multi-thread: no


0.00% <= 0.1 milliseconds
13.00% <= 0.2 milliseconds
55.85% <= 0.3 milliseconds
80.60% <= 0.4 milliseconds
92.57% <= 0.5 milliseconds
97.12% <= 0.6 milliseconds
99.06% <= 0.7 milliseconds
99.68% <= 0.8 milliseconds
99.86% <= 0.9 milliseconds
99.90% <= 1.0 milliseconds
99.90% <= 1.1 milliseconds

13.00% <= 0.2 milliseconds
55.85% <= 0.3 milliseconds
80.60% <= 0.4 milliseconds
92.57% <= 0.5 milliseconds
97.12% <= 0.6 milliseconds
99.06% <= 0.7 milliseconds
99.68% <= 0.8 milliseconds
99.86% <= 0.9 milliseconds
99.90% <= 1.0 milliseconds
99.90% <= 1.1 milliseconds
99.90% <= 1.2 milliseconds
99.91% <= 1.3 milliseconds
99.93% <= 1.4 milliseconds
99.95% <= 1.5 milliseconds
99.97% <= 1.6 milliseconds
99.98% <= 1.7 milliseconds
99.99% <= 1.8 milliseconds
99.99% <= 1.9 milliseconds
100.00% <= 2 milliseconds
100.00% <= 2 milliseconds
98328.42 requests per second

這里我們可以看到,每秒的話,差不多可以支持小10萬(wàn)的并發(fā),這已經(jīng)是一個(gè)很恐怖的數(shù)據(jù)了。


因?yàn)樗乃袛?shù)據(jù)都在內(nèi)存中,所有的運(yùn)算都是內(nèi)存級(jí)別的運(yùn)算,而且單線程避免了多線程的切換性能消耗問題。正因?yàn)镽edis是單線程的,所以要小心使用Redis命令,對(duì)于那些耗時(shí)的指令(比如keys),一定要謹(jǐn)慎使用,一不小心就可能導(dǎo)致Redis卡頓。

Redis單線程如何處理那么多并發(fā)客戶端連接?


Redis的IO多路復(fù)用:Redis利用epoll來實(shí)現(xiàn)IO多路復(fù)用,將連接信息和事件放到隊(duì)列中,一次放到文件事件分派器,事件分派器將事件分發(fā)給事件處理器。


深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

-? ? ? 08、Redis核心設(shè)計(jì)原理? ? -



Redis作為key-value存儲(chǔ)系統(tǒng),數(shù)據(jù)結(jié)構(gòu)如下:

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


一個(gè)Redis實(shí)例對(duì)應(yīng)多個(gè)DB,一個(gè)DB對(duì)應(yīng)多個(gè)key,key一般都是string的,后面的value叫做RedisObject,不是說value就是string,list,map這些,而是說這些所有的類型,都被Redis封裝成了一個(gè)叫RedisObjcet,具體是哪個(gè)類型呢?這里是用指針的方式來指向具體是哪個(gè)類型。

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)


為什么要這么做,主要是為了提高Redis的性能。

PS:這里插一句,為什么使用指針的方式要比使用對(duì)象本身的方式性能更好呢?


這里有兩點(diǎn):

第一點(diǎn)是動(dòng)態(tài)分配;第二是指針一大特點(diǎn)在于你只需要在前面聲明一下指針指向的類型(而如果要使用實(shí)際的對(duì)象,你還需要定義一下)。這樣你就能降低你的編譯單元之間的耦合性從而減少編譯時(shí)間。


1、RedisDB結(jié)構(gòu)

Redis沒有表的概念,Redis實(shí)例所對(duì)應(yīng)的DB以編號(hào)區(qū)分,DB本身就是key的命名空間

比如:user:1000作為key的值,表示在user這個(gè)命名空間下id為1000的元素,類似于user表的id=1000的行。


2、SDS字符串

眾所周知,Redis是用C語(yǔ)言來實(shí)現(xiàn)的,在C語(yǔ)言中,String這個(gè)類型,其實(shí)就是一個(gè)char數(shù)組,比如char data[]="xxx\0",但是,客戶端往Redis發(fā)送set命令,是可以發(fā)任意的字符串的,是沒有校驗(yàn)的,所以假如我們發(fā)了一個(gè)字符串xx\0xx,那么\0后面的xx是不會(huì)讀的,只會(huì)讀前面的xx(C語(yǔ)言中用"\0"表示字符串結(jié)束,如果字符串本身就有"\0"字符,字符串就會(huì)被截?cái)啵?/span>


所以Redis自實(shí)現(xiàn)了一個(gè)string叫sds,sds中記錄了一個(gè)len和一個(gè)char buf[],len用來記錄buf的長(zhǎng)度,比如char buf[] = "xx\0xx",那么len就是5,sds中還有一個(gè)比較重要的屬性就是free,表示還剩余多少。


free是通過改變len來計(jì)算,比如"xxx1234" 改成 "xxx123456",那么會(huì)按照(len+addlen)*2=18 來擴(kuò)容,這個(gè)時(shí)候len變成了9,free就是18-9也變成了9。


例如:

char buf[] = "xxx1234" 改成 "xxx123456" //這里的buf是柔性數(shù)組
free:12 變成free:10
len:8 變成len:10

Redis這樣設(shè)計(jì)SDS有什么好處:

1、二進(jìn)制安全的數(shù)據(jù)結(jié)構(gòu);

2、提供了內(nèi)存預(yù)分配機(jī)制,避免了頻繁的內(nèi)存分配;

3、兼容C語(yǔ)言的函數(shù)庫(kù);

4、有單獨(dú)的統(tǒng)計(jì)變量len和free,可以方便的得到字符串長(zhǎng)度,這樣就避免了讀取不完整的風(fēng)險(xiǎn);

5、內(nèi)容存放在柔性數(shù)組buf中,SDS對(duì)上層暴露的指針不是指向結(jié)構(gòu)體SDS的指針,而是直接指向柔性數(shù)組buf的指針。上層可像讀取C字符串一樣讀取SDS的內(nèi)容,兼容C語(yǔ)言處理字符串的各種函數(shù)。


這里解釋一下什么叫柔型數(shù)組?

柔型數(shù)組即數(shù)組大小待定的數(shù)組,C語(yǔ)言中結(jié)構(gòu)體的最后一個(gè)元素可以是大小未知的數(shù)組,也就是所謂的0長(zhǎng)度,所以我們可以用結(jié)構(gòu)體來創(chuàng)建柔性數(shù)組。柔性數(shù)組主要用途是為了滿足需要變長(zhǎng)度的結(jié)構(gòu)體,為了解決使用數(shù)組時(shí)內(nèi)存的冗余和數(shù)組的越界問題

這也是Redis3.2之前所實(shí)現(xiàn)的。


未完待續(xù),敬請(qǐng)期待下篇分析。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

長(zhǎng)按訂閱更多精彩▼

深度剖析不一樣的Redis架構(gòu)設(shè)計(jì)

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉