zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

遗留问题

  • 1、封装API
  • 2、有账号密码
  • 3、查询所有有效的具体数据,也就是缓存的所有字段

封装查询所有有效具体数据的方法

基本封装

def get_all(self, is_active=True, limit=100000):"""遍历数据库中所有的key,默认查询所有没过期的:param is_active: 是否只查没过期的:param limit: 默认10000,但是允许做限制:return: 遍历到的所有的key,没有返回空列表"""_disk_get = self._disk.getcolumns = ["key", "raw", "store_time", "expire_time", "access_time", "access_count", "tag", "size", "mode","filename", "value"]column = ",".join(columns)rows = Noneif is_active:# 查没过期的select = f'SELECT {column} FROM Cache where expire_time > ? LIMIT ?'rows = self._sql(select, (time.time(), limit)).fetchall()else:# 查所有的select = f'SELECT {column} FROM Cache  LIMIT ?'rows = self._sql(select, (limit,)).fetchall()# 处理data = []for row in rows:item = {}for i in range(len(columns)):item[columns[i]] = row[i]data.append(item)# 返回return data

基本用法

import zdppy_cache as c
import time# 设置缓存
key = "code"
value = "A13k"
c.set(key, value, 3)# 获取所有的缓存的key-value
print(c.get_all())time.sleep(3)
print("默认查询未过期的:", c.get_all())
print("查询过期的:", c.get_all(False))# 清空缓存
c.delete_all()

查询总缓存大小

最简单的方案

它是基于磁盘的,我们统计磁盘大小就知道了。

基本封装

def get_size():"""获取占据的内存大小但是只有在调用方法的那一刻会占据内存,平时都是存储在磁盘中的"""with Cache(cache_directory) as cache:return cache.volume()

使用示例

import zdppy_cache as c
import time# 设置缓存
key = "code"
value = "A13k"
c.set(key, value, 3)# 获取占据磁盘大小
print(c.get_size())# 加很多东西
for i in range(100):c.set(f"zhangsan{i}", i)print(c.get_size())# 清空缓存
c.delete_all()

有账号密码

思路?

账号密码是用来校验权限,主要是为了确定自己专属数据库。

对账号密码做sha256加密得到一个字符串作为缓存目录。如果这个目录存在,说明系统中有该用户,否则没有,新建。

python实现sha256加密

import hashlibdata = "你好"   # 要进行加密的数据
data_sha = hashlib.sha256(data.encode('utf-8')).hexdigest()   
print(data_sha)

需要key用户私钥吗?

不需要,简单点。

简单的实现

import hashlib
import shutil
import os
from .core import Cacheclass UserCache:def __init__(self, username, password, cache_dir="./tmp/.zdppy_cache"):# 构建缓存目录self.key = hashlib.sha256(f"{username}&&{password}".encode('utf-8')).hexdigest()self.cache_dir = os.path.join(cache_dir, self.key).replace("\\", "/")if not os.path.isdir(self.cache_dir):os.makedirs(self.cache_dir)self.cache = Cache(self.cache_dir)def set(self, key, value, expire=180):"""设置缓存"""self.cache.set(key, value, expire)def get(self, key):"""获取缓存"""value = self.cache.get(key)return valuedef delete_all(self):"""清空缓存"""self.cache.close()try:shutil.rmtree(self.cache_dir)except OSError:pass

使用示例

import zdppy_cache# 设置缓存
key = "code"
value = "A13k"# 设置缓存
c = zdppy_cache.UserCache("admin", "admin123456")
c.set(key, value, 3)# 获取缓存
print(c.get(key))# 让另一个用户去获取缓存
c = zdppy_cache.UserCache("admin", "admin123457")
print("另一个用户", c.get(key))# 清空缓存
c.delete_all()

封装API

基本目标

  • 1、管理员,传两个配置的key进来
    • 1、设置缓存
    • 2、获取缓存
    • 3、删除缓存
    • 4、清空缓存
    • 5、查询所有key,带查询参数:active只查激活的,value包含value默认只获取key
    • 6、当前缓存大小
    • 7、看所有数据
  • 2、普通用户,功能和管理员完全一样,但是必须要传账号密码

实现基于zdppy_api的接口缓存

基本示例:

import api
import zdppy_cachekey1 = "admin"
key2 = "admin123456"
app = api.Api(routes=[*zdppy_cache.zdppy_api.cache(key1, key2, api)]
)if __name__ == '__main__':app.run()

设置缓存:

req -X POST -d '{\"key\":1,\"value\":111}' http://127.0.0.1:8888/zdppy_cache/set

在这里插入图片描述

获取缓存:

req -d '{\"key\":1}' http://127.0.0.1:8888/zdppy_cache/get

在这里插入图片描述

想法

  • 查询总缓存大小 搞定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408294.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习一(Datawhale X 李宏毅苹果书 AI夏令营)

一,机器学习基础 机器学习(Machine Learning, ML)是让机器具备学习能力的过程,其核心在于使机器能够自动寻找并应用复杂的函数,以解决各种任务如语音识别、图像识别和策略决策(如AlphaGo)。这些…

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h> #include <stdlib.h> #define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度 }SeqList;void InitList(SeqList &L){// 申请一…

得峰(Deffad)A17G本本 - 安装debian12

文章目录 得峰(Deffad)A17G本本 - 安装debian12概述笔记电源插头设置硬件参数修复win10预装的软件列表做debain12的安装U盘从U盘启动引导用U盘装debian12通过U盘安装debian12到本本原有硬盘上成功配置debian12备注备注END 得峰(Deffad)A17G本本 - 安装debian12 概述 和同学讨…

YOLOv9改进策略【卷积层】| 利用MobileNetv4中的UIB、ExtraDW优化RepNCSPELAN4

一、本文介绍 本文记录的是利用ExtraDW优化YOLOv9中的RepNCSPELAN4&#xff0c;详细说明了优化原因&#xff0c;注意事项等。ExtraDW是MobileNetv4模型中提出的新模块&#xff0c;允许以低成本增加网络深度和感受野&#xff0c;具有ConvNext和IB的组合优势。可以在提高模型精度…

uni-app项目搭建和模块介绍

工具:HuilderX noed版本:node-v17.3.1 npm版本:8.3.0 淘宝镜像:https://registry.npmmirror.com/ 未安装nodejs可以进入这里https://blog.csdn.net/a1241436267/article/details/141326585?spm1001.2014.3001.5501 目录 1.项目搭建​编辑 2.项目结构 3.使用浏览器运行…

解决MySQL的PacketTooBigException异常问题

一、背景 在大数据量导入mysql的时候&#xff0c;提示错误Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large 原因是MySQL的max_allowed_packet设置最大允许接收的数据包过小引起的&#xff0c;默认的max_allowed_packet如果不设置&…

Qt 环境搭建

sudo apt-get upadte sudo apt-get install qt4-dev-tools sudo apt-get install qtcreator sudo apt-get install qt4-doc sudo apt-get install qt4-qtconfig sudo apt-get install qt-demos编译指令 qmake -projectqmakemake实现Ubuntu20,04 与Windows之间的复制粘贴 安装o…

API 的多版本管理,如何在 Apifox 中操作?

开放 API 是技术团队向外部提供服务和数据的关键手段。随着业务的发展和技术的更新&#xff0c;API 也需要不断进行版本迭代。这种迭代通常是为了满足市场需求&#xff0c;优化现有功能&#xff0c;增加新特性&#xff0c;或者修复漏洞。 在多个版本共存的情况下&#xff0c;团…

NLP从零开始------12. 关于前十一章补充(英文分词)

相较于基础篇章&#xff0c;这一部分相较于基础篇减少了很多算法推导&#xff0c;多了很多代码实现。 1.英文词规范化 英文词规范化一般分为标准化缩写,大小写相互转化&#xff0c;动词目态转化等。 1.1 大小写折叠 大小写折叠( casefolding) 是将所有的英文大写字母转化成小…

stm32MX+freertos在创建task时,选项的含义

任务名称&#xff08;Task Name&#xff09;&#xff1a; 用于标识任务的名称&#xff0c;便于调试和日志记录。 优先级&#xff08;Priority&#xff09;&#xff1a; 任务的执行优先级。FreeRTOS支持多个优先级&#xff0c;高优先级的任务会优先于低优先级的任务执行。 堆栈…

ubuntu20.04源码编译安装qemu(qemu8.2)

ubuntu20.04源码安装qemu8.2 本文用于记录在ubuntu20中源码编译安装qemu8.2&#xff0c;同时也希望能够对你有所帮助。 一、download qemu 根据自己的需求下载对应版本的qemu源码压缩包。 https://github.com/qemu/qemu/tags二、build qemu 解压缩后&#xff0c;执行下述命令。…

SpringBoot百万行Excel导入MySQL实践

在公司开发时&#xff0c;客户说需要支持大数据量excel导入&#xff0c;所以打算写一篇文章记录下思路和优化过程。 一、前期准备 首先我们选用的肯定是阿里出品的EasyExcel&#xff0c;对比poi和jxl占内存更少 easyexcel官方网站准备测试的数据库和excel文件&#xff0c;已经…

-Wl,-rpath= 编译器链接器指定动态库路径 与 LD_LIBRARY_PATH

实例先行&#xff0c; 1&#xff0c;情景 三互相依赖的小项目&#xff1a; &#xff08;1&#xff09;libbottom.so&#xff0c;无特别依赖&#xff0c;除系统文件 &#xff08;2&#xff09;libtop.so&#xff0c;依赖libbottom.so &#xff08;3&#xff09;app 可执行程…

springboot admin监控

服务端搭建 maven的依赖&#xff0c;包括服务端和客户端&#xff0c;以及注册到nacos上面 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XML…

AI绘制思维导图:使用SpringBoot和Vue实现智能可视化

目录 引言&#xff1a; 思维导图的重要性和应用场景&#xff1a; AI在思维导图绘制中的应用&#xff1a; 概述SpringBoot和Vue框架的特点&#xff1a; 第一部分&#xff1a;思维导图概述 思维导图的定义和历史 思维导图的结构和组成部分 思维导图在不同领域的应用案例 …

Linux 进程 | 进程地址空间

文章目录 进程地址空间程序地址空间进程地址空间 进程地址空间 程序地址空间 地址空间一共有如下的几个区域&#xff0c;从下到上地址逐渐增加&#xff0c;其中栈区的空间是从上往下使用&#xff0c;即从高地址往低地址增长&#xff1b;堆区的空间是从下往上使用&#xff0c;…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 应用DFX能力介绍(含闯关习题)

学完时间&#xff1a;2024年8月24日 学完排名&#xff1a;第1698名 一、Performance Analysis Kit简介 Performance Analysis Kit&#xff08;性能分析服务&#xff09;为开发者提供应用事件、日志、跟踪分析工具&#xff0c;可观测应用运行时状态&#xff0c;用于行为分析、…

Prometheus学习

监控架构介绍&#xff1a; 基本架构&#xff1a; Prometheus 和 Zabbix 的对比&#xff1a; 安装和使用&#xff1a; Prometheus 采集、存储数据Grafana 用于图表展示alertmanager 用于接收 Prometheus 发送的警告信息node-exporter 用于收集操作系统和硬件信息的 metrics …

Linux:Bash中的命令介绍(简单命令、管道以及命令列表)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Bash中&#xff0c;命令执行的方式可以分为简单命令、管道和命令列表组成。这些结构提供了强大的工具&#xff0c;允许用户组合命令并精确控制其执行方式。以下是对这…

Ubuntu24.04安装MYSQL8.0

更新源 sudo apt update安装mysql服务 默认安装最新版本 sudo apt install mysql-server检查安装版本 mysql --version检查mysql运行状态 systemctl status mysql开启远程访问&#xff0c;在ubuntu下mysql默认是只允许本地访问 sudo vim /etc/mysql/mysql.conf.d/mysqld.…