Merge pull request #13204 from Budibase/BUDI-8046/redis-delete-if-value

Create Redis deleteIfValue utils
This commit is contained in:
Adria Navarro 2024-03-06 15:50:42 +01:00 committed by GitHub
commit 910dfe58c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 0 deletions

View File

@ -332,6 +332,18 @@ class RedisWrapper {
} }
return result return result
} }
async deleteIfValue(key: string, value: any) {
const client = this.getClient()
const luaScript = `
if redis.call('GET', KEYS[1]) == ARGV[1] then
redis.call('DEL', KEYS[1])
end
`
await client.eval(luaScript, 1, addDbPrefix(this._db, key), value)
}
} }
export default RedisWrapper export default RedisWrapper

View File

@ -189,4 +189,26 @@ describe("redis", () => {
) )
}) })
}) })
describe("deleteIfValue", () => {
it("can delete if the value matches", async () => {
const key = structures.uuid()
const value = generator.word()
await redis.store(key, value)
await redis.deleteIfValue(key, value)
expect(await redis.get(key)).toBeNull()
})
it("will not delete if the value does not matches", async () => {
const key = structures.uuid()
const value = generator.word()
await redis.store(key, value)
await redis.deleteIfValue(key, generator.word())
expect(await redis.get(key)).toEqual(value)
})
})
}) })