zdppy+vue3+onlyoffice文档管理系统实战 20240826上课笔记 zdppy_cache框架继续优化

98 篇文章 1 订阅
69 篇文章 1 订阅

需求

在这里插入图片描述

一个数据加工的链路,由很多个独立的任务组成,后面的任务依赖前面一个或多个任务的执行结果。

问题:目前是人工编排执行的时间,来确保顺序是有序的,有没有方案能替换人工?

简单的分析

  • 1、接收任务
  • 2、异步分发任务:A、B、C异步执行
  • 3、收集任务结果:RA、RB、RC
  • 4、组合任务结果,继续分发A2、B2、C2
  • 5、继续收集
  • 6、重复前面的步骤,直到事情干完
  • 7、得到一个结果
  • 8、任务完成

最核心的技术

  • 1、异步分发:async调用
  • 2、同步收集:await获取结果

举个例子

加法计算。
在这里插入图片描述

任务参数怎么来的?

我怎么知道我的任务是一个什么样的任务?

任务是一个函数,函数的参数是怎么来的?

目标:求图上任意一个点的结果。

构建依赖链

截取小图举例。
在这里插入图片描述

  • A
  • C = A+4
  • B = A+3
  • F = C+3 + B+6
    • F = A+4+3 + A+3+6

最简单版本

异步求取。

  • A是起始值
  • CalcB 是一个异步函数,返回B的结果
  • CalcC 是一个异步函数,返回C的结果
  • CalcD = await CalcB + await CalcC

稍微复杂的版本

异步接口。

  • A是起始值
  • CalcB 是一个异步接口,返回B的结果
  • CalcC 是一个异步接口,返回C的结果
  • CalcD = await CalcB + await CalcC

R = A + c + d

遗留问题

  • 1、将resize封装为api接口
  • 2、查询所有key,带查询参数:active只查激活的,value包含value默认只获取key
  • 3、查询缓存大小
  • 4、清空缓存
  • 5、判断是否为管理员

查询所有key

设置缓存:

req -X POST -d '{\"key\":1,\"value\":111, \"expire\": 1}' http://127.0.0.1:8888/zdppy_cache
req -X POST -d '{\"key\":2,\"value\":222, \"expire\": 2}' http://127.0.0.1:8888/zdppy_cache
req -X POST -d '{\"key\":3,\"value\":333, \"expire\": 333}' http://127.0.0.1:8888/zdppy_cache

先查询所有的key:

req http://127.0.0.1:8888/zdppy_caches

只查询未过期的key:

req -d '{\"active\":true}' http://127.0.0.1:8888/zdppy_caches

返回value:

req -d '{\"active\":true, \"value\":true}' http://127.0.0.1:8888/zdppy_caches

返回detail:

req -d '{\"active\":true, \"detail\":true}' http://127.0.0.1:8888/zdppy_caches

将resize封装为api接口

前端可以主动删除过期的缓存。此时不应该考虑size_limit。

删除缓存:在缓存的数据比较少的情况下,size可能不会发生变化

req -X DELETE http://127.0.0.1:8888/zdppy_caches
req -X DELETE -d '{\"limit\": 33}' http://127.0.0.1:8888/zdppy_caches

查询缓存大小

使用req测试:

import req

for i in range(2000):
    req.post("http://127.0.0.1:8888/zdppy_cache", json={"key": f"key{i}", "value": i})

resp = req.get("http://127.0.0.1:8888/zdppy_cache/size")
print(resp.json())

使用req命令行工具:

req http://127.0.0.1:8888/zdppy_cache/size

清空缓存

import req

for i in range(2000):
    req.post("http://127.0.0.1:8888/zdppy_cache", json={"key": f"key{i}", "value": i})

resp = req.delete("http://127.0.0.1:8888/zdppy_cache/all")
print(resp.json())

resp = req.get("http://127.0.0.1:8888/zdppy_cache/size")
print(resp.json())

遗留问题

  • 1、判断是否为管理员
  • 2、批量增加
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python私教

创业不易,请打赏支持我一点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值