zoukankan      html  css  js  c++  java
  • 测试平台系列(81) 编写在线执行Redis功能

    大家好~我是米洛

    我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持。

    欢迎关注我的公众号测试开发坑货,获取最新文章教程!

    回顾

    上一节我们牛刀小试,编写了redisManager,并且成功执行了redis命令。

    那这一节,就让我们来折腾下在线执行Redis命令。

    由于某些特定的原因,在使用aredis的时候有了一些不好的体验,主要是以下几个方面, 所以我打算弃坑了。

    • get和set操作没有支持中文,非常难受
    • 对于报错信息不是那么友好,因为我这边出现了一个连接出错的问题,发现对方的error是ConnectionError,里面毫无内容
    • 之前也说了,迁移成本巨低,所以我们可以完美切回用户最多的同步库(如果踩坑也有人一起想办法)

    安装redis和redis-py-cluster

    pip3 install redis redis-py-cluster
    

    改写Manager类

    其实要改变的并不多,看下git的改动就知道了:

    • 修改引入路径

    • 修复之前的bug

    之前的获取单实例从集群中拿数据了,大错特错了

    • 改写cluster

    换个名字而已,从StrictCluster改为Cluster

    完善在线执行命令的方法

    做一个判断,如果是cluster则获取集群客户端,否则获取实例客户端

    这样我们的后端接口就编写完毕了,因为我们想做的是类似redis-cli的功能。

    • 寻找前端组件

      我们需要一个web版本的终端,所以我在github寻找了很久,找到了这样一款质量还不错的:

    到时候我们的页面上,就让用户输入这个了

    • 最终效果

    最终显示效果

    还是比较丑,左侧是现有的redis连接配置,右侧是类似redis-cli的客户端页面。

    在右侧执行语句以后,就会调用我们刚才编写的redis在线执行接口

    凑合能用就行。给大家看看使用gif:

    目前只支持基础的操作,包括常见的:

    get set hget hset hgetall等等

    自动更新Redis

    每当配置有变更的时候,我们都需要变更RedisManager中的数据,所以我们之前为之编写了Refresh方法。

    我们修改update/delete方法:

    删除client也编写了一个方法

    这里的background_tasks是来自fastapi的后台任务,如果大家了解go的话,这里就等于:

    func test() {
        // 业务逻辑
        result := xxx
        go RedisManager.delete()
        return result
    }
    

    其实就是一个后台任务,咱们的主体方法可以直接return了。

    删除客户端的方法,如果是集群则pop集群字典

    今天的内容就到这了,下期我们解决APScheduler重复执行的问题。

  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/we8fans/p/15599212.html
Copyright © 2011-2022 走看看