redis分發(fā)訂閱原理
redis是使用c語言實(shí)現(xiàn)的,通過分析redis源碼里的public.c文件愁茁,了解發(fā)布和訂閱機(jī)制的底層實(shí)現(xiàn)严望,藉此加深對redis的理解。
redis通過 publish
温艇、subscribe
和 psubscribe
等命令實(shí)現(xiàn)發(fā)布和訂閱功能因悲。
通過 subscribe
命令訂閱某頻道后,redis-server里維護(hù)了一個(gè)字典勺爱,字典的鍵就是一個(gè)個(gè)頻道晃琳!而字典的值則是一個(gè)鏈表,鏈表中保存了所有訂閱這個(gè)channel的客戶端。 subscribe
命令的關(guān)鍵卫旱,就是將客戶端加到給定channel的訂閱鏈表中人灼。
通過 publish
命令向訂閱者發(fā)送消息,redis-server會(huì)使用給定的頻道作為鍵顾翼,在它所維護(hù)的channel字典中查找記錄了訂閱這個(gè)頻道的所有客戶端的鏈表投放,遍歷這個(gè)鏈表,將消息發(fā)布給所有訂閱者暴构。
pub/sub
從字面上理解就是發(fā)布(publish)與訂閱(subscribe)跪呈,在redis中,你可以設(shè)定對某一個(gè)key值進(jìn)行消息發(fā)布及消息訂閱取逾,當(dāng)一個(gè)key值上進(jìn)行了消息發(fā)布后耗绿,所有訂閱它的客戶端都會(huì)收到相應(yīng)的消息。這一功能最明顯的用法就是用作實(shí)時(shí)消息系統(tǒng)砾隅,比如普通的即時(shí)聊天误阻,群聊等功能。