From ee7bbfc209932491820ad51517c27c5323f2fe81 Mon Sep 17 00:00:00 2001 From: anime Date: Sun, 5 Jan 2025 01:57:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90Redis?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=8A=9F=E8=83=BD):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/cache/cache_manager.js | 5 ++++- lib/cache/redis_cache.js | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 lib/cache/redis_cache.js diff --git a/lib/cache/cache_manager.js b/lib/cache/cache_manager.js index f35a1fe1..4f37cf71 100644 --- a/lib/cache/cache_manager.js +++ b/lib/cache/cache_manager.js @@ -1,6 +1,7 @@ import BLOG from '@/blog.config' import FileCache from './local_file_cache' import MemoryCache from './memory_cache' +import RedisCache from './redis_cache' /** * 为减少频繁接口请求,notion数据将被缓存 @@ -40,7 +41,9 @@ export async function delCacheData(key) { * @returns */ function getApi() { - if (process.env.ENABLE_FILE_CACHE) { + if (process.env.REDIS_URL) { + return RedisCache + } else if (process.env.ENABLE_FILE_CACHE) { return FileCache } else { return MemoryCache diff --git a/lib/cache/redis_cache.js b/lib/cache/redis_cache.js new file mode 100644 index 00000000..f4e24cde --- /dev/null +++ b/lib/cache/redis_cache.js @@ -0,0 +1,40 @@ +import Redis from 'ioredis' +import BLOG from '@/blog.config' +import { siteConfig } from '@/lib/config' + +const redisClient = new Redis(process.env.REDIS_URL) +const cacheTime = Math.trunc( + siteConfig('NEXT_REVALIDATE_SECOND', BLOG.NEXT_REVALIDATE_SECOND) * 1.5 +) + +export async function getCache(key) { + try { + const data = await redisClient.get(key) + return data ? JSON.parse(data) : null + } catch (e) { + console.error('redisClient读取失败 ' + e) + } +} + +export async function setCache(key, data, customCacheTime) { + try { + await redisClient.set( + key, + JSON.stringify(data), + 'EX', + customCacheTime || cacheTime + ) + } catch (e) { + console.error('redisClient写入失败 ' + e) + } +} + +export async function delCache(key) { + try { + await redisClient.del(key) + } catch (e) { + console.error('redisClient删除失败 ' + e) + } +} + +export default { getCache, setCache, delCache }