Redis клиент для Swift (iOS/macOS) – RediStack

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

RediStack: Асинхронный Redis клиент для Swift (iOS/macOS)

RediStack — это современный, полностью асинхронный клиент для Redis, написанный на Swift. Он построен на базе высокопроизводительного фреймворка SwiftNIO, что позволяет эффективно работать с сетевыми запросами без блокировки основного потока. Библиотека идеально подходит для iOS и macOS приложений, где требуется кэширование, управление очередями или Pub/Sub.

RediStack поддерживает все основные возможности Redis: строки, хеши, списки, множества, транзакции, конвейеры (pipeline) и публикацию/подписку (Pub/Sub). Библиотека активно развивается и поддерживается сообществом Swift.

Установка

Добавьте RediStack в ваш проект через Swift Package Manager:

// Package.swift
dependencies: [
    .package(url: "https://github.com/swift-server/RediStack.git", from: "1.0.0")
],
targets: [
    .target(name: "MyApp", dependencies: ["RediStack"])
]

Для CocoaPods используйте:

pod 'RediStack', '~> 1.0'

Базовое подключение

Создайте подключение к Redis серверу с помощью RedisConnection:

import RediStack
import NIOCore
import NIOPosix

let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let eventLoop = eventLoopGroup.next()

let connection = try await RedisConnection.connect(
    to: try .init(hostname: "localhost", port: 6379),
    on: eventLoop
)

Работа с данными

Примеры основных операций:

// Установка значения
try await connection.set("user:1:name", to: "Алексей")
try await connection.set("user:1:age", to: 30)

// Получение значения
let name: String? = try await connection.get("user:1:name")
print(name ?? "не найдено") // Выведет: Алексей

// Работа с хешами
try await connection.hset("user:1", field: "email", to: "alex@example.com")
let email: String? = try await connection.hget("user:1", field: "email")

// Инкремент
let newCount = try await connection.increment("page:views")
print("Просмотров: \(newCount)")

Транзакции и конвейеры

RediStack поддерживает конвейеры для отправки нескольких команд за один раз:

let pipeline = connection.pipeline()
pipeline.set("key1", to: "value1")
pipeline.set("key2", to: "value2")
pipeline.get("key1")
let results = try await pipeline.execute()
// results — массив ответов в порядке команд

Для транзакций используйте MULTI/EXEC:

try await connection.sendCommandsImmediately(false)
try await connection.set("balance", to: 100)
try await connection.decrement("balance")
try await connection.sendCommandsImmediately(true)

Pub/Sub (Публикация и подписка)

RediStack поддерживает асинхронные подписки на каналы:

// Подписка на канал
let subscriber = connection.subscribe(to: "updates") { event in
    switch event {
    case .message(let channel, let message):
        print("Получено из \(channel): \(message)")
    default:
        break
    }
}

// Публикация сообщения
try await connection.publish("Привет всем!", to: "updates")

Обработка ошибок и переподключение

Для production-приложений важно обрабатывать обрывы соединения. RediStack предоставляет механизмы повторного подключения через RedisConnectionPool:

let pool = RedisConnectionPool(
    configuration: .init(
        initialServerConnectionAddresses: [.init(hostname: "localhost", port: 6379)],
        maximumConnectionCount: .maximum(5)
    ),
    eventLoopGroup: eventLoopGroup
)

// Используйте pool как обычное подключение
try await pool.set("session:token", to: "abc123")

Производительность

Благодаря SwiftNIO, RediStack обеспечивает неблокирующую работу всех операций. Это особенно важно для iOS/macOS приложений, где UI не должен зависать при сетевых запросах. Библиотека поддерживает:

  • Асинхронные вызовы через async/await (Swift 5.5+)
  • Потокобезопасные пулы соединений
  • Автоматическое восстановление после ошибок
  • Поддержку TLS/SSL для безопасного подключения

Заключение

RediStack — это зрелая и надежная библиотека для работы с Redis из Swift. Она отлично подходит для:

  • Кэширования данных в iOS/macOS приложениях
  • Реализации

Рекомендаций