01 2021 档案
摘要:我们在申请上游读接口调用权限时,往往会多问一句,这接口是否支持批量查询。正所谓,能批量绝不单个,能异步绝不串行。而读接口的底层大部分是通过Redis的批量Mget查询实现,没有人敢放心地将数据库查询暴露给非内部的系统。 但是,每次查询Key的个数如果不加以控制的话,将是一个隐患。比如,元素数目从10
阅读全文
摘要:local c = 0 local resp = redis.call('SCAN',c,'MATCH','authToken*','COUNT',10000) c = tonumber(resp[1]) local dataList = resp[2] for i=1,#dataList do l
阅读全文
摘要:Linux 配置优化 我们在使用 Redis 过程中,可能更多的关注 Redis 本身的一些配置优化,如 AOF、RDB 配置、数据结构配置优化等。 但是很少关心 Redis 的载体,服务器的优化。而这往往为我们的项目运行带来灾难性的打击。因此服务器优化也是必不可少的 内存分配控制 Redis启动时
阅读全文
摘要:Redis 集群并没有使用一致性hash,而是引入了哈希槽的概念。 Redis 集群有16384(2^14)个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集
阅读全文
摘要:为什么redis集群最少需要6个节点?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 这也算个思考吧,通过redis-trib.rb可创建redis集群,然后通过--replicas后面接的数字,表示1个主节点对应几个从节点,那么我就
阅读全文
摘要:一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心
阅读全文
摘要:数据库设计关联关系表,目的是承载"数据建模"的"数据结构"部分。 "数据建模"的第二个部分,是"数据操作"。即对存量和流量业务数据的各种业务处理和存储。 这部分早期是通过存储过程以及数据库自身的功能来约束,比如,自定义函数,存储过程等。随着程序越来越复杂,在工业界实践中,"数据操作"这部分逐渐从数据
阅读全文
摘要:无论是Django新手还是老鸟,相信你对Request对象并不陌生。比如定义视图函数时def index(request, *args, ** kargs)我们总是要包含request这个变量,又比如我们经常用request.user来判断当前访问用户状态。 request对象包括了很多有用方法和信
阅读全文
摘要:自定义字段属性和错误信息 对于每个字段你可以设置其是否为必需,最大长度和最小长度。你还可以针对每个属性自定义错误信息,见下面代码。 from django import forms class LoginForm(forms.Form): username = forms.CharField( re
阅读全文
摘要:什么是缓存Cache 缓存是一类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存。一般来说从数据库多次把所需要的数据提取出来,要比从内存或者硬盘等一次读出来付出的成本大很多。对于中大型网站而言,使用缓存减少对数据库的访问次数是提升
阅读全文
摘要:为什么需要使用cookie和session? HTTP协议本身是”无状态”的,在一次请求和下一次请求之间没有任何状态保持,服务器无法识别来自同一用户的连续请求。 有了cookie和session,服务器就可以利用它们记录客户端的访问状态了,这样用户就不用在每次访问不同页面都需要登录了。 什么是coo
阅读全文
摘要:正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示 “兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。 -- 如果存在 person 表先删除 DROP TABLE IF EXISTS person; -- 创建 person 表,其中 us
阅读全文
摘要:Nginx 处理 HTTP 头部的过程 Nginx 在处理 HTTP 请求之前,首先需要 Nginx 的框架先和客户端建立好连接,然后接收用户发来的 HTTP 的请求行,比如方法、URL 等,然后接收所有的 Header,根据这些 Header 信息,才能决定由哪些 HTTP 模块处理请求。下面这张
阅读全文
摘要:二级目录映射目前前后端项目分离场景多了以后,一般是前端一个端口,后端一个端口。 如前端是https://example.com/index.html,调用的接口是https://example.com:4433 如此部署对于一些小项目未免有些麻烦,当然你在公网环境下也可以选择使用子域名、其他域名进行
阅读全文
摘要:有时我们会使用一些java或node应用,但又不想让他们直接监听80端口,这时就需要用到端口转发 本文中,我们介绍Nginx如何做端口转发,还有各种转发规则 将域名转发到本地端口 首先介绍最常用的,将域名转发到本地另一个端口上 server{ listen 80; server_name tomca
阅读全文
摘要:Nginx 工作原理 Nginx由内核和模块组成,Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block。 此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。 通
阅读全文
摘要:什么是表单?何时使用表单? 在web开发里表单的使用必不可少。表单用于让用户提交数据或上传文件,表单也用于让用户编辑已有数据。Django的表单Forms类的作用是把用户输入的数据转化成Python对象格式,便于后续操作(比如存储,修改)。 自定义表单 类似模型,Django表单也由各种字段组成。表
阅读全文
摘要:启动网络命令 ip addr 查看网卡信息 service network start 启动网卡 service network stop 关闭网卡 service network restart 重启网络 pwd命令 pwd命令,查看当前目录的路径 linux下所有的绝对路径都是从根目录"/"开始
阅读全文
摘要:目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 而通常我们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。 第一范式(1N
阅读全文
摘要:1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和
阅读全文
摘要:1. 概述 Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。 但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。 另外的一些典型问题就是,缓存穿透、缓存雪崩和缓存击穿。目前,
阅读全文
摘要:Ubuntu 中通过命令 sudo apt-get install redis-server 安装的 Redis,默认的配置文件在 etc/Redis/redis.conf 中,可以通过 sudo vim /etc/Redis/redis.conf 来打开并进行编辑。 该配置文件中的相关配置项如下
阅读全文
摘要:0. 前言 在面试中,计算机网络的 TCP 三次握手和四次挥手是很常见的问题,但是在实际面试中,面试官会更愿意听到怎样的回答呢?详细程度是怎样的? 越简单常见的问题越不可小觑,万丈高楼平地起,把简单的问题深入化,才更能拉开与竞争者的距离。掌握了本文讲的全部知识点,关于 TCP 三次握手和四次挥手基本
阅读全文
摘要:1. 五层协议参考模型 所谓通信协议就是通信双方都必须要遵守的通信规则。如果没有网络通信协议,计算机的数据将无法发送到网络上,更无法到达对方计算机,即使能够到达,对方也未必能读懂。有了通信协议,网络通信才能够发生。 一般我们用五层协议参考模型来进行计算机网络的学习: 应用层 运输层 网络层 数据链路
阅读全文
摘要:最普遍的答案 1. GET使用URL或Cookie传参。而POST将数据放在BODY中。 2. GET的URL会有长度上的限制,则POST的数据则可以非常大。 3. POST比GET安全,因为数据在地址栏上不可见。 可以回答的答案 GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(
阅读全文
摘要:正文 我们知道,索引是一个基于链表实现的树状Tree结构,能够快速的检索数据,目前几乎所RDBMS数据库都实现了索引特性,比如MySQL的B+Tree索引,MongoDB的BTree索引等。 在业务开发过程中,索引设计高效与否决定了接口对应SQL的执行效率,高效的索引可以降低接口的Response
阅读全文
摘要:Python的多进程编程与multiprocess模块 python的多进程编程主要依靠multiprocess模块。我们先对比两段代码,看看多进程编程的优势。我们模拟了一个非常耗时的任务,计算8的20次方,为了使这个任务显得更耗时,我们还让它sleep 2秒。第一段代码是单进程计算(代码如下所示)
阅读全文
摘要:在学习使用docker过程中会遇到镜像和容器,两者之间的区别是什么?有什么关联?本文将用图文并茂的方式介绍容器、镜像的区别,能够很好的帮助各位深入理解Docker。 一、什么是镜像? 1.1 Image Layer(镜像层) 镜像可以看成是由多个镜像层叠加起来的一个文件系统(通过UnionFS与AU
阅读全文
摘要:11. 简单说说看 Django的CSRF防御机制 Django的CSRF保护主要是通过django.middleware.csrf.CsrfViewMiddleware中间件来实现的。主要流程如下: Django 第一次响应来自某个客户端的get请求时,会在服务器端随机生成一个 csrftoken
阅读全文
摘要:1. Django的优点和缺点有哪些? Django的优点 功能完善、要素齐全:自带大量企业Web开发常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业级网站。 完善的文档:经过十多年的发展和完善,Django有广泛的实践案例和完善的在线文档。开发者遇到问题时可以搜索在线文档寻求解决
阅读全文
摘要:explain关键字可以模拟MySQL优化器执行SQL语句,可以很好的分析SQL语句或表结构的性能瓶颈。 explain的用途 1. 表的读取顺序如何 2. 数据读取操作有哪些操作类型 3. 哪些索引可以使用 4. 哪些索引被实际使用 5. 表之间是如何引用 6. 每张表有多少行被优化器查询 ...
阅读全文
摘要:一个 Redis 集群通常由多个节点(node)组成, 在刚开始的时候, 每个节点都是相互独立的, 它们都处于一个只包含自己的集群当中, 要组建一个真正可工作的集群, 我们必须将各个独立的节点连接起来, 构成一个包含多个节点的集群。 连接各个节点的工作可以使用 CLUSTER MEET 命令来完成,
阅读全文
摘要:两大类索引 聚簇索引 * 如果表设置了主键,则主键就是聚簇索引 * 如果表没有主键,则会默认第一个NOT NULL,且唯一(UNIQUE)的列作为聚簇索引 * 以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引 InnoDB的聚簇索引的叶子节点存储的是行记录(其实是页结构,一个页包含多行数据
阅读全文
摘要:如果你不知道什么是覆盖索引,那么SQL性能优化便无从谈起! 什么是覆盖索引?如何利用索引进行SQL语句优化? 表结构 150多万的数据,这么一个简单的语句: 慢查询日志里居然很多用了1秒的,Explain的结果是: 从Explain的结果可以看出,查询已经使用了索引,但为什么还这么慢? 分析:首先,
阅读全文
摘要:为什么查询会变慢 如果查询是一个任务,那么它由一系列子任务组成,每个子任务都会消耗时间,优化查询其实就是优化子任务 要么消除一些子任务;要么减少一些子任务执行的次数;要么加快子任务的执行速度 慢查询基础:优化数据访问 查询性能低下的最基本原因就是访问的数据太多,可以这样分析: 是否查询了大量超过需要
阅读全文
摘要:索引基础 索引,又叫key(键) 在mysql中,存储引擎先在索引中找到检索的内容,然后根据索引结果找到对应的数据行 索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序十分重要,因为mysql只能高效的使用索引的最左前缀列 最左前缀列就是KEY(id, name, sex),id在id、
阅读全文