新聞中心
隨著Redis在生產(chǎn)環(huán)境中得到越來(lái)越多的應(yīng)用,Redis阻塞性命令也成為研究Redis重要問(wèn)題之一。redis阻塞性命令是指當(dāng)某個(gè)請(qǐng)求需要進(jìn)行排隊(duì)或重新組織數(shù)據(jù)時(shí),客戶(hù)端可能會(huì)阻塞,等待進(jìn)程完成。

創(chuàng)新互聯(lián)專(zhuān)注于網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶(hù)至上,用心服務(wù)”的宗旨,從客戶(hù)的利益和觀點(diǎn)出發(fā),讓客戶(hù)在網(wǎng)絡(luò)營(yíng)銷(xiāo)中找到自己的駐足之地。尊重和關(guān)懷每一位客戶(hù),用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶(hù),用專(zhuān)業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶(hù)值得信賴(lài)的朋友,為客戶(hù)解除后顧之憂(yōu)。
一般情況下,Redis阻塞性命令都可以基于Redis的發(fā)布/訂閱與Lua腳本來(lái)解決,以達(dá)到有效減輕阻塞的目的。
具體來(lái)看,首先利用Redis的發(fā)布/訂閱機(jī)制,可以將消息發(fā)布到一個(gè)消息隊(duì)列中,后臺(tái)服務(wù)器可以根據(jù)客戶(hù)端的請(qǐng)求,從消息隊(duì)列中接收客戶(hù)端的消息,另一個(gè)機(jī)器可以將消息中的數(shù)據(jù)處理完畢,并將處理結(jié)果推送到結(jié)果隊(duì)列中。結(jié)果隊(duì)列中的數(shù)據(jù)可以通過(guò)Redis的發(fā)布/訂閱機(jī)制,將結(jié)果返回給請(qǐng)求的客戶(hù)端。
此外,利用Lua腳本也可以解決Redis阻塞性命令,Lua腳本可以自定義一個(gè)可以保持被執(zhí)行,但是并不會(huì)造成Redis阻塞的事件,從而可以大大減少客戶(hù)端的等待時(shí)間,并解決Redis阻塞性命令問(wèn)題。例如:
— redisexec.lua
— 執(zhí)行redis 命令
function do_command(command, args)
— 返回一個(gè)“Pending”狀態(tài)
local status = {state=”P(pán)ending” }
local handled = false
— 執(zhí)行核心邏輯
local response = redis.call(command, args)
if response ~= nil then
— 返回命令的執(zhí)行結(jié)果
status.state = “Done”
status.result = response
handled = true
end
— 返回狀態(tài)
return cjson.encode(status), handled
end
— 鉤子函數(shù),在Redis收到命令時(shí)調(diào)用
function hook_cmd(cmd)
local result, handled
— 如果命令被攔截
if handled then
return result, true
end
end
— 注冊(cè)鉤子函數(shù)
redis.register_script(hook_cmd)
以上就是Redis阻塞性命令的解決方案,利用Redis的發(fā)布/訂閱與Lua腳本,我們可以非常有效的減少由于阻塞性命令造成的等待時(shí)間,從而提高Redis數(shù)據(jù)庫(kù)的應(yīng)用性能。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專(zhuān)業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣等一站式服務(wù)。
網(wǎng)站題目:破解Redis阻塞性命令的奧秘(redis阻塞性命令)
分享網(wǎng)址:http://fisionsoft.com.cn/article/djoccej.html


咨詢(xún)
建站咨詢(xún)
