// 安装 Redis 客户端
npm install redis

// 引入 Redis
const redis = require('redis');

// 创建 Redis 客户端实例
const client = redis.createClient();

// 发布消息
client.publish('channel', 'Hello, Redis!');

// 订阅消息
client.subscribe('channel');

// 监听消息
client.on('message', (channel, message) => {
  console.log(`Received message from channel ${channel}: ${message}`);
});

使用 Redis 实现分布式锁

const redis = require('redis');
const client = redis.createClient();

async function acquireLock(resource, timeout) {
  return new Promise((resolve, reject) => {
    const identifier = generateUniqueIdentifier();

    // 使用 SETNX 命令获取锁
    client.setnx(resource, identifier, (err, result) => {
      if (err) {
        reject(err);
        return;
      }

      if (result === 1) {
        resolve(identifier);
      } else {
        // 获取锁失败,等待并重试
        setTimeout(async () => {
          try {
            const newIdentifier = await acquireLock(resource, timeout);
            resolve(newIdentifier);
          } catch (err) {
            reject(err);
          }
        }, 100);
      }
    });
  });
}

async function releaseLock(resource, identifier) {
  return new Promise((resolve, reject) => {
    // 使用 Lua 脚本解锁,保证解锁的原子性
    const script = 'if redis.call("get",KEYS[1]) == ARGV[1] then \
                      return redis.call("del",KEYS[1]) \
                    else \
                      return 0 \
                    end';
    client.eval(script, 1, resource, identifier, (err, result) => {
      if (err) {
        reject(err);
      } else {
        resolve(result);
      }
    });
  });
}

Redis 高性能缓存方案

const redis = require('redis');
const client = redis.createClient();

function getCache(key) {
  return new Promise((resolve, reject) => {
    // 先查询缓存
    client.get(key, (err, result) => {
      if (err) {
        reject(err);
        return;
      }

      if (result) {
        // 返回缓存数据
        resolve(JSON.parse(result));
      } else {
        // 从数据库中查询数据
        const data = fetchDataFromDatabase();

        // 将数据缓存起来
        client.setex(key, 3600, JSON.stringify(data));

        // 返回数据
        resolve(data);
      }
    });
  });
}

function fetchDataFromDatabase() {
  // 模拟从数据库中查询数据的过程
  console.log('Fetching data from database...');
  return { id: 1, name: 'Redis 高性能缓存方案' };
}

利用 Redis 实现限流功能

const redis = require('redis');
const client = redis.createClient();

function limitRequest(key, maxRequests, duration) {
  return new Promise((resolve, reject) => {
    // 使用 Redis 的 INC command 实现计数器
    client.incr(key, (err, currentCount) => {
      if (err) {
        reject(err);
        return;
      }

      if (currentCount > maxRequests) {
        // 超过最大请求数,拒绝请求
        reject(new Error('Too many requests'));
      } else {
        // 还未达到最大请求数,放行请求
        resolve();
      }

      // 设置过期时间,以清除计数器
      client.expire(key, duration);
    });
  });
}