Spaces:
Runtime error
Runtime error
| /** | |
| * A simple in-memory cache implementation | |
| */ | |
| import { Redis } from 'ioredis'; | |
| export class RedisListCache { | |
| constructor(params = {}) { | |
| this.redis = new Redis({ | |
| host: 'redis-12291.c305.ap-south-1-1.ec2.cloud.redislabs.com', | |
| port: 12291, | |
| password: 'KQCVapXXF2ioM4zF5krQFImzAYkKWY5l', | |
| username: "default" | |
| }) | |
| this.namespace = params.namespace ? params.namespace + ':' : ''; | |
| } | |
| // Get a value from the list | |
| async getItem(key, index) { | |
| const namespacedKey = this.namespace + key; | |
| const item = await this.redis.lindex(namespacedKey, index); | |
| return item ? JSON.parse(item) : null; | |
| } | |
| // Get a value from the list | |
| async updateItem(key, index, newValue) { | |
| const namespacedKey = this.namespace + key; | |
| const length = await this.redis.llen(namespacedKey); | |
| if (index >= length) { | |
| throw new Error('Index out of range'); | |
| } | |
| // Update the item at the specified index | |
| await this.redis.lset(namespacedKey, index, JSON.stringify(newValue)); | |
| } | |
| // Get a all keys | |
| async keys(key) { | |
| const namespacedKey = this.namespace + key; | |
| return this.redis.keys(namespacedKey); | |
| } | |
| // check if key exists | |
| async exists(key, index) { | |
| const namespacedKey = this.namespace + key; | |
| const item = await this.redis.exists(namespacedKey); | |
| return item; | |
| } | |
| // Set multiple values in the list | |
| async setItems(key, ...values) { | |
| const namespacedKey = this.namespace + key; | |
| const items = values.map(value => JSON.stringify({ | |
| ...value, | |
| })); | |
| await this.redis.rpush(namespacedKey, ...items); | |
| } | |
| // Remove a value from the list | |
| async removeItem(key, count, value) { | |
| const namespacedKey = this.namespace + key; | |
| const item = JSON.stringify(value); | |
| return this.redis.lrem(namespacedKey, count, item); | |
| } | |
| // Get the length of the list | |
| async length(key) { | |
| const namespacedKey = this.namespace + key; | |
| return this.redis.llen(namespacedKey); | |
| } | |
| // Get all items from the list | |
| async getAll(key, page, limit) { | |
| const namespacedKey = this.namespace + key; | |
| const items = await this.redis.lrange(namespacedKey, 0, -1); | |
| if (page && limit) { | |
| const startIndex = (page - 1) * limit; | |
| const endIndex = startIndex + limit; | |
| const _items = items.slice(startIndex, endIndex); | |
| return _items.map(item => JSON.parse(item)); | |
| } | |
| return items.map(item => JSON.parse(item)); | |
| } | |
| // Remove all items from the list | |
| async clear(key) { | |
| const namespacedKey = this.namespace + key; | |
| return this.redis.del(namespacedKey); | |
| } | |
| // Close the Redis connection | |
| async close() { | |
| await this.redis.quit(); | |
| } | |
| } | |