搜索插件、代码仓与 APP 分类

插件详情v1.2.0

resp_client

Dart 的 RESP(Redis 序列化协议)客户端。它提供低级和高级 API 来执行 Redis 命令。

AndroidiOSLinuxmacOSWindows
近 30 天下载
11.5万
喜欢数
7
Pub 分数
140

安装插件

flutter pub add resp_client

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Dart 包,实现了 Redis 序列化协议(RESP),用于与 Redis 数据库交互。它提供低级别和高级别 API 来发送 Redis 命令,实现与 Redis 服务器的高效通信。专为需要直接控制 RESP 消息或希望使用简化接口进行常见操作的开发者设计,支持所有主流平台,包括 Android、iOS、Linux、macOS 和 Windows。该包轻量且适用于需要快速、可靠 Redis 集成的应用程序。

适合场景

  • 从 Flutter 应用连接到 Redis
  • 以编程方式执行 Redis 命令
  • 构建实时数据服务
  • 在后端系统中集成 Redis
  • 处理 Redis 发布/订阅消息

主要特点

  • 低级别 RESP 消息处理
  • 高级命令 API
  • 跨平台支持
  • 轻量且高效
  • 支持 Redis 连接池

适合对象

  • 使用 Redis 的 Dart 开发人员
  • 需要 Redis 集成的 Flutter 应用
  • 使用 Redis 的后端服务
  • 实时应用开发者
  • 需要高性能数据存储的系统

使用建议

  • 需要手动处理 RESP 响应中的错误
  • 与高级库相比,文档有限
  • 最适合熟悉 RESP 协议的开发者
  • 在没有额外抽象的情况下,不适合复杂的 Redis 使用场景
  • 可能需要自定义包装器以实现高级 Redis 功能

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

resp_client

A RESP (REdis Serialization Protocol) client for Dart. This package contains 3 libraries. resp_server implements the connectionn to the server, resp_client implements the Redis serialization protocol. resp_commands provides implementations of Redis commands in differents levels of convenience from low-level to easy-to-use.

3 Building blocks

There 3 fundamental building block:

  • RespServerConnection - A connection to a RESP server
  • RespClient - A RESP client connected to a RESP server implementing the request/response model and the RESP types
  • RespCommandsTierN - Implementation of Redis commands

Usage

Initialization and cleanup


import 'package:resp_client/resp_client.dart';
import 'package:resp_client/resp_commands.dart';
import 'package:resp_client/resp_server.dart';

void main(List<String> args) async {
  // create a server connection using sockets
  final server = await connectSocket('localhost');

  // create a client using the server connection
  final client = RespClient(server);

  // create commands of tier 2 using the client
  final commands = RespCommandsTier2(client);

  // execute some commands...

  // close connection to the server
  await server.close();
}

RESP Types

The RESP types are implemented by the classes:

  • RespSimpleString - payload type String
  • RespBulkString - payload type String?
  • RespInteger - payload type int
  • RespArray - payload type List<RespType>?
  • RespError - payload type String

All classes extends the class RestType. You can access the payload of a type using the getter payload.

The class RespType provides methods to convert to a concrete type and getters to check if it is a concrete type.

Use commands

Not all Redis commands are implemented in all tiers yet. Nevertheless, it is possible to execute very Redis command using tier 0. You can create a command object of every tier using a RespClient. It is allowed to create multiple command objects on the same client. Command objects of tier 1 and 2 provides a getter to the underlying tier.

Tier 0

This is the most basic and flexible tier. You can execute every Redis command using this tier. You have to provide a list of elements. All elements are converted to bulk strings using toString(). The result is a RespType. It is up to the user to convert the result to a concrete RESP type.


import 'package:resp_client/resp_server.dart';
import 'package:resp_client/resp_client.dart';
import 'package:resp_client/resp_commands.dart';

void main(List<String> args) async {

  // ... setup connection and client
  
  // create commands using the client
  final commands = RespCommandsTier0(client);

  // execute a command
  final result = await commands.execute(['SET', 'myKey', 'myValue', 'NX']);
  print(result.payload);

  // ... close connection
}

Tier 1

Commands of tier 1 provide some convenience on the parameter side. The user no longer has to build the commands from ground up. Instead, the commands are calle in a more Dart-like style. The result is always a RespType like in tier 0.


import 'package:resp_client/resp_server.dart';
import 'package:resp_client/resp_client.dart';
import 'package:resp_client/resp_commands.dart';

void main(List<String> args) async {

  // ... setup connection and client
  
  // create commands using the client
  final commands = RespCommandsTier1(client);

  // Execute the GET command. You don't have to build the command from ground up.
  // The result is a RespType. This is flexible but you have to convert to the
  // concrete type yourself.
  final result = await commands.get('mKey', 'myValue', mode: SetMode.onlyIfNotExists);
  print(result.toBulkString().payload);

  // ... close connection
}

Tier 2

Commands of tier 2 provide the same convenience on the parameter side as tier 1 commands. Additionally, the result of a command is converted for easy handling.

To convert the result, assumptions are made. As an example the GET command returns a bulk string. Thus, the implementation tries to convert the result from a RespType to a RespBulkString and then return the payload of type String?. But, if a GET command is executed as part of a transaction, the result is a RespSimpleString and the payload has different meaning. Thus, the command will fail. To get out of this, use the same command of the underlying tier.


void main(List<String> args) async {

  // ... setup connection and client
  
  // create commands using the client
  final commands = RespCommandsTier2(client);

  // Like tier 1 commands but the result is already convert.
  // In this case, result is of type String?.
  final result = await commands.get('mKey', 'myValue', mode: SetMode.onlyIfNotExists);
  print(result)

  // ... close connection
}

所属分类

源码仓库

使用此插件的项目

暂无相关数据。

所在榜单