原创 流量削峯技術

改進的點 之前的秒殺下單接口被腳本不停的刷 秒殺驗證邏輯和秒殺下單接口強關聯,代碼冗餘度高 秒殺驗證邏輯複雜,對交易系統產生無關聯複雜 秒殺令牌 //申城秒殺令牌 //校驗用戶以及商品 @Ov

原创 查詢優化技術之多級緩存(數據庫)

緩存設計原則 用快速存取設備,用內存 將緩存推到離用戶最近的地方 髒緩存處理(關鍵數據存儲到數據庫,數據庫數據與緩存中數據的一致性問題) 多級緩存 redis緩存 redis本質上是一個數據庫, Redis商品詳情動態內

原创 交易性能優化技術之緩存庫存

性能瓶頸 分析下單時,應用的模型如下: 訪問數據庫的次數如下:(訪問6次數據庫;是否能對訪問數據庫的次數進行一定程序的優化,採用緩存的方式) 性能優化 交易驗證優化(緩存用戶信息,) 原來對用戶,商品進行校驗的方式:

原创 代理模式(Spring AOP)

介紹 在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬於結構型模式。在代理模式中,我們創建具有現有對象的對象,以便向外提供功能接口 意圖:爲其他對象提供一種代理以控制對這個對象的訪問

原创 原子類包分析實現

文章目錄atomic包 atomic包 java.util.concurrent.atomic包下的類大多是使用CAS操作來實現的(eg. AtomicInteger.java,AtomicBoolean,AtomicLong

原创 04 Netty概述

1、原生NIO存在的問題 2、Netty介紹 Netty官網 Netty的優點

原创 線程間同步機制

文章目錄爲什麼要使用同步??使用特殊變量volitale實現線程同步使用ThreadLocal局部變量實現線程使用原子變量實現線程同步重入鎖synchronizedReentranLock讀寫鎖基於AQS的一些同步器倒計時器 Co

原创 緩存的問題

緩存穿透 參考 緩存穿透是值緩存和數據庫中都沒有數據,而用戶不斷髮起請求,如發起id爲特別大或者不存在的數據。這時的用戶很可能是攻擊者,攻擊會導致數據庫壓力過大。 解決辦法 可以爲這些key在緩存中設置對應的值爲null,後面查

原创 Redis對象的實現以及內存的管理

文章目錄抽象出來的的對象使用對象的好處對象的類型和編碼底層存儲RedisObject對象字符串對象編碼編碼的轉換列表對象編碼hash對象集合對象有序集合對象類型檢查和命令多態內存回收 參考資料 參考資料 參考資料 抽象出來的的對象

原创 Redis數據類型與底層實現

文章目錄SDS(簡單動態字符串)SDS的定義SDS與C字符串的區別:其實就是改善,根據自身需求完善數據結構常數複雜度獲取字符串長度杜絕緩衝區溢出(類似StringBuilder)減少修改字符串時帶來的內存重分配次數(分配合適的內存

原创 秒殺項目使用Ngix實現動靜分離,反向代理

文章目錄目前的架構--單機版本單機容量問題--水平擴展應用服務器水平擴展服務器集羣的搭建(先搭建四臺)ngix反向代理負載均衡ngix動靜分離服務器使用OpenResty框架作爲ngix的開發框架(學習深入擴展)在OpenRest

原创 分佈式會話管理

單體會話管理 基於Cookie(傳統) 基於token傳輸 分佈式會話

原创 Redis複製(主從複製)

文章目錄CAP原理Redis的最終一致性複製概念舊版複製功能實現同步(也叫快照複製)命令傳播(同步完成之後的更新保持一致)舊版複製功能的缺陷新版複製功能的實現部分重同步的實現(增量同步)複製偏移量複製積壓緩衝區服務器運行IDPSY

原创 Redis的IO模型以及客戶端與服務端設計

文章目錄IO模型--事件驅動文件事件(通常是與客戶端的交互)文件事件的處理器時間事件(服務器的自身觸發的一些維護操作)分類底層實現時間事件應用實例:serverCron函數事件的調度與執行客戶端--如何設計客戶端底層的數據結構`時

原创 Redis數據庫的存儲結構與過期策略

文章目錄服務器中的數據庫切換數據庫數據庫如何存儲數據底層存儲結構--字典添加鍵刪除鍵更新鍵對鍵取值對鍵的其他操作數據庫鍵的生存時間指令如何存儲鍵的過期時間如何刪除過期的鍵可選刪除策略Redis的刪除策略惰性刪除策略的實現定時刪除策