diff --git a/ghost/core/core/server/adapters/lib/redis/AdapterCacheRedis.js b/ghost/core/core/server/adapters/lib/redis/AdapterCacheRedis.js index 9a1177aefef..48aee27e5ee 100644 --- a/ghost/core/core/server/adapters/lib/redis/AdapterCacheRedis.js +++ b/ghost/core/core/server/adapters/lib/redis/AdapterCacheRedis.js @@ -181,6 +181,9 @@ class AdapterCacheRedis extends BaseCacheAdapter { this.cache.get(key).then((result) => { clearTimeout(timer); resolve(result); + }).catch(() => { + clearTimeout(timer); + resolve(null); }); }); } diff --git a/ghost/core/test/unit/server/adapters/lib/redis/adapter-cache-redis.test.js b/ghost/core/test/unit/server/adapters/lib/redis/adapter-cache-redis.test.js index 167f7117f4b..c40971efb06 100644 --- a/ghost/core/test/unit/server/adapters/lib/redis/adapter-cache-redis.test.js +++ b/ghost/core/test/unit/server/adapters/lib/redis/adapter-cache-redis.test.js @@ -60,6 +60,24 @@ describe('Adapter Cache Redis', function () { assert.equal(value, 'value from cache'); }); + it('returns null if the cache get rejects and getTimeoutMilliseconds is set', async function () { + const redisCacheInstanceStub = { + get: sinon.stub().rejects(new Error('Stream isn\'t writeable and enableOfflineQueue options is false')), + store: { + getClient: sinon.stub().returns({ + on: sinon.stub() + }) + } + }; + const cache = new RedisCache({ + cache: redisCacheInstanceStub, + getTimeoutMilliseconds: 100 + }); + + const value = await cache.get('key'); + assert.equal(value, null); + }); + it('returns null if getTimeoutMilliseconds is exceeded', async function () { const redisCacheInstanceStub = { get: sinon.stub().callsFake(async () => {