const cached = async (key, getFn, expire) => { let value = await redisClient.getAsync(key); value = value !== 'undefined' && JSON.parse(value) || null; if (!value) { value = await getFn(); await redisClient.setAsync(key, JSON.stringify(value), 'EX', expire || 3600); } return value; }
const prevStory = findPrevStory(oldList, s); const storyFromApi = await cached(`${hnInsightsStateKey}_STORY_${s.id}`, () => fetchStory(s.id), 60 * 60); const addedToFrontEvent = JSON.parse(await redisClient.getAsync(storyAddedEventRedisKey(s))); const oldStory = oldList && oldList.find(old => old.id === s.id); if (storyFromApi && s.score) {
sub.on('subscribe', function (channel, count) { sub.getAsync(`chave-${line}`) .then(data => { console.log(data); }) .catch(err => console.log(err)); });
async get(key) { if (!key) { throw new Error('❌ Key is required when fetch value.') } return await this.redisClient.getAsync(key) }
rl.on('line', line => { if (line === "quit") { rl.close(); } sub.getAsync(`chave-${line}`) .then(data => { rl.prompt(); }) .catch(err => console.log(err)); }).on('close', () => { process.exit(0); });
async get (id) { const row = await db.getAsync(id); if (!row) { return {}; } const random = row.slice(0, RND_STRLEN); const link = row.slice(RND_STRLEN); return { random, link }; }
(async () => { await client.setAsync('0', 'Hello World!', 'EX', 5); const value = await client.getAsync('0'); console.log(value); await client.hsetAsync('1', 'Hello', 'World'); await client.hsetAsync('1', 'Hello!', 'World!'); const values = await client.hmgetAsync('1', 'Hello', 'Hello!'); console.log(values); await client.quitAsync(); })();
/* 提交验证码,需要提交 captchaId、captchaCode、mobilePhoneNumber,认证成功才会发送短信 */ router.post('/verify', function(req, res, next) { redisClient.getAsync(captchaKey(req.body.captchaId)).then(function(captchaCode) { if (captchaCode && captchaCode === req.body.captchaCode) { // 在验证成功后删除验证码信息,防止验证码被反复使用 return redisClient.delAsync(captchaKey(req.body.captchaId)).then(function() { return AV.User.requestMobilePhoneVerify(req.body.mobilePhoneNumber).then(function() { return res.send(); }); }); } else { res.sendStatus(401); } }).catch(next); });
/** * 读取代理函数 */ const readProxies = async () => { try { let result = JSON.parse(await REDIS.getAsync('proxy')) // 如果获取到了,说明没过期 if (result) { return Promise.resolve(result) } else { await writeProxies() return Promise.resolve(JSON.parse(await REDIS.getAsync('proxy'))) } } catch (e) { _debug(`Redis读取代理失败,${e}`) } return Promise.resolve([]) }
async get(key, ttl) { if (key && ttl) { // Profile let profileStart = null if (program.mode === 'profile') { profileStart = +moment() } let got = JSON.parse(await client.getAsync(key)) if (program.mode === 'profile') { let profileEnd = +moment() console.log(`[Profile] 缓存读取 ${profileEnd - profileStart} ms`) } if (got) { let expired = +moment().unix() - got.time >= ttl return [got.value, expired] } } return [null, true] }
/* 从缓存中读取一个 User, 如果没有找到则从云存储中查询 */ function fetchUserFromCache(userId) { return redisClient.getAsync(userId).then(function(cachedUser) { if (cachedUser) { // 反序列化为 AV.Object return new AV.User(JSON.parse(cachedUser), {parse: true}); } else { new AV.Query(AV.User).get(userId).then(function(user) { if (user) { // 将序列化后的 JSON 字符串存储到 LeanCache redisClient.setAsync(redisUserKey(userId), JSON.stringify(user)).catch(console.error); } return user; }); } }); }
//TODO: make a stream for large sets async getPlanet(){ return client.getAsync('freqly_planet') }
/* 我们可以从 Redis 中查到当前是哪个 task 在持有这个锁 */ router.get('/', function(req, res, next) { redisClient.getAsync('some-lock').then(function(workerId) { res.json({ lockedBy: workerId }); }).catch(next); });
async get (key) { if (!key) { throw new Error('❌ Key is required when fetch value.') } return await this.redisClient.getAsync(key) }
//TODO: make a stream for large sets async getActor(){ return client.getAsync('freqly_actor') }