Flushing with tags only causes the tag record to be removed. The actual records are not removed.
| Before Flush |
After Flush |
 |
 |
The expiration time is not being set correctly.
If I add to the cache at 2024-02-14 00:16:47 and the record will expire in one hour, the expiration time in the tag is 2024-02-14 00:16:47, not 2024-02-14 01:16:47
{
"expirationTime": "2024-02-14T00:16:47.308Z",
"keys": [
"programmes:{\"filter\":{\"epgId\":\"abc.us\",\"startAt\":\"2024-02-14T00:00:00.000+00:00\"}}"
]
}
My cache config is this
import { CacheConfig } from '@ioc:Adonis/Addons/Adonis5-Cache';
export default {
recordTTL: 60, // record ttl in minutes,
ttlUnits: 'm', // time units for ttl record
currentCacheStorage: 'redis', // storages which used as default cache storage
enabledCacheStorages: ['in-memory', 'redis'], // storages which will be loaded
cacheKeyPrefix: 'cache_record_', // prefix for keys, which will be stored in cache storage
enabledEvents: {
'cache-record:read': false,
'cache-record:written': false,
'cache-record:missed': false,
'cache-record:forgotten': false,
},
} as CacheConfig;
This is getting the TTL as 60, instead of it being converted to ms, so it's only adding 60ms to the expiraton instead of 3600000ms.
|
protected async saveTaggedKeys(keys: string[], ttl: number = this.cacheManager.recordTTL) { |
|
const tagPayload = JSON.stringify({ |
|
expirationTime: dayjs().add(ttl, 'ms').toISOString(), |
|
keys, |
|
}) |
|
await Promise.all( |
|
this._tags.map((tag) => this.storage.addTag(this.buildTagKey(tag), tagPayload)) |
|
) |
|
} |
Changing this to
protected async saveTaggedKeys(keys: string[], ttl: number = this.cacheManager.recordTTL) {
const tagPayload = JSON.stringify({
expirationTime: dayjs().add(ttl, this.cacheManager.cacheConfig.ttlUnits).toISOString(),
keys,
})
await Promise.all(
this._tags.map((tag) => this.storage.addTag(this.buildTagKey(tag), tagPayload))
)
}
Fixes the issue.
Package version
1.3.1
Node.js and npm version
v18.17.0
Sample Code (to reproduce the issue)
await Cache.tags('programmes').put(cacheKey, programmes);
await Cache.tags('programmes').flush()
Flushing with tags only causes the tag record to be removed. The actual records are not removed.
The expiration time is not being set correctly.
If I add to the cache at 2024-02-14 00:16:47 and the record will expire in one hour, the expiration time in the tag is 2024-02-14 00:16:47, not 2024-02-14 01:16:47
{ "expirationTime": "2024-02-14T00:16:47.308Z", "keys": [ "programmes:{\"filter\":{\"epgId\":\"abc.us\",\"startAt\":\"2024-02-14T00:00:00.000+00:00\"}}" ] }My cache config is this
This is getting the TTL as 60, instead of it being converted to ms, so it's only adding 60ms to the expiraton instead of 3600000ms.
adonis5-cache/src/TaggableCacheManager.ts
Lines 57 to 65 in cc28fd5
Changing this to
Fixes the issue.
Package version
1.3.1
Node.js and npm version
v18.17.0
Sample Code (to reproduce the issue)