Кеширование (Redis, CDN, кеширование на стороне клиента)

Редактировать
Раздел: Backend

Кеширование — это процесс временного хранения данных, чтобы ускорить доступ к ним. Оно используется для снижения нагрузки на сервер, увеличения скорости работы приложения и оптимизации использования ресурсов.


1. Что такое кеширование?

Кеширование — это метод хранения копий данных в быстродоступных местах, таких как оперативная память или локальное хранилище клиента. Оно минимизирует необходимость повторного запроса к источнику данных (например, базе данных или API).

Основные уровни кеширования

1. **Серверное кеширование**: Хранение данных в памяти или специализированных инструментах (например, Redis). 2. **CDN (Content Delivery Network)**: Хранение статических файлов (CSS, JS, изображения) в распределённых узлах сети. 3. **Клиентское кеширование**: Использование локального хранилища браузера (LocalStorage, IndexedDB).

2. Redis

Что такое Redis?

Redis (Remote Dictionary Server) — это высокопроизводительное хранилище данных в оперативной памяти, используемое для серверного кеширования. Оно поддерживает различные структуры данных, такие как строки, списки, хэши и множества.

Основные команды Redis

1. **Запись данных**: ```bash SET key value ``` 2. **Чтение данных**: ```bash GET key ``` 3. **Установка времени жизни (TTL)**: ```bash SETEX key 3600 value ``` 4. **Удаление данных**: ```bash DEL key ```

Использование Redis в Node.js

1. Установка: ```bash npm install redis ``` 2. Пример кода: ```javascript const redis = require('redis'); const client = redis.createClient();

client.on('connect', () => { console.log('Connected to Redis'); });

client.set('key', 'value', (err, reply) => { console.log(reply); // OK });

client.get('key', (err, reply) => { console.log(reply); // value });

text

---

<h2 id="3-cdn-content-delivery-network">3. CDN (Content Delivery Network)</h2>

<h3 id="что-такое-cdn">Что такое CDN?</h3>
CDN — это сеть серверов, распределённых по всему миру, которые обеспечивают быстрый доступ к статическим файлам. Основная цель — минимизировать задержки доставки контента пользователям.

<h3 id="как-работает-cdn">Как работает CDN?</h3>
1. Статические файлы (CSS, JavaScript, изображения) загружаются на узлы CDN.
2. Пользователь получает данные с ближайшего узла CDN, а не с основного сервера.

<h3 id="примеры-cdn">Примеры CDN</h3>
- **Cloudflare**: Популярный CDN с дополнительными функциями безопасности.
- **AWS CloudFront**: Интеграция с сервисами Amazon.
- **Akamai**: Один из самых масштабных CDN.

<h3 id="пример-использования-cdn">Пример использования CDN</h3>
1. Загрузка статических файлов:
```html
<link rel="stylesheet" href="https://cdn.example.com/styles.css">
<script src="https://cdn.example.com/app.js"></script>
  1. Настройка в веб-сервере (например, Nginx):
    nginx
    location /static/ {
        proxy_pass https://cdn.example.com/static/;
    }
    

4. Кеширование на стороне клиента

Способы кеширования

1. **LocalStorage**: Хранение данных в браузере без ограничения времени жизни. ```javascript localStorage.setItem('key', 'value'); console.log(localStorage.getItem('key')); // value ```
  1. SessionStorage: Хранение данных на время текущей сессии браузера.

    javascript
    sessionStorage.setItem('key', 'value');
    console.log(sessionStorage.getItem('key')); // value
    
  2. IndexedDB: Хранение структурированных данных для офлайн-приложений.

    javascript
    const request = indexedDB.open('myDatabase', 1);
    request.onsuccess = () => {
        console.log('Database opened successfully');
    };
    

HTTP-заголовки для кеширования

- **Cache-Control**: Указывает, как и сколько времени кешировать данные. ```http Cache-Control: max-age=3600, public ``` - **ETag**: Используется для проверки изменений ресурса. ```http ETag: "5d8c72a5ed8b" ```

Итоговые вопросы для подготовки

  1. Как Redis помогает ускорить работу серверных приложений?
  2. Какие преимущества даёт использование CDN?
  3. В чём разница между LocalStorage и SessionStorage?
  4. Какие HTTP-заголовки используются для кеширования?
  5. Как выбрать подходящий метод кеширования для проекта?

Совет: Настройте кеширование на всех уровнях вашего приложения (серверное, клиентское и CDN), чтобы повысить производительность и снизить задержки доставки данных.