spring、springboot、dubbo、springCloud、redis

spring優點:
高內聚、低耦合:避免了關鍵字new的耦合問題,不需要進行明確的引用關係傳遞,通過配置就能完成
bean工廠:本身就是個bean工廠,bean管理
aop切面編程
通過配置進行事務管理
方便集成其他框架
代理開發模式
spring核心:IOC,aop

springboot:“約定大於配置”
沒有繁瑣的配置,繼承方便
不會產生多餘的代碼和xml
簡化maven配置
啓動方便 有內置serverlet java -jar xx.jar
@SpringBootApplication就能啓動:三個註解的集合,核心是@EnableAutoConfiguration

簡化編碼,獨立運行spring
簡化配置,可以完全不使用XML配置文件,只需要自動配置和java config
簡化部署,內置Servlet,降低了對運行環境的要求,java -jar即可執行
簡化監控,應用監控
簡化項目初始搭建,常用第三方框架,都有對應組件,項目搭建得以簡化

dubbo:
調用關係說明:
服務容器啓動,加載,運行服務提供者。
提供者在啓動的時候,向註冊中心註冊自己提供的服務。
服務消費者啓動的時候,向註冊中心訂閱自己所需的服務
註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將機遇長連接推送變更數據給消費者。
服務消費者從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,通過調用失敗,再選另一臺調用。
服務消費者和提供者,在內存中累積調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心

springCloud:
五大組件:eureka,ribbon,hystix,feign,zuul
eureka是註冊中心,eureka client將所有服務註冊到eureka server,eureka serve是個註冊中心,裏面有個註冊表,記錄了所有服務所在的機器和端口,client還可以反過來從server拉取註冊表,從而知道所有服務在哪裏
feign的關鍵機制就是動態代理,在某個接口加了@FeignClient註解,這個接口就會產生動態代理,該代理會根據接口的requestMapping註解來構造出你要的服務地址,針對這個地址發起請求
Ribbon的作用是負載均衡,每次請求過來選擇一臺服務器,均勻的吧請求分發到各個機器上
Zuul微服務網關,可以做統一的降級,認證等
Hystrix熔斷器,可以做服務降級和服務自動恢復,服務隔離,避免服務雪崩

RESTful API
看Url就知道要操作的資源是什麼,是操作車輛還是圍欄
看Http Method就知道操作動作是什麼,是添加(post)還是刪除(delete)
看Http Status Code就知道操作結果如何,是成功(200)還是內部錯誤(500)

Redis更新的正確方法
先刪除再更新是錯誤的邏輯,會產生髒數據
寫流程:
1.先淘汰cache(刪除緩存)
2.再寫DB(更新數據庫)
讀流程:
1.先讀cache,如果數據命中hit則返回
2.如果數據沒有命中miss則讀DB
3.講DB中讀取出來的數據加入緩存

先更新數據庫,後刪除緩存(建議,使用場景最多),但是,是不是這個就不會有併發問題了?不是的,比如,一個是讀操作,但是沒有命中緩存,然後就到數據庫中取數據,此時來了一個寫操作,寫完數據庫後,讓緩存失效,然後,之前的那個讀操作再把老的數據放進去,所以,會造成髒數據。

Redis基於內存的高性能key-value數據庫
定期通過異步操作將數據庫數據flush到硬盤上進行保存。因爲是純內存操作,Redis性能非常出色,不但如此,可支持的數據結構非常多。單個value的最大限度是1GB,不像memcached只能保存IMB的數據。
優點:讀寫速度快,支持做種數據類型,支持事物,操作都是原子性,所謂原子性就是對數據要麼全部執行,要不全部不執行;可用於緩存,消息,按key設置過期時間,過期後自動刪除。
redis具有主從複製特性,master最好不要做智久化工作,包括快照和AOF日誌文件,不要啓用內存快照做持久化,主從最好在同一局域網內。
如何保證redis的數據都是熱點數據
相關知識:redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略(回收策略)。redis 提供 6種數據淘汰策略:

volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章