>웹 프론트엔드 >프런트엔드 Q&A >nodejs가 캐싱을 사용하는 방법

nodejs가 캐싱을 사용하는 방법

WBOY
WBOY원래의
2023-05-14 11:01:082483검색

인터넷의 발전과 함께 네트워크 애플리케이션은 점점 더 복잡해지고 있으며 액세스 요청도 점점 더 많아지고 있습니다. 애플리케이션 성능을 향상시키기 위해 캐싱이 중요한 옵션이 되었으며, 빠른 서버 측 JavaScript 언어인 Node.js도 캐싱을 사용하는 다양한 방법을 지원합니다. 이 기사에서는 Node.js가 캐싱을 사용하여 애플리케이션 성능을 향상시키는 방법을 소개합니다.

1. 캐싱의 기본 원리

캐시는 자주 사용하는 일부 데이터를 메모리나 디스크에 저장할 수 있습니다. 데이터를 사용해야 할 경우 캐시에서 직접 가져올 수 있으므로 각 쿼리 시간이 단축되고 시스템 응답이 향상됩니다. 속도. 캐시는 일반적으로 키-값 쌍의 형태로 데이터를 저장합니다. 여기서 키는 모든 유형의 데이터일 수 있고 값은 문자열, 숫자, JavaScript 개체 또는 기타 데이터 유형일 수 있습니다.

Node.js에서는 핵심 모듈 cache를 사용하여 자체 캐시를 만들 수 있습니다. 이 모듈은 다음 메서드를 제공합니다. cache来创建我们自己的缓存。该模块提供了以下方法:

  • cache.get(key): 获取指定键值对应的数据。
  • cache.set(key, value, ttl): 将指定的值存储到缓存中,使用指定的键作为标识符。ttl表示存活时间(英文为Time To Live),即在该时间内,数据能够从缓存中被访问到。
  • cache.del(key): 删除指定键值对应的数据。
  • cache.clear(): 清空所有缓存。

需要注意的是,使用Node.js内置的缓存模块缓存的数据只能在当前的进程中共享,不能实现进程间的共享。如果需要实现进程间的共享,可以使用第三方的缓存模块,例如Memcached或Redis。

二、使用Node.js内置缓存模块

在实际开发中,我们可以使用Node.js内置的cache模块来实现缓存数据。下面是一个简单的例子:

const cache = require('cache');
let data = null;

if (cache.get('data')) {
  data = cache.get('data');
} else {
  // 数据库查询操作
  data = db.query('SELECT * FROM users');
  // 将数据存储到缓存中,使用'users'作为键,存活时间为1小时
  cache.set('users', data, 3600);
}

// 使用data数据

在上面的例子中,我们首先尝试从缓存中获取数据,如果找到了相应的键,则直接使用缓存中的数据。如果没有找到,则查询数据库,并将查询到的数据存储到缓存中,以减少数据库查询的次数。该数据的存活时间为1小时,过期后需要重新查询数据库,并更新缓存中的数据。

三、使用Redis缓存

除了使用Node.js内置的缓存模块,我们还可以使用第三方的缓存模块,例如Redis。Redis是一个基于内存的缓存数据库,可以实现互联网应用程序的高速缓存。下面是一个使用Redis缓存的例子:

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

let data = null;
client.get('users', (err, result) => {
  if (result) {
    data = result;
  } else {
    // 数据库查询操作
    data = db.query('SELECT * FROM users');
    // 将数据存储到Redis中,使用'users'作为键,存活时间为1小时
    client.setex('users', 3600, JSON.stringify(data));
  }
});

// 使用data数据

在上面的例子中,我们使用了Redis的get方法来获取数据,如果找到了相应的键,则直接使用缓存中的数据。如果没有找到,则查询数据库,并将查询到的数据存储到Redis中,以减少数据库查询的次数。该数据的存活时间为1小时,过期后需要重新查询数据库,并更新Redis中的数据。

四、缓存失效处理

缓存的数据在存活时间内始终保持相同,但是当缓存的数据过期后,需要重新查询数据库,并更新缓存中的数据。为了确保数据的实时性,我们可以使用定时器来定时清理缓存中过期的数据。例如,每5分钟清理一次缓存:

setInterval(() => {
  cache.clear();
}, 300000);

在上面的例子中,我们使用setInterval

cache.get(key): 지정된 키 값에 해당하는 데이터를 가져옵니다.

cache.set(key, value, ttl): 지정된 키를 식별자로 사용하여 지정된 값을 캐시에 저장합니다. ttl은 TTL(Time To Live)을 의미합니다. 즉, 이 시간 내에 캐시에서 데이터에 액세스할 수 있습니다.

    cache.del(key): 지정된 키 값에 해당하는 데이터를 삭제합니다.
  1. cache.clear(): 모든 캐시를 지웁니다.

Node.js에 내장된 캐싱 모듈을 사용하여 캐시된 데이터는 현재 프로세스 내에서만 공유할 수 있으며 프로세스 간에 공유할 수 없다는 점에 유의해야 합니다. 프로세스 간 공유가 필요한 경우 Memcached 또는 Redis와 같은 타사 캐시 모듈을 사용할 수 있습니다.
  • 2. Node.js에 내장된 캐시 모듈을 사용하세요
  • 실제 개발에서는 Node.js에 내장된 cache 모듈을 사용해 데이터를 캐시할 수 있습니다. 간단한 예는 다음과 같습니다.
  • rrreee
  • 위 예에서는 먼저 캐시에서 데이터를 가져오려고 시도하고 해당 키가 발견되면 캐시에서 데이터를 직접 사용합니다. 찾을 수 없는 경우 데이터베이스를 쿼리하고 쿼리된 데이터를 캐시에 저장하여 데이터베이스 쿼리 수를 줄입니다. 이 데이터의 생존 시간은 1시간입니다. 만료 후 데이터베이스를 다시 쿼리하고 캐시의 데이터를 업데이트해야 합니다.
  • 3. Redis 캐시 사용
Node.js에 내장된 캐싱 모듈을 사용하는 것 외에도 Redis와 같은 타사 캐싱 모듈을 사용할 수도 있습니다. Redis는 인터넷 애플리케이션의 캐싱을 가능하게 하는 메모리 기반 캐싱 데이터베이스입니다. 다음은 Redis 캐시를 사용하는 예입니다.

rrreee

위 예에서는 Redis의 get 메소드를 사용하여 해당 키를 찾으면 캐시에 있는 데이터를 직접 사용합니다. . 찾을 수 없는 경우 데이터베이스를 쿼리하고 쿼리된 데이터를 Redis에 저장하여 데이터베이스 쿼리 수를 줄입니다. 이 데이터의 생존 시간은 1시간입니다. 만료 후 데이터베이스를 다시 쿼리하고 Redis에서 데이터를 업데이트해야 합니다.
  1. 4. 캐시 무효화 처리
캐시된 데이터는 생존 기간 동안 항상 동일하게 유지되지만, 캐시된 데이터가 만료되면 데이터베이스를 다시 쿼리하고 캐시에 있는 데이터를 업데이트해야 합니다. 데이터의 실시간 특성을 보장하기 위해 타이머를 사용하여 캐시에서 만료된 데이터를 정기적으로 지울 수 있습니다. 예를 들어 5분마다 캐시를 ​​삭제합니다.

rrreee

위의 예에서는 setInterval 메서드를 사용하여 캐시에서 만료된 데이터를 정기적으로 삭제합니다. 시간 간격은 5분입니다. 5분. 🎜🎜5. 캐싱 전략🎜🎜애플리케이션 성능을 향상시키기 위해 캐시를 사용할 때 일부 캐싱 전략을 고려해야 합니다. 🎜🎜🎜캐시 제거 전략🎜🎜🎜캐시 제거 전략은 캐시가 특정 크기에 도달하거나 생존 시간이 특정 기간에 도달한 후 캐시의 데이터를 정리하기 위해 일부 제거 전략을 채택해야 함을 의미합니다. 일반적인 제거 전략은 다음과 같습니다. 🎜🎜🎜FIFO(선입선출): 캐시에 처음 들어간 데이터를 지웁니다. 🎜🎜LIFO(후입선출): 캐시에 마지막으로 입력된 데이터를 지웁니다. 🎜🎜LFU(Least Recent Used): 가장 적게 사용하여 데이터를 정리합니다. 🎜🎜LRU(Least Recent Used): 가장 오랫동안 사용되지 않은 데이터를 지웁니다. 🎜🎜🎜실제 개발에서는 캐시 효율성을 높이기 위해 특정 애플리케이션 시나리오에 따라 다양한 제거 전략을 채택할 수 있습니다. 🎜🎜🎜캐시 업데이트 전략🎜🎜🎜캐시 업데이트 전략은 데이터베이스의 데이터가 업데이트될 때 캐시에 있는 데이터가 데이터베이스의 데이터와 동기화되도록 하는 방법을 의미합니다. 일반적인 캐시 업데이트 전략은 다음과 같습니다. 🎜
  • Cache-Aside(캐시 우회): 데이터를 읽어야 할 때 먼저 캐시에서 검색하고, 발견되면 직접 반환합니다. 그렇지 않으면 데이터베이스에서 쿼리하고 쿼리된 데이터를 저장합니다. 캐시에 저장하고 데이터를 반환합니다. 데이터를 업데이트해야 하는 경우 먼저 데이터베이스의 데이터를 업데이트한 다음 캐시에서 데이터를 삭제합니다. 데이터를 다시 읽을 때 데이터베이스에서 다시 읽고 캐시의 데이터를 업데이트합니다.
  • Write-Through(연속 쓰기 캐시): 데이터 조각을 삽입하거나 업데이트해야 할 때 먼저 데이터베이스의 데이터를 업데이트한 다음 데이터를 캐시에 저장합니다. 데이터를 읽어야 할 경우 먼저 캐시에서 검색하고, 발견되면 직접 반환합니다. 그렇지 않으면 데이터베이스에서 쿼리하고 쿼리된 데이터를 캐시에 저장한 후 데이터를 반환합니다. 데이터를 삭제해야 하는 경우 먼저 데이터베이스의 데이터를 삭제한 다음 캐시에서 데이터를 삭제합니다.

실제 개발에서는 캐시와 데이터베이스 간의 데이터 일관성을 보장하기 위해 특정 애플리케이션 시나리오에 따라 다양한 캐시 업데이트 전략을 채택할 수 있습니다.

6. 요약

캐싱은 애플리케이션 성능을 향상시키는 중요한 수단 중 하나입니다. Node.js에서는 내장된 cache 모듈을 사용하여 캐싱을 구현하거나 Redis와 같은 타사 캐싱 모듈을 사용할 수 있습니다. 캐시를 사용할 때는 캐시 효율성과 데이터 일관성을 향상시키기 위해 캐시 제거 전략과 캐시 업데이트 전략을 고려해야 합니다. 캐싱은 애플리케이션 성능을 향상시킬 수 있지만, 주의해야 할 캐시 보안 및 관리 비용도 있습니다.

위 내용은 nodejs가 캐싱을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:nodejs 요청 전달다음 기사:nodejs 요청 전달