HotTRDealsBackend/services/redis/userProfileCache.service.js
2026-02-04 06:39:10 +00:00

49 lines
1.4 KiB
JavaScript

const { getRedisClient } = require("./client")
const { recordCacheMiss } = require("./cacheMetrics.service")
const PROFILE_KEY_PREFIX = "data:profiles:user:"
const DEFAULT_TTL_SECONDS = 60
function createRedisClient() {
return getRedisClient()
}
function normalizeUserName(userName) {
const normalized = String(userName || "").trim().toLowerCase()
return normalized || null
}
async function getUserProfileFromRedis(userName) {
const keyName = normalizeUserName(userName)
if (!keyName) return null
const redis = createRedisClient()
try {
const raw = await redis.call("JSON.GET", `${PROFILE_KEY_PREFIX}${keyName}`)
if (!raw) {
await recordCacheMiss({ key: `${PROFILE_KEY_PREFIX}${keyName}`, label: "user-profile" })
return null
}
return JSON.parse(raw)
} finally {}
}
async function setUserProfileInRedis(userName, payload, { ttlSeconds = DEFAULT_TTL_SECONDS } = {}) {
const keyName = normalizeUserName(userName)
if (!keyName || !payload) return false
const redis = createRedisClient()
try {
const key = `${PROFILE_KEY_PREFIX}${keyName}`
await redis.call("JSON.SET", key, "$", JSON.stringify(payload))
const ttl = Number(ttlSeconds)
if (Number.isFinite(ttl) && ttl > 0) {
await redis.expire(key, ttl)
}
return true
} finally {}
}
module.exports = {
getUserProfileFromRedis,
setUserProfileInRedis,
}