在node專案開發過程中,快取常常被用來解決高效能、高併發等問題。在我們的實際專案中,運用快取的思路是記憶體快取-->介面-->檔案快取。前面的總結中已經詳細的說明了怎麼實現和封裝記憶體快取和檔案快取。雖然二級快取已經基本能夠滿足現在的所有場景需求,但現在我們再加一級redis快取,從而使我們的專案更加穩定。
redis的封裝:
const redis = require('redis');const myredis = ; //設定項 this.client = redis.createclient(rds_port, rds_host, rds_opts); let c: any = this.client; c.auth(rds_pwd, function () ); c.on('error', function (err:any) ); c.on('ready', function () ); }, init: function () }; instance.get = function (key: any, callback: any) ) }) }; instance.setex = function (key: any, value: any, callback: any) }; return instance; },};export default myredis.init();
為了滿足更多場景的使用,我們這裡對redis的set和get方法進行了重寫,並在結尾匯出了新的redisclient例項 instance ,在get 方法中,為了在外部呼叫的過程中直接拿到資料,我們使用了 promise 封裝了一下get方法。
使用:
.............import rediscache from "../redis";.............async function apicache(input_options: apicache_options): promise else if (options.postdata != null) else //redis快取 let redis_cache = await rediscache.get(key); if (redis_cache != null); //記憶體快取 let api_memery_cache = memorycache.get(key) if (api_memery_cache != null) else } // console.info('直接調介面') try if (options.is_stream) let back = await axios(aoptions) // console.log(back) let backdata = back.data; if (options.error_replace && options.check_callback) else ) backdata = options.error_replace } } let cache_content = rediscache.set(key, cache_content) memorycache.put(key, cache_content) filecache.put(key, cache_content) if (options.success_log) ) } return backdata } catch (error) ) if (options.error_replace !== undefined) else }}export default apicache
完整的快取中介軟體就不贅述,可看以前的總結web建站小結 ,在上面的刪減版的**中,為了方便觀察,將redis快取的讀寫放在了最上面,啟動專案,在redis桌面管理工具(redisdesktopmanager)中檢視:
頁面上對應的部分:
CPU多級快取
l1 cache是cpu第一級快取,分為資料快取和指令快取.以幫伺服器cpu的l1快取的容量通常在21 4906kb.l2 cache由於l1級快取記憶體容量限制,為了再次提高cpu的運算速度在cpu外部放置已高速儲存器,即二級快取。l3 cache現在都是內建的,而他可以進一步降低記憶體延遲,同時...
自構建多級快取
一 背景說明 準備使用責任鏈模式,構建多級快取鏈,依次逐級向下取值,直到取到值為止。將取到的值再逐級賦值給未取到值的快取級。二 定義多級list 鏈路介面類chain public inte ce chain快取公用介面 public inte ce cacheclient快取實現類 public ...
Eureka Server的多級快取
最近加班比較多,所以沒有太多的時間來寫部落格,希望每位小夥伴都是體諒一下。首先介紹一下eureka service的多級快取有哪些,當然在上節的時候也說過了,這裡在說一下,readwritecachemap 讀寫快取 和readonlycachemap 唯讀快取 第一步是先從唯讀快取裡面去獲取資料,...