Flutter Redis数据库交互插件upstash_redis的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter Redis数据库交互插件upstash_redis的使用

Upstash Redis

@upstash/redis 是一个基于HTTP/REST的Redis客户端,专为Dart设计,建立在 Upstash REST API 之上。

这个Dart包的设计灵感来源于官方的upstash-redis TypeScript库。更多文档可以在这里找到:GitHub仓库

它是一个无连接(基于HTTP)的Redis客户端,适用于以下场景:

  • 无服务器函数(AWS Lambda 等)
  • Cloudflare Workers
  • Fastly Compute@Edge
  • 客户端侧Web/移动应用程序
  • WebAssembly
  • 其他更倾向于HTTP而非TCP的环境

查看 支持的API列表

快速开始

安装

dart pub add upstash_redis

创建数据库

请在 upstash控制台 上创建一个新的Redis数据库。

基本用法

下面提供了一个完整的示例demo,展示了如何使用upstash_redis进行基本的数据操作,包括字符串、有序集合、列表、哈希表和JSON对象等。

import 'package:upstash_redis/upstash_redis.dart';

Future<void> main() async {
  // 使用从环境变量中读取的URL和Token初始化Redis客户端
  final redis = Redis.fromEnv();

  try {
    // 字符串操作
    print(await redis.set('name', 'rebaz', ex: 60));
    print(await redis.get<String>('name'));

    // 复杂对象操作
    print(await redis.set(
      'obj',
      {
        'v': {
          'a': [1, 2],
          'b': [3, 4]
        }
      },
      ex: 60,
    ));
    print(await redis.get<Map<String, Map<String, List<int>>>>('obj'));

    // 设置名称时防止覆盖已有键值对
    print(await redis.set('name', 'raouf', ex: 60, nx: true));

    // 有序集合操作
    print(await redis.zadd('z', score: 1, member: 'rebaz'));
    print(await redis.zadd(
      'z2',
      scores: [
        ScoreMember(score: 2, member: 'Mike'),
        ScoreMember(score: 3, member: 'Ali'),
        ScoreMember(score: 4, member: 'Jack'),
      ],
    ));
    print(await redis.zrem('z2', ['Jack', 'Ali']));

    // JSON操作
    print(await redis.json.set('json', '$', {'counter': 1, 'hello': '', 'name': 're'}));
    print(await redis.json.numincrby('json', r'$.counter', 1));
    print(await redis.json.set('json', r'$.hello', '"world"'));
    print(await redis.json.strappend('json', r'$.name', '"baz"'));
    print(await redis.json.strlen('json', r'$.name'));
    print(await redis.json.get('json', [r'$.name']));
  } finally {
    // 关闭Redis客户端
    redis.close();
  }
}

此代码段涵盖了多种常见的Redis数据类型操作,并展示了如何与Upstash Redis服务进行交互。确保替换示例中的URL和Token为实际创建的Upstash Redis实例信息。

贡献

如果您希望为upstash_redis做出贡献,请按照以下步骤操作:

  1. GitHub 上Fork仓库。
  2. 将项目克隆到您的机器上。
  3. 在您自己的分支上提交更改。
  4. 将您的工作推送到您的Fork。
  5. 提交Pull请求以便我们可以审查并合并您的更改。

许可证

本仓库采用MIT许可证。

致谢


更多关于Flutter Redis数据库交互插件upstash_redis的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Redis数据库交互插件upstash_redis的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个使用Flutter和upstash_redis插件与Redis数据库进行交互的代码示例。upstash_redis是一个Flutter插件,用于与Upstash托管的Redis数据库进行交互。

首先,确保你的Flutter项目已经添加了upstash_redis依赖。你可以在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  upstash_redis: ^latest_version  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,是一个简单的Flutter应用示例,展示如何使用upstash_redis插件连接到Redis数据库并执行一些基本的操作,比如设置和获取键值对。

import 'package:flutter/material.dart';
import 'package:upstash_redis/upstash_redis.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Redis Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RedisExampleScreen(),
    );
  }
}

class RedisExampleScreen extends StatefulWidget {
  @override
  _RedisExampleScreenState createState() => _RedisExampleScreenState();
}

class _RedisExampleScreenState extends State<RedisExampleScreen> {
  final _formKey = GlobalKey<FormState>();
  String? redisValue;

  // Upstash Redis client configuration
  final String redisUrl = 'redis://YOUR_REDIS_URL:YOUR_REDIS_PORT'; // 替换为你的Redis URL和端口
  final String redisPassword = 'YOUR_REDIS_PASSWORD'; // 替换为你的Redis密码

  late RedisClient redisClient;

  @override
  void initState() {
    super.initState();
    // 初始化Redis客户端
    redisClient = RedisClient(url: redisUrl, password: redisPassword);
  }

  @override
  void dispose() {
    // 关闭Redis连接
    redisClient.close();
    super.dispose();
  }

  Future<void> _handleSubmit() async {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();

      // 从表单中获取用户输入
      final String? key = 'example_key'; // 这里假设key是固定的,实际可以从表单获取
      final String? value = 'example_value'; // 这里假设value是从表单获取的

      try {
        // 设置键值对
        await redisClient.set(key!, value!);

        // 获取键值对
        final String? fetchedValue = await redisClient.get(key!);

        // 更新UI
        setState(() {
          redisValue = fetchedValue;
        });
      } catch (e) {
        print('Error interacting with Redis: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Redis Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Form(
              key: _formKey,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  // 这里可以添加更多的表单字段,例如TextFormField用于输入key和value
                  // 这里为了简单起见,我们假设key和value是固定的
                  SizedBox(height: 20),
                ],
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _handleSubmit,
              child: Text('Set and Get from Redis'),
            ),
            SizedBox(height: 20),
            if (redisValue != null)
              Text(
                'Fetched Value from Redis: $redisValue',
                style: TextStyle(fontSize: 18),
              ),
          ],
        ),
      ),
    );
  }
}

注意事项:

  1. Redis URL和密码:确保你替换了redisUrlredisPassword为你实际的Redis服务URL和密码。
  2. 表单处理:为了简单起见,示例中并没有真正的表单输入。在实际应用中,你可能需要添加TextFormField来让用户输入键值对。
  3. 错误处理:示例中的错误处理非常简单,仅打印错误信息。在生产环境中,你可能需要更详细的错误处理逻辑。

这段代码展示了如何使用upstash_redis插件连接到Redis数据库,并执行基本的SETGET操作。你可以根据需要扩展此示例,添加更多的Redis操作和功能。

回到顶部