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

nodejs가 캐싱을 사용하는 방법

May 14, 2023 am 11:01 AM

인터넷의 발전과 함께 네트워크 애플리케이션은 점점 더 복잡해지고 있으며 액세스 요청도 점점 더 많아지고 있습니다. 애플리케이션 성능을 향상시키기 위해 캐싱이 중요한 옵션이 되었으며, 빠른 서버 측 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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까? useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까? Mar 19, 2025 pm 03:58 PM

이 기사에서는 Data Fetching 및 기능 구성 요소의 DOM 조작과 같은 부작용을 관리하기위한 후크 인 React의 useEffect에 대해 설명합니다. 메모리 누출과 같은 문제를 방지하기 위해 사용법, 일반적인 부작용 및 정리를 설명합니다.

게으른 하중의 개념을 설명하십시오. 게으른 하중의 개념을 설명하십시오. Mar 13, 2025 pm 07:47 PM

게으른로드는 필요할 때까지 컨텐츠로드를 지연시켜 초기로드 시간과 서버로드를 줄임으로써 웹 성능 및 사용자 경험을 향상시킵니다.

React Reconciliation 알고리즘은 어떻게 작동합니까? React Reconciliation 알고리즘은 어떻게 작동합니까? Mar 18, 2025 pm 01:58 PM

이 기사는 가상 Dom 트리를 비교하여 DOM을 효율적으로 업데이트하는 React의 조정 알고리즘을 설명합니다. 성능 이점, 최적화 기술 및 사용자 경험에 미치는 영향에 대해 설명합니다. 문자 수 : 159

카레는 JavaScript에서 어떻게 작동하며 그 이점은 무엇입니까? 카레는 JavaScript에서 어떻게 작동하며 그 이점은 무엇입니까? Mar 18, 2025 pm 01:45 PM

이 기사는 다중 연계 기능을 단일 연계 함수 시퀀스로 변환하는 기술 인 JavaScript의 카레에 대해 논의합니다. Currying의 구현, 부분 응용 프로그램 및 실제 용도와 같은 혜택, 코드 읽기 향상을 탐색합니다.

JavaScript의 고차 기능은 무엇이며 어떻게 간결하고 재사용 가능한 코드를 작성하는 데 어떻게 사용할 수 있습니까? JavaScript의 고차 기능은 무엇이며 어떻게 간결하고 재사용 가능한 코드를 작성하는 데 어떻게 사용할 수 있습니까? Mar 18, 2025 pm 01:44 PM

JavaScript의 고차 기능은 추상화, 공통 패턴 및 최적화 기술을 통해 코드 간접성, 재사용 성, 모듈성 및 성능을 향상시킵니다.

usecontext는 무엇입니까? 구성 요소간에 상태를 공유하는 데 어떻게 사용합니까? usecontext는 무엇입니까? 구성 요소간에 상태를 공유하는 데 어떻게 사용합니까? Mar 19, 2025 pm 03:59 PM

이 기사는 REACT의 USECONTEXT를 설명하며, 이는 PROP 시추를 피함으로써 상태 관리를 단순화합니다. 중앙 집중식 상태 및 성능 개선과 같은 렌더링을 통해 성능 향상과 같은 이점에 대해 논의합니다.

Connect ()를 사용하여 React 구성 요소를 Redux 상점에 어떻게 연결합니까? Connect ()를 사용하여 React 구성 요소를 Redux 상점에 어떻게 연결합니까? Mar 21, 2025 pm 06:23 PM

기사는 Connect ()를 사용하여 React 구성 요소를 Redux Store에 연결하고 MapStateToprops, MapDispatchtoprops 및 성능 영향을 설명합니다.

이벤트 핸들러의 기본 동작을 어떻게 방지합니까? 이벤트 핸들러의 기본 동작을 어떻게 방지합니까? Mar 19, 2025 pm 04:10 PM

기사에서는 extentdefault () 메서드를 사용하여 이벤트 처리기의 기본 동작 방지, 향상된 사용자 경험과 같은 이점 및 접근성 문제와 같은 잠재적 문제에 대해 논의합니다.

See all articles