使用 lean-cli 连接云端的 LeanDB

LeanDB 是 LeanCloud 云引擎提供的数据库产品,开发者可以在 控制台 > 云引擎 > LeanDB 页面创建高可用的 Redis、MySQL、MongoDB 或 ElasticSearch 数据库实例,供云引擎程序访问使用。

为了改善开发者在本地开发调试、对线上数据进行手动操作的体验,我们在 lean-cli 的 v0.26.0 版本中对之前只能访问 LeanCache 的 lean cache 命令进行了全新升级:

  • 新增的 lean db shell 可以打开一个连接到云端 LeanDB 的交互式 shell,用于执行查询。
  • 新增的 lean db proxy 可以将云端 LeanDB 导出到本地的一个端口,供本地的程序或图形化的数据库客户端连接。

使用 lean db shell 前需要在本地安装对应数据库的客户端工具,如 mysqlredis-climongo,如果本地有安装体验更好的 mycliiredis 则会优先被使用。

例如我们连接到应用下名为 mysqldb 的实例上进行一些操作:

$ lean db shell mysqldb
Welcome to the MySQL monitor.
Your MySQL connection id is 3450564

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Database changed
mysql> insert into users set name = 'leancloud';
Query OK, 1 row affected (0.04 sec)
mysql> select * from users;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | zhenzhen  |
|    2 | leancloud |
+------+-----------+
2 rows in set (0.06 sec)

之前的 lean cache 受限于底层实现,不支持一些阻塞式的命令。而全新的 lean db shell 则提供了完整的功能,例如现在可以使用 monitor 来实时查看线上命令执行日志(对性能影响较大):

$ lean db shell myredis
127.0.0.1:5678> monitor
OK
1632823101.683689 [0 172.30.123.51:53266] "subscribe" "RLB:RPC:rYAut-production:6FwS9" "RLB:RPC:rYAut-production:6FwS9:result"
1632823101.688893 [0 172.30.90.100:55642] "set" "RDB:rYAut-production:6FwS9" "0" "PX" "30000"
1632823105.066331 [0 172.30.90.100:55642] "keys" "RDB:rYAut-production:*"
1632823105.068613 [0 172.30.90.100:55642] "mget" "RDB:rYAut-production:hj0P7" "RDB:rYAut-production:6FwS9"
1632823106.655157 [0 172.30.90.100:55642] "publish" "RLB:RPC:rYAut-production:hj0P7" "{\"caller\":\"6FwS9\",\"id\":\"qVbUZQgLLn\",\"payload\":[\"makeReservation\",\"test\"]}"
1632823106.730899 [0 172.30.169.123:55072] "publish" "RLB:RPC:rYAut-production:6FwS9:result" "{\"id\":\"qVbUZQgLLn\",\"payload\":\"7ab5cf6f-d849-4efa-804f-b368a5382ffc\"}"
1632823112.222973 [0 172.30.169.123:55072] "set" "RDB:rYAut-production:hj0P7" "1" "PX" "30000"
1632823113.890698 [0 172.30.37.176:37892] "PING"

lean db shell 背后其实是 lean-cli 通过长连接将云端的 LeanDB 代理到了本地,然后调用 redis-cli 去连接本地的一个端口。

我们也通过 lean db proxy 将这种更底层的能力提供给了开发者:

$ lean db proxy myredis
[INFO] Now, you can connect myredis via [redis-cli -h 127.0.0.1 -a hsdt9wIAuKcTZmpg -p 5678]

不要关闭这个终端,使用输出的地址、端口和密码在新的终端中运行 redis-cli 的 --memkeys 来统计内存占用(对性能有一定影响):

$ redis-cli -h 127.0.0.1 -a hsdt9wIAuKcTZmpg -p 5678 --memkeys
[00.00%] Biggest hash   found so far '"user:1000"' with 111 bytes
[00.00%] Biggest string found so far '"name"' with 54 bytes
[00.00%] Biggest list   found so far '"mylist"' with 158 bytes
[00.00%] Biggest string found so far '"bigkey"' with 208 bytes

-------- summary -------

Sampled 4 keys in the keyspace!
Total key length in bytes is 25 (avg len 6.25)

Biggest   list found '"mylist"' has 158 bytes
Biggest   hash found '"user:1000"' has 111 bytes
Biggest string found '"bigkey"' has 208 bytes

1 lists with 158 bytes (25.00% of keys, avg size 158.00)
1 hashs with 111 bytes (25.00% of keys, avg size 111.00)
2 strings with 262 bytes (50.00% of keys, avg size 131.00)

在本地使用 lean up 进行开发测试时,也可以使用这个功能连接到云端的 LeanDB,设置环境变量(来自前面 lean db proxy 的输出):

export REDIS_URL_myredis=redis://default:hsdt9wIAuKcTZmpg@127.0.0.1:5678

然后就可以像平时一样使用 lean up 启动调试了,同时使用线上的 LeanCache。

你还可以把 lean db proxy 输出的连接信息填到本地的 GUI 客户端中来浏览操作云端的 LeanDB:

leandb mysql gui leandb mongo gui

上面两张图分别是 Sequel Pro 链接 MySQL 和 Robo 3T 连接 MongoDB。

注意:lean db 命令访问云端 LeanDB 实例仅用于本地开发和测试,连接会偶尔断开(部分客户端可以自动重连),请不要用于生产环境。

评论

Loading comments ...