redis導(dǎo)致線程阻塞 redis keys命令為什么導(dǎo)致阻塞?
redis keys命令為什么導(dǎo)致阻塞?因?yàn)閞edis是單線程的,當(dāng)keys的數(shù)量很大時(shí),keys命令執(zhí)行后,后續(xù)的命令會(huì)被阻塞。當(dāng)密鑰數(shù)達(dá)到一定值時(shí),密鑰怎么可能不返回,導(dǎo)致redis宕機(jī)總之,re
redis keys命令為什么導(dǎo)致阻塞?
因?yàn)閞edis是單線程的,當(dāng)keys的數(shù)量很大時(shí),keys命令執(zhí)行后,后續(xù)的命令會(huì)被阻塞。當(dāng)密鑰數(shù)達(dá)到一定值時(shí),密鑰怎么可能不返回,導(dǎo)致redis宕機(jī)
總之,redis是一個(gè)高性能的密鑰值數(shù)據(jù)庫,經(jīng)常用來建立緩存系統(tǒng)來提高并發(fā)響應(yīng)速度。典型的數(shù)據(jù)讀取過程:string、list、set、Zset和hash。
Push/pop、add/remove、union和difference of intersection以及更豐富的操作是原子的。
提供Java、C/C、C#、PHP、JavaScript、Perl、Object-C、python、ruby、Erlang等客戶端,使用方便。
它可以部署在集群中,并且數(shù)據(jù)可以從主服務(wù)器同步到任意數(shù)量的從屬服務(wù)器。
以Java spring boot為例:
Redis非關(guān)系性數(shù)據(jù)庫有什么特點(diǎn)?
通過slowlog和montior。
Redis的慢速日志記錄了比指定執(zhí)行時(shí)間更長的請(qǐng)求。執(zhí)行時(shí)間不包括I/O操作(如與客戶機(jī)的網(wǎng)絡(luò)通信),只包括命令的實(shí)際執(zhí)行時(shí)間(在此期間線程將被阻塞,無法服務(wù)于其他請(qǐng)求)。有兩個(gè)參數(shù)可以配置slow log:slow log slow than:設(shè)置以微秒為單位的執(zhí)行時(shí)間,將記錄花費(fèi)超過此時(shí)間的命令。-1表示不記錄慢速日志,0強(qiáng)制記錄所有命令。
設(shè)置單位為細(xì)微,默認(rèn)值為10000細(xì)微,即10ms
慢日志最大長度:慢日志的長度。最小值為0。如果日志隊(duì)列超過最大長度,則最早的記錄將從隊(duì)列中清除,并可以分配到512。可由編輯redis.conf文件以上兩個(gè)參數(shù)的文件配置。對(duì)于運(yùn)行redis,可以通過config get和config set命令動(dòng)態(tài)更改上述兩個(gè)參數(shù)