• 测试平台系列(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重复执行的问题。

  • 相关阅读:
    怎么安装Python?
    Ramnit蠕虫病毒分析和查杀
    Exphub[漏洞利用脚本库]
    SMBv3远程代码执行漏洞复现(CVE-2020-0796)
    Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
    Fastjson远程代码执行漏洞复现
    信息收集之——旁站、C段
    Redis未授权访问漏洞复现与利用
    CSS
    MVC控制器路由
  • 原文地址:https://www.cnblogs.com/we8fans/p/15599212.html
Copyright © 2020-2023  润新知