rc-plugin/utils/redis-util.js
zhiyu1998 22274d805c feat: 扩展Redis工具函数功能
- 添加`redisDeleteKey`函数,用于删除指定的Redis key
- 添加`redisGetAllKeys`函数,用于获取所有Redis keys
- 添加`redisExpireKey`函数,用于设置Redis key的过期时间
- 添加`redisTTLKey`函数,用于获取Redis key的剩余生存时间
- 优化注释和示例代码,提高代码的可读性和易用性
2024-09-11 13:42:15 +08:00

136 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 判断某个key是否存在
* @param key
* @returns {Promise<boolean>}
* @example
* const exists = await redisExistKey('myKey');
* console.log(exists); // true or false
*/
export async function redisExistKey(key) {
return redis.exists(key);
}
/**
* 获取某个key的值
* @param key
* @returns {Promise<Object>}
* @example
* const value = await redisGetKey('myKey');
* console.log(value); // { ... }
*/
export async function redisGetKey(key) {
return JSON.parse(await redis.get(key));
}
/**
* 为某个key设置值value必须是个键值对
* @param key
* @param value
* @returns {Promise<*>}
* @example
* await redisSetKey('myKey', { foo: 'bar' });
*/
export async function redisSetKey(key, value = {}) {
return redis.set(
key,
JSON.stringify(value),
);
}
/**
* 判断是否存在这个key然后再取值如果没有就返回null
* @param key
* @returns {Promise<Object|Array>}
* @example
* const value = await redisExistAndGetKey('myKey');
* console.log(value); // { ... } or null
*/
export async function redisExistAndGetKey(key) {
if (await redisExistKey(key)) {
return redisGetKey(key);
}
return null;
}
/**
* 在某个 key 的末尾插入一个对象
* @param key
* @param obj
* @returns {Promise<void>}
* @example
* await redisExistAndInsertObject('myKey', { newKey: 'newValue' });
*/
export async function redisExistAndInsertObject(key, obj) {
let objs = await redisExistAndGetKey(key);
if (objs) {
objs = { ...objs, ...obj };
await redisSetKey(key, objs);
} else {
await redisSetKey(key, obj);
}
}
/**
* 更新Redis中某个对象的值
* @param key
* @param updateKey
* @param updateObj
* @returns {Promise<void>}
* @example
* await redisExistAndUpdateObject('myKey', 'updateKey', { foo: 'bar' });
*/
export async function redisExistAndUpdateObject(key, updateKey, updateObj) {
let objs = await redisExistAndGetKey(key);
if (Object.keys(objs).includes(updateKey)) {
objs[updateKey] = updateObj;
await redisSetKey(key, objs);
}
}
/**
* 删除某个key
* @param key
* @returns {Promise<number>}
* @example
* const result = await redisDeleteKey('myKey');
* console.log(result); // 1 if key was deleted, 0 if key did not exist
*/
export async function redisDeleteKey(key) {
return redis.del(key);
}
/**
* 获取所有的key
* @returns {Promise<Array<string>>}
* @example
* const keys = await redisGetAllKeys();
* console.log(keys); // ['key1', 'key2', ...]
*/
export async function redisGetAllKeys() {
return redis.keys('*');
}
/**
* 设置某个key的过期时间
* @param key
* @param seconds
* @returns {Promise<boolean>}
* @example
* const result = await redisExpireKey('myKey', 3600);
* console.log(result); // true if timeout was set, false if key does not exist
*/
export async function redisExpireKey(key, seconds) {
return redis.expire(key, seconds);
}
/**
* 获取某个key的剩余生存时间
* @param key
* @returns {Promise<number>}
* @example
* const ttl = await redisTTLKey('myKey');
* console.log(ttl); // time to live in seconds, -1 if key does not have timeout, -2 if key does not exist
*/
export async function redisTTLKey(key) {
return redis.ttl(key);
}