redis.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const { createClient } = require("redis");
  2. //创建全局redis客户端实例
  3. let client;
  4. //初始化redis客户端
  5. const redisClient = async () => {
  6. if (client) return; //如果客户端已初始化,则不再重复初始化
  7. client = await createClient()
  8. .on("error", err => { console.log('redis链接失败', err) })
  9. .connect();
  10. }
  11. //存入数组或者对象,并可选的设置过期时间
  12. //@param key 键名
  13. //@param value 要存储的值
  14. //@param ttl 可选,以秒为单位的过期时间,默认不设置
  15. const setKey = async (key, value, ttl=null) => {
  16. if (!client) await redisClient(); //确保客户端已经初始化
  17. value = JSON.stringify(value); //将对象转换为JSON字符串
  18. await client.set(key, value);
  19. //如果提供了过期时间,则设置
  20. if (ttl !== null) {
  21. await client.expire(key, ttl);
  22. }
  23. }
  24. //读取数组或者对象
  25. //@param key 键名
  26. //@param {promise<any>} 解析后的JSON对象或数组
  27. const getKey = async (key) => {
  28. if (!client) await redisClient(); //确保客户端已经初始化
  29. const value = await client.get(key);//将获取到的JSON字符串转换为对象
  30. return value ? JSON.parse(value) : null; //如果value为空,返回null而不是抛出错误
  31. }
  32. //清除缓存数据
  33. //@param key 键名
  34. //@param {promise<void>}
  35. const delKey = async (key) => {
  36. if (!client) await redisClient(); //确保客户端已经初始化
  37. await client.del(key);
  38. }
  39. module.exports = { redisClient, setKey, getKey, delKey };