Redis 基本数据结构使用
Redis 基本数据结构使用 切换数据库 select 1 字符串(string) GET 获取存储在给定key中的值 SET 设置存储在给定key中的值 DEL 删除存储在给定key中的值 incr key 递增数字 场景: 视频/文章访问量统计 incr post:video:page.view 实现关系db中的唯一id自增 incr key increment 增加指定的整数 decr key 递减数字 decr key increment 减少指定的整数 append key value 向尾部追加值 strlen key 获取string 的长度 mget key [key ...] 批量获取key的值 mset key value [key value ...] 批量设置key - value 列表(linked-list) rpush 将给定的值推入list 的右端 lpush 将 ...
资本资产定价模型(CAPM)
介绍:CAPM 是在 arkowitz(马科维茨)基础上演进得来 期望收益率 期望收益率 = 无风险收益率+β*(市场期望收益率 - 无风险收益率) 证券市场线&&资本市场线 资本市场线: 给出了所有有效投资组合风险与预期收益率之间的关系证券市场线: 给出每一个风险资产与预期收益率之间的关系.换而言之他就是CAPM的核心 有效组合的期望收益率 无风险利率rf,他是由时间创造的,是对放弃即时消费的补偿 风险溢价: 与承担的风险大小成正比,其中的系数代表了对单位风险的补偿,通常称之为风险的价格 资产配置 在资产配置方面,capm 模型根据对市场走势的预测来选择具有不同的β系数的证券或组合以获得较高收益率或者规避市场风险当有很大把握预测到牛市到来时,应当选择那些β系数高的证券或组合相反则降低β系数,以减少因市场下跌而造成的的损失 资产估值(类似均值回归) 在这方面CAPM 用来判断市场错误定价实际价格低于均衡价格是,则说明该证券是廉价证券,应当购入;相反则卖出,将资金转向其他廉价证券 CAPM模型的应用 基本面分析: 通过研究公式的财务 ...
API 性能测试和调优
API 性能测试和调优在 API 上线之前,我们需要知道 API 的性能,以便知道 API 服务器所能承载的最大请求量、性能瓶颈,再根据业务的需求量来对 API 进行性能调优或者扩缩容。通过这些可以使 API 稳定地对外提供服务,并且请求在合理的时间内返回。 API 性能测试指标API 性能测试,大的方面包括 API 框架的性能和指定 API 的性能,因为指定 API 的性能跟该 API 具体的实现有关,比如有无数据库连接,有无复杂的逻辑处理等,脱离了具体实现来探讨单个 API 的性能是毫无意义的,所以本文只探讨 API 框架的性能。 衡量 API 性能的指标主要有 3 个: 并发数(Concurrent) 并发数是指某个时间范围内,同时正在使用系统的用户个数。 广义上的并发数是指同时使用系统的用户个数,这些用户可能调用不同的 API。严格意义上的并发数是指同时请求同一个 API 的用户个数。本文所讨论的并发数是严格意义上的并发数。 每秒查询数(QPS) 每秒查询数 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 QPS = 并发数 / 平均请求响应时间 ...
API 身份验证
API 身份验证在典型业务场景中,为了区分用户和安全保密,必须对 API 请求进行鉴权, 但是不能要求每一个请求都进行登录操作。合理做法是,在第一次登录之后产生一个有一定有效期的 token,并将其存储于浏览器的 Cookie 或 LocalStorage 之中,之后的请求都携带该 token ,请求到达服务器端后,服务器端用该 token 对请求进行鉴权。在第一次登录之后,服务器会将这个 token 用文件、数据库或缓存服务器等方法存下来,用于之后请求中的比对。或者,更简单的方法是,直接用密钥对用户信息和时间戳进行签名对称加密,这样就可以省下额外的存储,也可以减少每一次请求时对数据库的查询压力。这种方式,在业界已经有一种标准的实现方式,该方式被称为 JSON Web Token(JWT,音同 jot,详见 JWT RFC 7519)。 token 的意思是“令牌”,里面包含了用于认证的信息。这里的 token 是指 JSON Web Token(JWT)。 JWT 简介JWT 认证流程 客户端使用用户名和密码请求登录 服务端收到请求后会去验证用户名和密码,如果用户名和密码跟数据 ...
给Fastapi 设计一个自定义 http加密中间件
什么是中间件中间件 作用 HTTP 调用添加自定义处理逻辑在实际开发中,我们可能需要对每个请求/返回做一些特定的操作,比如记录请求的 log 信息,在返回中插入一个 Header,对部分接口进行鉴权,这些都需要一个统一的入口,逻辑如下: 这个功能可以通过引入 middleware 中间件来解决。python HTTP 模块 的设计的一大特点是特别容易构建中间件。Standard 所使用的 fastapi 框架也提供了类似的中间件。 如何在中间件设计自定义的自己的通信协议加密 生成http 加密解密需要的公钥和私钥 根据fastapi 原生的中间件写法写一个基础框架 设计 请求接受的消息加密 设计 响应数据的加密以及 Content-Length 的长度计算 设计 自定义的响应头参数 伪代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717 ...
nginx配置
nginx配置nginx是一个功能非常强大的web服务器加反向代理服务器,同时又是邮件服务器等等 在项目使用中,使用最多的三个核心功能是反向代理、负载均衡和静态服务器 这三个不同的功能的使用,都跟nginx的配置密切相关,nginx服务器的配置信息主要集中在nginx.conf这个配置文件中,并且所有的可配置选项大致分为以下几个部 123456789101112131415161718192021222324252627282930313233343536ain # 全局配置events { # nginx工作模式配置}http { # http设置 .... server { # 服务器主机配置 .... location { # 路由配 ...
Nginx 介绍
Nginx 介绍Nginx 是一个自由、开源、高性能及轻量级的 HTTP 服务器和反向代理服务器,它有很多功能,主要功能为: 正向代理 反向代理 负载均衡 HTTP 服务器(包含动静分离) 本文使用 Nginx 反向代理和负载均衡的功能。 Nginx 的更详细介绍可以参考 nginx简易教程。 Nginx 反向代理功能Nginx 最常用的功能之一是作为一个反向代理服务器。反向代理(Reverse Proxy)是指以代理服务器来接收 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器(摘自百度百科)。 为什么需要反向代理呢?在实际的生产环境中,服务部署的网络(内网)跟外部网络(外网)通常是不通的,需要通过一台既能够访问内网又能够访问外网的服务器来做中转,这种服务器就是反向代理服务器。Nginx 作为反向代理服务器,简单的配置如下: 1234567891011121314server { listen 80; serve ...
RESTful API 介绍
什么是 APIAPI(Application Programming Interface,应用程序编程接口)是一些预先定义的函数或者接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无须访问源码,或理解内部工作机制的细节。 要实现一个 API 服务器,首先要考虑两个方面:API 风格和媒体类型。Go 语言中常用的 API 风格是 RPC 和 REST,常用的媒体类型是 JSON、XML 和 Protobuf。在 Go API 开发中常用的组合是 gRPC + Protobuf 和 REST + JSON。 REST 简介REST 代表表现层状态转移(REpresentational State Transfer),由 Roy Fielding 在他的 论文 中提出。REST 是一种软件架构风格,不是技术框架,REST 有一系列规范,满足这些规范的 API 均可称为 RESTful API。REST 规范中有如下几个核心: 1, REST 中一切实体都被抽象成资源,每个资源有一个唯一的标识 —— URI,所有的行为都应该是在资源上的 CRUD 操作 2, 使 ...
泛型函数的使用
泛型函数的使用python3 标准库根据传入参数类型的不同而调用不同的函数逻辑体,这种实现我们称之为泛型。在 Python 中叫做 singledispatch 引入包1import functools 不带装饰器123456789101112131415161718192021@functools.singledispatchdef myfunc(arg): print('default myfunc({!r})'.format(arg))@myfunc.register(int)def myfunc_int(arg): print('myfunc_int({})'.format(arg))@myfunc.register(list)def myfunc_list(arg): print('myfunc_list()') for item in arg: print(' {}'.format(item)) ...
基于python 上下文回调属性实现golang 中的 延迟调用
基于python 上下文回调属性实现golang 中的 延迟调用 python官方文档–contextlib input123456789101112131415161718import contextlibdef callback(): print('被延迟的function') def callnormal(): print("被正常调用")def pyDefer(callnormal,callback): ''' 实现类似 defer 的延迟调用 - 借助python 上下文中的 回调机制实现类似golang 中的 defer ''' with contextlib.ExitStack() as stack: stack.callback(callback) callnormal()pyDefer(callnormal,callback) output12被正常调用被延迟的function