緩存汙染 有些數據被訪問的次數非常少,甚至只會被訪問一次。當這些數據服務完訪問請求後,如果還繼續留存在緩存中的話,就只會白白佔用緩存空間。這種情況,就是緩存汙染。 如何解決緩存汙染問題? 分析前幾章提到的淘汰策略是否可以解決緩存污染 volatile-random 和 allkeys-random 效果非常有限 CleanShot 2025-09-10 at 22.54.16@2x
Sep 11, 2025Contributed by
緩存大小的考量 Redis 作為緩存時,需要考慮容量設置。 例子:MySQL 資料庫 1TB,通常不會建立 1TB 的緩存,性價比太低。 常見做法:設置資料庫大小的 15% ~ 30% 作為緩存。 一旦確定了緩存最大容量,比如 4GB,你就可以使用下面這個命令來設定緩存的大小了: CONFIG SET maxmemory 4gb Redis 緩存有哪些淘汰策略? CleanShot 2025-08-19 at 16.16.14@2x
Aug 21, 2025Contributed by
當你從 Redis 中刪除大量資料後,卻發現 內存佔用率並沒有明顯下降,這其實是 Redis 設計上的行為。以下是重點整理: 1. 內存管理方式:惰性回收(Lazy Freeing) Redis 採用 jemalloc 作為記憶體配置器,當刪除鍵時,只是「標記」為無效,實際的記憶體不一定會立刻歸還給系統。 jemalloc 會將這些空間保留給 Redis 未來的物件重複使用,而不是立即釋放。 2. fork 操作會保留頁面(Copy-on-Write) 在執行 RDB 或 AOF 的 fork 操作時,會複製整個進程記憶體,Redis 為了效率,在此期間會保留這些頁面不被釋放,導致內存暫時居高不下。 3. 內存碎片
Jul 31, 2025Contributed by
一、Redis 和 CPU 的基本關係 多數人認為 Redis 性能僅與 CPU 快慢有關,其實 CPU 的「多核架構」與「多 CPU 架構」也會影響 Redis 效能。 二、主流的 CPU 架構 1. CPU 核心與快取層級 每個 CPU 處理器有多個物理核心,每個核心擁有私有的 L1 與 L2 cache。 L3 cache 為共享緩存,各物理核心可共用,容量大但速度較慢。 兩個超執行緒(邏輯核心)共用一個物理核心的 L1/L2 cache。 CleanShot 2025-06-26 at 13.08.44@2x
Jun 26, 2025Contributed by
時間序列數據(Time Series Data) 時間序列數據(Time Series Data)是依時間先後順序排列的數據集合,通常用來表示某個變數隨時間變化的情況。 特點: 時間順序重要 數據點具備時間戳(例如:每天的氣溫、每分鐘的股價) 常用於分析趨勢、季節性、異常等 常見應用:
May 22, 2025Contributed by
先跟你分享一個我曾經遇到的需求。 當時,我們要開發一個圖片存儲系統,要求這個系統能快速地記錄圖片 ID 和圖片在存儲系統中保存時的 ID(可以直接叫作圖片存儲對象 ID)。同時,還要能夠根據圖片 ID 快速查找到圖片存儲對象 ID。 photo_id: 1101000051photo_obj_id: 3301000051 127.0.0.1:6379> set 1101000051 3301000051 我們保存了 1 億張圖片,大約用了 6.4GB 的內存。但是,隨著圖片數據量的不斷增加,我們的 Redis 內存使用量也在增加,結果就遇到了大內存 Redis 實例因為生成 RDB 而響應變慢的問題
Apr 23, 2025Contributed by
打開 Message API Webhook 功能 進入 Line Office Account,在帳號一覽選擇你要設定的 Official Account 設定 > 回應設定 > 打開「聊天」跟「Webhook」功能 image 設定 > Messaging API > 啟用 Messaging API 選擇服務提供者 > 選擇你的帳號
Apr 13, 2025Contributed by
複雜性是規模擴展的大敵 你知道的,程式碼越簡單越好 如果真的無法消除複雜性,那就把它隔離開來 一個簡單的範例 譬如說要計算 sin 的時候,我們只要直接去呼叫 sin 函數就好而不用去管內部的實作 實際上計算 sin 的實作非常的複雜,但是因為他的介面簡單,所以我們用起來也不會很複雜 隱藏內部的細節 v1
Jun 13, 2024Contributed by
如何消除掉那種實際上可以避免的狀況(或者說是「使用上的錯誤」,像是在關閉檔案之後又想要寫入檔案,或是在物件完成初始化之前就去調用那個物件裡的方法) 設計出不容易誤用的程式(介面) 比如說,你寫了某個函式,其中有兩個參數是陣列值,或許你會希望這兩個陣列,總是具有相同的大小 void showAuthorRoyalties( const vector<string> & titles, const vector<double> & royalties) { assert(titles.size() == royalties.size());
May 23, 2024Contributed by
大部分情況下,我們會傾向找出更通用的做法 譬如以下的例子 Sign * findRedSign(const vector<Sign *> & signs) { for (Sign * sign : signs) if (sign->color() == Color::Red) return sign;
Apr 25, 2024Contributed by
11.1 將兩個查詢結果聯集的 UNION 使用UNION 關鍵字可以將兩個查詢的結果做聯集,只要兩者的欄位資料型別、欄位數與欄位排列順序相同即可。 用 UNION 聯集只保留不重複的列資料 聯集的意思就是將兩個集合中的所有元素放在一起,並將重複的元素只保留一個。 我們用兩個SELECT 語句分別查出市集年份是2019與2020年的首次市集日期,然後將這兩個查詢的輸出結果合併起來。因為第一個查詢與第二個查詢的輸出不重複,都會被放進聯集的輸出中: SELECT market_year, MIN(market_date) AS first_market_date FROM farmers_market.market_date_info
Mar 29, 2024Contributed by
如果我們是第一次接觸到這個資料庫時,在做查詢與分析之前,就需要瞭解他的結構與特性。 EDA: 探索性資料分析 9.1 EDA 準備要探索的標的 我們需要透過 SQL 查詢瞭解表格的資料樣貌,包括以下幾件事情: 表格多大? 資料的時間跨度? 每個產品與每筆購買記錄中有哪些可用資訊?
Mar 14, 2024Contributed by