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

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

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

Redis客户端用于Dart

Dart 的 Redis 协议解析器和客户端。

亲爱的用户,

如果您发现我们的SDK对我们很有帮助且易于使用,我们非常感激如果您能花一点时间给我们点个“赞”!

您的支持激励我们继续改进并添加更多功能。

我们很高兴地宣布,我们的SDK已成功集成到 RedisLink 项目中!

示例

连接

import 'package:redis_dart_link/client.dart';
import 'package:redis_dart_link/logger.dart';
import 'package:redis_dart_link/model/info.dart';
import 'package:redis_dart_link/socket_options.dart';

RedisClient client = RedisClient(
    socket: RedisSocketOptions(
      host: '127.0.0.1',
      port: 9527,
      password: '123456',
    ),
);

// 连接到Redis服务器。
await client.connect();

try {
    await client.ping();
    print("ping");
} catch (error, stackTrace) {
    print("error: $error");
    print("stackTrace: $stackTrace");
}

Geo(地理空间)

import 'package:redis_dart_link/client.dart';
import 'package:test/test.dart';

import 'redis_client_init.dart';

void main() {
  group('Redis Commands GEO Tests', () {
    late RedisClient client;

    setUpAll(() async {
      client = await initRedisClient();
    });

    tearDownAll(() async {
      await closeRedisClient(client);
    });

    test('geoAdd命令测试', () async {
      try {
        await client.geoAdd(
          'test-geoAdd-Sicily',
          13.361389,
          38.115556,
          'Palermo',
        );

        await client.geoAdd(
          'test-geoAdd-Sicily',
          15.087269,
          37.502669,
          'Catania',
        );

        var Val = await client.geoDist(
          'test-geoAdd-Sicily',
          'Palermo',
          'Catania',
        );
        print("geoDist Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
      // });
    }, skip: 'jsonGet Skipping this test temporarily');

    test('geoHash命令测试', () async {
      try {
        var Val =
            await client.geoHash('test-geoAdd-Sicily', ['Catania', 'Palermo']);
        print("geoHash Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonGet Skipping this test temporarily');

    test('geoPos命令测试', () async {
      try {
        var Val = await client.geoPos(
            'test-geoAdd-Sicily', ['Catania', 'Palermo', 'NonExisting']);
        print("GeoPos Val.toString() : ${Val.toString()}");
      } catch (e) {
        print("An error occurred: $e");
      }
      // });
    }, skip: 'jsonGet Skipping this test temporarily');
  });
}

Hash(哈希)

import 'package:redis_dart_link/client.dart';
import 'package:redis_dart_link/model.dart';
import 'package:test/test.dart';

import 'redis_client_init.dart';

void main() {
  group('Redis Commands Tests', () {
    late RedisClient client;

    setUpAll(() async {
      client = await initRedisClient();
    });

    tearDownAll(() async {
      await closeRedisClient(client);
    });

    test('hscan命令测试', () async {
      try {
        final Map<Object, double> values = {'member1': 1.0};

        await client.hmset(
          'hscan-test',
          values,
        );

        Hscan value1 = await client.hscan('hscan-test', 0);

        print("hscan Val.toString() : ${value1.toString()}");
      } catch (e) {
        print("An error occurred: $e");
      }
      // }, skip: 'hscan Skipping this test temporarily');
    });
  });
}

JSON(JSON操作)

import 'package:redis_dart_link/client.dart';
import 'package:test/test.dart';

import 'redis_client_init.dart';

void main() {
  group('Redis Commands Tests', () {
    late RedisClient client;

    setUpAll(() async {
      client = await initRedisClient();
    });

    tearDownAll(() async {
      await closeRedisClient(client);
    });

    test('jsonSet命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonSet-json1',
          value: '["val1","val2","val3"]',
        );

        var Val = await client.jsonGet(
          'jsonSet-json1',
        );
        print("jsonSet Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonSet Skipping this test temporarily');
    // });

    test('jsonDel命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonDel-json1',
          value: '["val1","val2","val3"]',
        );

        var Val = await client.jsonDel('jsonDel-json1');
        print("jsonDel Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonDel Skipping this test temporarily');
    // });

    test('jsonArrIndex命令测试', () async {
      try {
        var Val = await client.jsonArrIndex(
          'json1',
          '"val4"',
          path: '\$',
        );
        print("jsonArrIndex Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonArrIndex Skipping this test temporarily');
    // });

    test('jsonArrAppend命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonArrAppend-json1',
          value: '["val1","val2","val3"]',
        );

        var Val = await client.jsonArrAppend(
          'jsonArrAppend-json1',
          '"val5"',
          path: '\$',
        );
        print("jsonArrAppend Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonArrAppend Skipping this test temporarily');
    // });

    test('jsonArrTrim命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonArrTrim-json1',
          value: '["val1","val2","val3"]',
        );

        var Val =
            await client.jsonArrTrim('jsonArrTrim-json1', start: 1, stop: 2);
        print("jsonArrTrim Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonArrTrim Skipping this test temporarily');
    // });

    test('jsonArrPop命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonArrPop-json1',
          value: '["val1","val2","val3"]',
        );

        var Val = await client.jsonArrPop('jsonArrPop-json1');
        print("jsonArrPop Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonArrPop Skipping this test temporarily');
    // });

    test('jsonClear命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonClear-json1',
          value: '["val1","val2","val3"]',
        );

        var Val = await client.jsonClear('jsonClear-json1');
        print("jsonClear Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonClear Skipping this test temporarily');
    // });

    test('jsonLen命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonClear-json1',
          value: '["val1","val2","val3"]',
        );

        var Val = await client.jsonArrLen('jsonClear-json1');
        print("jsonArrLen Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonLen Skipping this test temporarily');
    // });

    test('jsonMerge命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonMerge-json1',
          value: '{"a":2}',
        );

        await client.jsonMerge('jsonMerge-json1', path: '\$.b', value: '8');

        var Val = await client.jsonGet('jsonMerge-json1');
        print("jsonMerge Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonMerge Skipping this test temporarily');
    // });

    test('jsonMget命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonMget-json1',
          value: '{"a":1, "b": 2, "nested": {"a": 3}, "c": null}',
        );

        await client.jsonSet(
          key: 'jsonMget-json2',
          value: '{"a":4, "b": 5, "nested": {"a": 6}, "c": null}',
        );

        var Val = await client
            .jsonMget(['jsonMget-json1', 'jsonMget-json2'], path: '\$..a');

        print("jsonMget Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonMget Skipping this test temporarily');
    // });

    test('jsonForget命令测试', () async {
      try {
        await client.jsonSet(
          key: 'jsonForget-json1',
          value: '{"a":1, "b": 2, "nested": {"a": 3}, "c": null}',
        );

        var Val = await client.jsonForget('jsonForget-json1');
        print("jsonForget Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonForget Skipping this test temporarily');
    // });

    test('jsonMGET命令测试', () async {
      try {
        await client.jsonSet(
          key: 'test-json-jsonMget1',
          value: '{"a":1, "b": 2, "nested": {"a": 3}, "c": null}',
        );

        await client.jsonSet(
            key: 'test-json-jsonMget2',
            value: '{"a":4, "b": 5, "nested": {"a": 6}, "c": null}');

        var Val = await client.jsonMget(
          ['test-json-jsonMget1', 'test-json-jsonMget2'],
        );
        print("jsonMget Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonMget Skipping this test temporarily');
    // });

    test('jsonMset命令测试', () async {
      try {
        await client.jsonMset(
          'test-json-jsonMset1',
          value: '{"a":1}',
        );

        await client.jsonMset(
          'test-json-jsonMset1',
          value: '{"a":2}',
        );

        var Val = await client.jsonGet(
          'test-json-jsonMset1',
        );
        print("jsonMset Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonMget Skipping this test temporarily');
    // });

    test('jsonNumincrby命令测试', () async {
      try {
        await client.jsonMset(
          'test-json-jsonNumincrby1',
          value: '{"a":"b","b":[{"a":2}, {"a":5}, {"a":"c"}]}',
        );

        var Val1 = await client.jsonNumincrby(
          'test-json-jsonNumincrby1',
          path: r'$.a',
          value: 2,
        );
        print("jsonNumincrby1 Val.toString() : ${Val1}");

        var Val2 = await client.jsonNumincrby(
          'test-json-jsonNumincrby1',
          path: r'$..a',
          value: 2,
        );
        print("jsonNumincrby2 Val.toString() : ${Val2}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonNumincrby Skipping this test temporarily');
    // });

    test('jsonNummultby命令测试', () async {
      try {
        await client.jsonSet(
          key: 'test-json-jsonNummultby1',
          value: '{"a":"b","b":[{"a":2}, {"a":5}, {"a":"c"}]}',
        );

        var Val1 = await client.jsonNummultby(
          'test-json-jsonNummultby1',
          path: r'$.a',
          value: 2,
        );
        print("jsonNumincrby1 Val.toString() : ${Val1}");

        var Val2 = await client.jsonNummultby(
          'test-json-jsonNummultby1',
          path: r'$..a',
          value: 2,
        );
        print("jsonNummultby2 Val.toString() : ${Val2}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonNummultby Skipping this test temporarily');
    // });

    test('jsonObjkeys命令测试', () async {
      try {
        await client.jsonSet(
          key: 'test-json-jsonObjkeys1',
          value: '{"a":[1], "nested": {"a": {"b":2, "c": 3}}}',
        );

        await client.jsonObjkeys(
          'test-json-jsonObjkeys1',
          path: r'$..nested',
        );
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonObjkeys Skipping this test temporarily');
    // });

    test('jsonStrappend命令测试', () async {
      try {
        await client.jsonSet(
          key: 'test-json-jsonStrappend1',
          value: '{"a":"foo", "nested": {"a": "hello"}, "nested2": {"a": 31}}',
        );

        var Val = await client.jsonGet('test-json-jsonStrappend1');
        print("jsonStrappend1.toString() : ${Val}");

        await client.jsonStrappend(
          'test-json-jsonStrappend1',
          path: r'$..a',
          value: r'"baz"',
        );
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonStrappend Skipping this test temporarily');
    // });

    test('jsonStrlen命令测试', () async {
      try {
        await client.jsonSet(
          key: 'test-json-jsonStrlen1',
          value: '{"a":"foo", "nested": {"a": "hello"}, "nested2": {"a": 31}}',
        );

        var Val1 = await client.jsonStrlen(
          'test-json-jsonStrlen1',
          path: r'$..a',
        );
        print("jsonStrlen.toString() : ${Val1}");
      } catch (e) {
        print("An error occurred: $e");
      }
    }, skip: 'jsonStrlen Skipping this test temporarily');
    // });
  });
}

HyperLogLog(超日志记录)

import 'package:redis_dart_link/client.dart';
import 'package:test/test.dart';

import 'redis_client_init.dart';

void main() {
  group('Redis Commands HyperLogLog Tests', () {
    late RedisClient client;

    setUpAll(() async {
      client = await initRedisClient();
    });

    tearDownAll(() async {
      await closeRedisClient(client);
    });

    test('PFADD命令测试', () async {
      try {
        await client.pfadd(
          'test-pfadd',
          ['a', 'b', 'c'],
        );

        var Val = await client.pfcount(
          ['test-pfadd'],
        );
        print("pfcount Val.toString() : ${Val}");
      } catch (e) {
        print("An error occurred: $e");
      }
    });
    // }, skip: 'PFADD Skipping this test temporarily');

    test('PFMERGE命令测试', () async {
      try {
        await client.pfadd(
          'test-PFMERGE-1',
          ['foo', 'bar', 'zap', 'a'],
        );
        await client.pfadd(
          'test-PFMERGE-2',
          ['a', 'b', 'c', 'foo'],
        );

        await client.pfmerge(
          'test-PFMERGE-1',
          ['test-PFMERGE-2'],
        );

        var Val1 = await client.pfcount(
          ['test-PFMERGE-1'],
        );
        print("pfcount Val.toString() : ${Val1}");
      } catch (e) {
        print("An error occurred: $e");
      }
    });
    // }, skip: 'PFADD Skipping this test temporarily');
  });
}

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

1 回复

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


当然,下面是一个关于如何在Flutter中使用redis_dart_link插件与Redis数据库进行交互的示例代码。这个示例将展示如何连接到Redis服务器,设置键值对,获取值以及删除键。

首先,确保你已经在你的pubspec.yaml文件中添加了redis_dart_link依赖:

dependencies:
  flutter:
    sdk: flutter
  redis_dart_link: ^x.y.z  # 请替换为最新版本号

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

接下来是完整的Flutter应用代码示例:

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

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

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

class RedisDemoPage extends StatefulWidget {
  @override
  _RedisDemoPageState createState() => _RedisDemoPageState();
}

class _RedisDemoPageState extends State<RedisDemoPage> {
  String result = '';

  @override
  void initState() {
    super.initState();
    _connectToRedis();
  }

  Future<void> _connectToRedis() async {
    try {
      // 替换为你的Redis服务器地址和端口
      var redisClient = await RedisClient.connect('localhost', 6379);

      // 设置键值对
      await redisClient.set('myKey', 'myValue');

      // 获取值
      var value = await redisClient.get('myKey');
      setState(() {
        result = 'Got value: $value';
      });

      // 删除键
      await redisClient.del('myKey');

      // 关闭连接
      await redisClient.quit();
    } catch (e) {
      setState(() {
        result = 'Error: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Redis Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              result,
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖添加:在pubspec.yaml中添加redis_dart_link依赖。

  2. UI部分

    • 使用MaterialAppScaffold来构建基本的Flutter应用结构。
    • 创建一个显示结果的Text组件。
  3. Redis交互

    • _connectToRedis方法中,首先连接到Redis服务器(替换为你的Redis服务器地址和端口)。
    • 使用set方法设置一个键值对。
    • 使用get方法获取键的值,并更新UI。
    • 使用del方法删除键。
    • 最后,关闭Redis连接。
  4. 错误处理:捕获并显示任何可能的异常。

注意事项

  • 确保你的Redis服务器正在运行,并且Flutter应用可以访问它。
  • 替换代码中的Redis服务器地址和端口为你自己的配置。
  • redis_dart_link插件可能需要配置额外的依赖项或权限,请查阅其官方文档以获取更多信息。

希望这个示例能帮到你!如果有其他问题,请随时提问。

回到顶部