当前位置: 首页 > news >正文

nodejs操作redis的工具类

const Redis = require("ioredis");async function generateStreamID() {// 生成时间戳(毫秒级)const timestamp = Date.now();// 生成唯一的序列号const sequenceNumber = Math.random() * 1000; // 根据需要生成唯一的序列号// 构建 Stream ID,格式为 timestamp-sequenceNumberconst streamID = `${timestamp}-${sequenceNumber.toFixed(0)}`;return streamID;
}async function putStreamToRedis(redisList, key, data) {for (const config of redisList) {const redis = createRedisConnection(config);try {// 写入数据到 Redisawait redis.del(key);// 构建 Stream ID,使用通配符 `*` 代替时间戳和序列号const streamID = "*";// 构建 XADD 命令的参数const args = [key, streamID, ...Object.entries(data).flat()];// 执行 XADD 命令await redis.xadd(...args);console.log("Put data to Redis successfully!");} catch (error) {console.error(`${config.host}: Redis error - ${error.message}`);} finally {redis.quit(); // 请使用 quit() 方法关闭连接而不是 close()}}
}async function putStringToRedis(redisList, key, value) {for (const config of redisList) {const redis = createRedisConnection(config);try {// 写入数据到Redisawait redis.set(key, value);console.log('Put String to Redis successfully!');} catch (error) {console.error(`Failed to put String to Redis for ${config.host}: ${error.message}`);} finally {redis.disconnect(); // 关闭 Redis 连接}}
}async function putMapToRedis(redisList, map) {for (const config of redisList) {const redis = createRedisConnection(config);try {// 写入数据到Redisfor (const [key, value] of map.entries()) {await redis.set(key, value);}// map.forEach((value,key)=>{//   console.log('key'+key+'====value:'+value);//   redis.set(key, value);// });console.log('Put Map to Redis successfully!');} catch (error) {console.error(`Failed to put Map to Redis for ${config.host}: ${error.message}`);} finally {redis.disconnect(); // 关闭 Redis 连接}}
}async function deleteAllKeysWithPrefix(redisList, prefix) {for (const config of redisList) {const redis = createRedisConnection(config);try {const keysToDelete = await redis.keys(`${prefix}*`);for (const key of keysToDelete) {await redis.del(key);}console.log('Deleted keys from Redis successfully!');} catch (error) {console.error(`Failed to delete keys from Redis for ${config.host}: ${error.message}`);} finally {redis.disconnect();}}
}function createRedisConnection(config) {let dbIndex = 0; // 默认连接到 db0// 检查 dbIndex 是否是数字或字符串if (config.dbIndex !== undefined && config.dbIndex !== null) {const parsed = parseInt(config.dbIndex, 10); // 将 dbIndex 转换为整数if (!isNaN(parsed) && parsed >= 0 && parsed < 16) { // Redis 通常提供 0 到 15 的数据库dbIndex = parsed;}}const redisOptions = {host: config.host,port: config.port,// 指定连接的数据库索引db: dbIndex, maxRetriesPerRequest:2};if (config.pwd) {redisOptions.password = config.pwd;}return new Redis(redisOptions);
}async function publishMessage(config, channel, message) {const redis = createRedisConnection(config);return new Promise((resolve, reject) => {redis.publish(channel, message, (error, result) => {// 关闭 Redis 连接redis.disconnect();if (error) {reject(error);} else {console.log('Message published successfully!');resolve(result);}});}).catch((error) => {// 处理 Promise 拒绝console.error(`Failed to publish message: ${error.message}`);throw error; // 重新抛出错误,以防止未处理的 Promise 拒绝警告});
}async function putHashByMap(redisList, dataMap) {for (const config of redisList) {const redis = createRedisConnection(config);console.info("dataMap:"+dataMap);try {// 写入数据到 Redisfor (const [key, value] of dataMap.entries()) {if (value) {try {const result = await redis.hset(key, value);console.log(`hset result for key ${key}: ${result}`);} catch (error) {console.error(`Failed to hset: ${error.message}`);}}}} catch (error) {console.error(`Failed to put hash to Redis: ${error.message}`);} finally {redis.disconnect(); // 关闭 Redis 连接}}
}//判断是否主机
async function isMasterRedis(redisConfig) {const redis = createRedisConnection(redisConfig);try {const info = await redis.info('Replication');const role = info.split('\r\n')[1].split(':')[1].trim();if (role.toLowerCase() === 'master') {console.log(`${redisConfig.host} This Redis instance is a master server.`);return true;} else {console.log(`${redisConfig.host} This Redis instance is not a master server.`);}} catch (error) {console.error(error);} finally {redis.disconnect();}return false;
}//redis执行save命令,生成dump.db
async function saveRedisData(redisList) {try {for (const config of redisList) {const redis = createRedisConnection(config);await redis.save();} } catch (error) {console.error(`Failed to save data to disk. Response: ${error.message}`);}
}module.exports = {putStreamToRedis,putStringToRedis,putMapToRedis,deleteAllKeysWithPrefix,createRedisConnection,publishMessage,putHashByMap,isMasterRedis,saveRedisData
}

redisList参数举例如下:

for (const config of redisList) {
    console.log('Redis Config:');
    console.log('Host:', config.host);
    console.log('Port:', config.port);
    console.log('Password:', config.pwd);
}

 

http://www.lryc.cn/news/424437.html

相关文章:

  • 关于wsl2与win11互联互通的问题
  • C++ 类型转换
  • 2024挖漏洞给报酬的网站汇总,兼职副业3天收益2k
  • 0到1学习Google广告(2):掌握展示位置及排名规则丨出海笔记
  • MySQL数据库读超时/SELECT查询超时 杂记
  • docker数据卷:
  • 【linux】linux中如何通过systemctl来创建和管理服务
  • WPF-实现多语言的静态(需重启)与动态切换(不用重启)
  • UE5学习笔记12-为角色添加蹲下的动作
  • 【笔记】Android 多用户模式和用户类型
  • SQL基础——MySQL的索引
  • 【开发语言】面向对象和面向过程开发思路的区别
  • 谷歌账号登录的时候提示被停用,原因是什么,账号还有救吗?该如何处理?
  • 数据库复习笔记
  • 学习STM32(6)-- STM32单片机ADCDAC的应用
  • 学习记录第二十五天
  • C语言:字符串函数strcmp
  • 【数据分析---偏企业】 Excel操作
  • Ajax-01.原生方式
  • OpenAI GPT-2 model use with TensorFlow JS
  • JVM-运行数据区(堆、栈、元空间)
  • 超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验
  • 信息学奥赛一本通1259:【例9.3】求最长不下降序列
  • 星露谷模组开发教程#3 事件
  • C语言程序设计(初识C语言后部分)
  • 驱动基础开发
  • 从苹果AppStore看AI开发者生态
  • 【Python学习-UI界面】PyQt5 小部件1-Label
  • 【Linux详解】进度条实现 Linux下git 的远程上传
  • Android进阶之路 - res、raw、assets 资源解析、区别对比