用Redis延時隊列搞定訂單超時業務
Redis延時隊列是一種用於在特定時間後執行任務的消息隊列。它在許多場景中非常有用,比如訂單超時自動關閉、定時提醒等。在Redis中,通常使用Sorted Set(有序集合)來實現延時隊列,因為Sorted Set可以按照分數進行排序,非常適合用來存儲和檢索到期時間,今天V哥來聊一聊Redis延時隊列,歡迎各位小哥一起討論。 以下是Redis延時隊列的詳細介紹,包括原理、數據結構、實現方式以及Ja
Nickname 威哥愛編程
Contributes4
Followers0
Redis延時隊列是一種用於在特定時間後執行任務的消息隊列。它在許多場景中非常有用,比如訂單超時自動關閉、定時提醒等。在Redis中,通常使用Sorted Set(有序集合)來實現延時隊列,因為Sorted Set可以按照分數進行排序,非常適合用來存儲和檢索到期時間,今天V哥來聊一聊Redis延時隊列,歡迎各位小哥一起討論。 以下是Redis延時隊列的詳細介紹,包括原理、數據結構、實現方式以及Ja
Nickname 威哥愛編程
布隆過濾器(Bloom Filter)是一種空間效率很高的概率型數據結構,用於測試一個元素是否是一個集合中的成員。它允許一些誤報(false positive),但不允許誤漏(false negative)。這意味着,如果布隆過濾器説一個元素不在集合中,那麼這個元素確實不在集合中;但如果它説一個元素在集合中,那麼這個元素可能在集合中,也可能不在。 布隆過濾器的基本原理: 位數組:布隆過濾器使用
Nickname 威哥愛編程
Nginx是一個高性能的HTTP和反向代理服務器,它在全球範圍內被廣泛使用,因其高性能、穩定性、豐富的功能以及低資源消耗而受到青睞。今天V哥從5個方面來介紹 Nginx 性能調優的具體策略,希望對兄弟們有幫助,廢話不多説,馬上開整。 1. 系統層面: 調整內核參數:例如,增加系統文件描述符的限制、TCP連接隊列的大小等。 網絡優化:可以使用TCP Fast Open、選擇更高效的網絡協議等。
Nickname 威哥愛編程
寫在前面的話,關於 HTTP 和 HTTPS 的問題,常常會被很多學習者忽略,HTTP、HTTPS 不就是網址的開頭嗎,有啥好了解的,瀏覽器的引擎實現了這個協議,在開發關係不大,但想要深入一些理解數據傳輸原理,瞭解這兩個概念是必須的,以下的內容為概念性,幫助小夥伴們瞭解 HTTP 和 HTTPS 的關鍵點。 HTTP(HyperText Transfer Protocol,超文本傳輸協議)和HTT
Nickname 威哥愛編程
哨兵模式和集羣模式是Redis提供的兩種不同的高可用性和擴展性解決方案,它們各自有不同的特點和適用場景。 哨兵模式(Sentinel) 主要關注於高可用性,通過監控主節點和從節點的狀態,實現故障檢測和自動故障轉移 。當主節點發生故障時,哨兵會選舉一個從節點作為新的主節點,並通知其他從節點和客户端更新配置。它適用於對數據高可用性要求較高,但不需要特別大的數據量的場景,通常應用於小型和中型系統。
Nickname 威哥愛編程
原子性的意義 原子性特別是在併發編程領域,是一個極其重要的概念,原子性指的是一個操作或一組操作要麼全部執行成功,要麼全部不執行,不會出現部分執行的情況。這意味着原子性操作是不可分割的,它們在執行過程中不會被其他操作中斷或干擾。 原子性的意義在於它保證了數據的一致性和程序的正確性。在多線程或多進程的環境中,當多個操作同時訪問和修改共享數據時,如果沒有原子性保證,可能會導致數據不一致或不確定的結果。例
Nickname 威哥愛編程
Netty 是一個高性能、異步事件驅動的網絡應用框架,它基於 Java NIO 構建,廣泛應用於互聯網、大數據、遊戲開發、通信行業等多個領域。以下是對 Netty 的源碼分析、業務場景的詳細介紹: 源碼概述 Netty 的核心組件:Netty 的架構設計圍繞着事件驅動的核心思想,主要包括 Channel、EventLoopGroup、ChannelHandlerContext 和 Channe
Nickname 威哥愛編程
今天來聊一聊關於 Spring 為什麼使用三級緩存的問題,先説結果哈,Spring框架中的三級緩存主要用於解決循環依賴問題,特別是在單例Bean的創建過程中。 下面V哥會解釋為什麼Spring需要三級緩存,而不是僅僅使用兩級的原因。 一級緩存(Singleton Objects):存儲已經完全初始化好的單例Bean。當一個Bean被成功創建並注入到其他Bean中後,它會被放入一級緩存中。 二
Nickname 威哥愛編程
Netty 是一個高性能的網絡編程框架,廣泛用於構建高性能、高可靠性的網絡服務器和客户端程序。它的核心特性之一是其異步編程模型,而這種模型是通過 Future 模式實現的。 Netty 中的 Future 模式 在 Netty 中,Future 是一個非常重要的概念,它代表了一個可能尚未完成的異步操作。Netty 的 Future 接口繼承自 Java 的 java.util.concurrent
Nickname 威哥愛編程
Java RMI(Remote Method Invocation)是一種允許Java虛擬機之間進行通信和交互的技術。它使得遠程Java對象能夠像本地對象一樣被訪問和操作,從而簡化了分佈式應用程序的開發。一些應用依然會使用 RMI 來實現通信和交互,今天的內容我們來聊聊 RMI 的那些事兒。 一、先來了解一下概念 RMI原理 RMI的基本思想是遠程方法調用。客户端調用遠程方法時,實際上是發送一個調
Nickname 威哥愛編程
MinIO是一個高性能的開源對象存儲服務器,它與Amazon S3兼容,適用於存儲備份、大數據分析等多種應用場景。MinIO追求高性能和可靠性,採用去中心化的架構設計,不依賴任何單個節點,即使某些節點發生故障,整個系統也能正常運行 。它還支持分佈式部署,可以輕鬆擴展存儲容量和性能。 MinIO的技術架構主要包括服務器核心、分佈式系統、認證和安全性組件以及客户端庫。服務器核心負責處理存儲和檢索對象,
Nickname 威哥愛編程
Redis 是一個開源的高性能鍵值對數據庫,它以其內存中數據存儲、鍵過期策略、持久化、事務、豐富的數據類型支持以及原子操作等特性,在許多項目中扮演着關鍵角色。以下是V哥整理的17個Redis在項目中常見的使用場景: 緩存:Redis 可以作為應用程序的緩存層,減少數據庫的讀取壓力,提高數據訪問速度。 會話存儲:在 Web 應用中,Redis 可以用來存儲用户的會話信息,如登錄狀態、購物車內容
Nickname 威哥愛編程
在面試中,你有沒有被問到 Spring Cloud Consul 相關的問題呢?針對這個問題,我需要了解 Consul 的基本概念、核心功能、與 Eureka 和 Zookeeper 的區別、服務註冊和發現機制、以及健康檢查配置等,這些是展示你的技術功底和對微服務架構理解的考驗,廢話不多説,以下這些內容都是要清楚的。 首先,要説一下Consul是什麼。Spring Cloud Consul 是 S
Nickname 威哥愛編程
OpenFeign 是一個聲明式的 Web 服務客户端,它使得編寫 Web 服務客户端變得更加容易。OpenFeign 是在 Spring Cloud 生態系統中的一個組件,它整合了 Ribbon(客户端負載均衡器)和 Eureka(服務發現組件),從而簡化了微服務之間的調用。 在 SpringCloud 應用中,我們經常會 使用 OpenFeign,比如通過定義一個接口並使用註解的方式來創建一個
Nickname 威哥愛編程
Hello,大家好,我是 V 哥。最近寫到 使用 Nacos 實現動態路由的問題,整理了一下思路和案例,分享給大家。 使用 Nacos 實現 Spring Cloud Gateway 的動態路由,主要涉及到以下幾個步驟: 添加依賴:在 Spring Cloud Gateway 應用的 pom.xml 文件中添加 Nacos 相關依賴。 配置 Nacos:在 application.yml 或
Nickname 威哥愛編程
大家好,我是V哥,國足0-7不敵日本,創下12年來最大慘敗,真的好久不看球賽了,我關心的是,作為國內唯一一家轉播平台愛奇藝體育昨天崩了,官方道歉文中解釋由於瞬時流量過大導致,這讓我想起服務熔斷、降級和限流是微服務架構中用於提高系統穩定性和可用性的三種關鍵策略。 介紹 服務熔斷(Circuit Breaker) 服務熔斷是一種防止服務故障蔓延的機制。它的概念來源於電力系統中的熔斷器,當電流超過電路的
Nickname 威哥愛編程
Hello,大家好,我是V哥。很多文章都在介紹設計模式怎麼用,講解設計模式的原理等等,設計模式的思想是編程中的精髓,用好了可以讓代碼結構利於維護和擴展,同時代碼風格也更加優雅,V 哥也寫過這樣一篇文章,但很少有人從反模式的角度來講一講,過度濫用設計模式將給項目帶來災難。 設計模式反模式(Anti-Pattern)是指那些表面上看起來像是設計模式,但實際上會導致軟件設計問題的做法。這些做法可能會導致
Nickname 威哥愛編程
大家好,我是 V 哥。在實現"加入購物車"的場景中,數據定位是指通過特定的標識符和索引快速定位到需要操作的數據,以提高查詢效率和保證數據的一致性。對於購物車系統而言,數據定位的關鍵在於如何唯一確定用户購物車中的商品,並保證在高效檢索的同時避免併發問題。下面我將詳細説明如何通過不同方式進行數據定位: 一、通過主鍵和外鍵實現數據庫數據定位 在購物車場景中,用户ID和商品ID是兩個核心的標識符,用於唯一
Nickname 威哥愛編程
大家好,我是 V 哥。使用EasyExcel進行大數據量導出時容易導致內存溢出,特別是在導出百萬級別的數據時。你有遇到過這種情況嗎,以下是V 哥整理的解決該問題的一些常見方法,分享給大家,歡迎一起討論: EasyExcel大數據量導出常見方法 1. 分批寫入 EasyExcel支持分批寫入數據,可以將數據分批加載到內存中,分批寫入Excel文件,避免一次性將大量數據加載到內存中。 示例代碼:
Nickname 威哥愛編程
大家好,我是 V哥。掃碼登錄是個很普遍的功能,通過與公眾號聯動實現掃碼登錄功能,要怎麼做呢,V 哥整理了以下步驟和代碼,供你參考。這裏假設你已經有一個Java後端應用,並且微信開發者平台的配置也已經完成。(相信你可以根據微信開放平台的操作進行)整個流程包括二維碼生成、掃碼後獲取微信用户信息、並將用户登錄狀態返回到你的應用中。 1. 微信公眾號掃碼登錄流程 申請掃碼登錄權限:在微信開放平台申請掃
Nickname 威哥愛編程
Spring WebFlux 介紹 Spring WebFlux 是 Spring Framework 5.0 版本引入的一個響應式 Web 框架,它與 Spring MVC 並存,提供了一種全新的編程範式,支持異步非阻塞的 Web 應用開發。WebFlux 完全基於響應式編程模型,支持 Reactive Streams 規範,可以在諸如 Netty、Undertow 以及 Servlet 3.1
Nickname 威哥愛編程
打開 Maven倉庫,左邊選項欄排在第一的就是測試框架與工具,今天的文章,V 哥要來聊一聊程序員必備的測試框架JUnit 的源碼實現,整理的學習筆記,分享給大家。 有人説,不就一個測試框架嘛,有必要去了解它的源碼嗎?確實,在平時的工作中,我們只要掌握如何使用 JUnit 框架來幫我們測試代碼即可,搞什麼源碼,相信我,只有看了 JUnit 框架的源碼,你才會讚歎,真是不愧是一款優秀的框架,它的源碼
Nickname 威哥愛編程
@[toc] 我們在項目的具體實踐中,有時候會遇到一些比較特殊的字段,例如身份證號碼。 鬆哥之前有一個小夥伴做黑龍江省的政務服務網,裏邊有一些涉及到用户身份證存儲的場景,由於存儲的數據大部分都是當地的,此時如果想給身份證號碼建立索引的話,小夥伴們知道,身份證前六位是地址碼,在這樣的場景下,給身份證字段建立索引的話,前六位的區分度是很低的,甚至前十位的區分度都很低(因為出生年份畢竟有限,一個省
Nickname 江南一點雨
開發環境 以下是我的開發環境 JDK 1.8 Maven 3.6.3 Tomcat 9.0 IDEA 2019(2019 無所畏懼,即使現在已經 2023 年了哈哈哈) 最原始的 Java Web 項目 下面的內容可能會因 IDEA 版本不同,而有些選項不同,但是大同小異。 1. 打開 IDEA 點擊 Create New Project 2. 點擊 Java Enterprise
Nickname god23bin