您好,登錄后才能下訂單哦!
這篇文章主要介紹“redis實現訂單系統分庫分表的索引表”,在日常操作中,相信很多人在redis實現訂單系統分庫分表的索引表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”redis實現訂單系統分庫分表的索引表”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
分庫分表的時候,仍然有多維度查詢的需求,這個時候,常見方式是做索引表,索引表有多種實現方式,可以用redis, 可以用mysql binlog 實現等等,當用redis 實現索引表,我們怎么去設計?我們要主要哪些要點呢?比如我們以外賣訂單為例,用district 分表,分別建立商戶的索引表和乘客的索引表。
我們的查詢需求有哪些?
用redis 做索引表,我們用什么數據結構合適?怎么設計?
索引表與主庫怎么保證一致性?
查詢需求主要有來自訂單id 的,來自商家id,來自買家id的需求,同時,還有查詢商家歷史訂單,查詢買家歷史訂單。然后,我們全國的訂單,默認如果按照地區分表,這里商家id 和買家id 如果跟訂單id 和地區映射起來?同時,歷史訂單,涉及了時間維度,如何設計索引數據結構?
使用redis 如果滿足上面的索引需求?這里zset 是非常合適的。
zadd salerId timestamp OrderId+district; zadd buyerId timestamp OrderId+district;
zrange salerId timestamp1 timestamp2 select * from table where order_id =xxx;
zrange buyerId timestamp1 timestamp2 select * from table where order_id =xxx;
索引表需要跟主庫訂單表是強一致的,這里有幾個問題。寫的時候是先寫redis 還是先寫mysql ,讀的時候redis 沒讀到,但是mysql 有改如果處理? 其實比較好處理,寫先寫redis,讀的時候讀不到直接返回。強一致需要redis 和 mysql 定時對賬,然后redis 為了防止被開發誤操作,需要權限校驗,key 審核,要在codis 層過濾一遍key,過濾掉flush 等指令。
綜上,利用redis 做mysql 的二級索引其實是可行的方案,在一些大公司也有過一些實踐。使用redis 做索引表有什么缺陷呢?畢竟redis 是內存結構,如果發生數據丟失,索引重構是非常惡心的。
到此,關于“redis實現訂單系統分庫分表的索引表”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。