-
【數據層技術回顧】mybatis中設計dao接口,每個dao方法對應一條sql語句
上層service調用組合這些dao方法完成業務邏輯
查看全部 -
3-1是簡單優化:調整源碼順序,先insert,再update,最后commit/rollback
3-2 深度優化 事務SQL在MySQL端執行(存儲過程)
查看全部 -
回顧事務執行
秒殺操作通過mysql的事務來完成。
查看全部 -
向jedis中存入對象:putSeckill
流程:先在pom文件中引入相關redis依賴,java一般通過jedis來訪問redis,然后創建一個redisDao的類,寫入jedispool,從jedispool中獲取到jedis對象。主要是在寫兩個方法,一個是從redis中get對象,另一個是向jedis中存入對象(put)。
因為redis并沒有實現自動序列化功能,所以實際put對象的時候是將數據庫中取到的對象序列化成二進制數組,然后根據對象類的反射得到的scheme序列化對象并存到redis中。同樣redis取出對象的時候取到的是一個二進制數組,需要根據scheme和一個空對象將二進制數組轉換成相應的對象。
?
傳遞秒殺對象,獲取秒殺對象。
查看全部 -
根據秒殺單的時間判斷是否開始,結束,秒殺。放在服務器端,通過服務器端的邏輯去判斷。
Make
Make install
Redis-server
Redis-cli 6279
用java訪問本機的redis
Redis客戶端是jedis,在pom.xml中引入jedis,protostuff的依賴
?
?? 把對象轉換為字節序列的過程稱為對象的序列化。
?? 把字節序列恢復為對象的過程稱為對象的反序列化。
對象的序列化主要有兩種用途:
1)把對象的字節序列永久地保存到硬盤上,通常存放在一個文件中;
2)在網絡上傳送對象的字節序列。
在很多應用中,需要對某些對象進行序列化,讓它們離開內存空間,入住物理硬盤,以便長期保存。比如最常見的是Web服務器中的Session對象,當有 10萬用戶并發訪問,就有可能出現10萬個Session對象,內存可能吃不消,于是Web容器就會把一些seesion先序列化到硬盤中,等要用了,再把保存在硬盤中的對象還原到內存中。
查看全部 -
*******【優化總結】*******
【詳情頁】可通過CDN優化
【獲取系統時間不用優化,因為很快】
【秒殺地址暴露接口分析】無法使用CDN緩存,(因為秒殺地址是會變化的),適合服務器端緩存:redis等
【秒殺操作接口優化分析】
無法使用CDN緩存,后端緩存困難:庫存更新一致性問題。一行數據競爭:熱點商品。優化方式,減少事務鎖時間。
查看全部 -
【如何放到MySQL服務端】
方案1,不推薦,很難支撐修改MySQL源碼
方案2:事務在MySQL服務端完成。
查看全部 -
行級鎖在commit或rollback后釋放,
優化方向:減少行級鎖持有時間
【如何判斷update更新庫存成功】
查看全部 -
異地機房 傳輸分析
查看全部 -
同城機房,延遲分析
查看全部 -
【Java客戶端控制事務時出現的瓶頸】
每秒查詢率QPS是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準。
查看全部 -
方案痛點
【運維成本】
查看全部 -
執行秒殺-其他方案分析
這個方案可以抗住非常高的并發
查看全部 -
【秒殺地址暴露接口分析】
無法使用CDN緩存,(因為秒殺地址是會變化的)
適合服務器端緩存:redis等
一致性維護成本低:超時穿透/主動更新
查看全部 -
獲取系統時間不用優化
查看全部
舉報