自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

转载 Redis分布式锁到底安全吗?

以下文章来源于水滴与银弹 ,作者Magic Kaito水滴与银弹给你呈现不一样的技术视角。阅读本文大约需要 20 分钟。这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢?因为我发现网上 99% 的文章,并没有把这个问题真正讲清楚。导致很多读者看了很多文章,依旧云里雾里。例如下面这些问题,你能清晰地回答上来吗?基于 Redis 如何实现一个分布式锁?Redis 分布式锁真的安全吗?Redis 的 Red

2021-07-17 20:56:44 235

转载 docker 网段冲突问题解决

docker安装完毕后,会自动生成一个网卡名为docker0的网桥,如果其默认分配的网段地址和已有地址段冲突,可按如下步骤修改。查看默认地址段如下 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:6e:e3:0a:62 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX err

2021-07-17 20:29:51 1531

原创 linux使用nohup启动后台进程

目录 不需要日志重定向日志到指定文件文件描述符/dev/null2>&1&日志丢失?不需要日志nohup java -jar yourProject.jar >/dev/null 2>&1 & 重定向日志到指定文件nohup java -jar yourProject.jar >/xxx/xxx/xxx.log 2>&1 & 文件描述符0: 标准输入1: 标准输出2: 错误输出/dev/null这条命令

2021-07-10 14:57:58 988

原创 python如何打包,实现pip install

python如何打包,实现pip install官方地址打包流程创建pyproject.toml(可选)配置元数据静态源数据动态源数据(如果包含该文件,即使没有参数也要调用setup())创建README.*md*安装软件包方式一方式二方式三官方地址https://packaging.python.org/tutorials/packaging-projects/打包流程创建pyproject.toml(可选)pyproject.toml是告诉构建工具(例如pip10+和 build)的文件,您正

2021-07-10 14:49:09 2716

原创 哈希和一致性哈希

什么是哈希Hash,一般翻译做散列、杂凑,或音译为哈希,是指把任意长度的输入(又叫做预映射pre-image)通过哈希算法变换成固定长度的输出的过程,该输出就是哈希值。哈希算法(哈希函数)哈希算法指的是能把任意长度的输入变换成固定长度输出的一系列算法。大家都知道数学中的函数如y=x+1, 通过改变x的值,我们可以得到对应的y。哈希函数其实也一样,通过传入不同的输入得到对应的输出,不同的是哈希函数的输入不仅限于数学中的数字,并且它的输出是固定长度的,具有一定规则的。常见的哈希算法有MD5, SHA-1,

2020-11-17 17:37:05 1081

原创 树的遍历及根据遍历顺序反推树的形状

三种遍历顺序以上是网上随便找的一个树前序遍历:FCADBEHGM(根左右)中序遍历:ACBDFHEMG(左根右)后序遍历:ABDCHMGEF(左右根)中序遍历步骤中序遍历的规则是【左根右】,我们从root节点A看起;此时F是根节点,遍历F的左子树;F的左子树存在,找到C,此时C看做根节点,遍历C的左子树;C的左子树存在,找到A,此时A看做根节点,遍历A的左子树;A的左子树不存在,返回A,根据【左根右】的遍历规则,记录A,遍历A的右子树;(此时记录顺序为:A)A的右子树不存在,返回C,

2020-11-16 17:50:19 778

原创 Tcp四次挥手谁需要等待,为什么等待时间为2MSL

什么是2MSLMSL是Maximum Segment Lifetime英文的缩写,即"报文最大生存时间", 他是任何报文在网络中存在的最长时间,超过这个时间报文将被丢弃。2MSL即2倍的报文最大存活时间TCP四次挥手谁需要等待主动发起关闭的一段需要等待,在第四次挥手时,主动发起关闭方发送完ACK包后就进入了TIME_WAIT状态,必须在此状态停留两倍的MSL时间为什么需要等待2MSL因为当主动发起关闭方发送完最后一个ACK包后无法确认对方是否有收到这个ACK包,所以2MSL的时间能保证如果对方没收

2020-11-13 11:17:42 1785

转载 Go语言的方法接受者类型用值类型还是指针类型?

概述很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下。何时使用值类型1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。2.如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重新分配内存给 slice,使用值类型。3.如果接受者是一个小的数组或者原生的值类型结构体类型(比如 time.Time 类型),而且没

2020-11-12 14:38:52 227

原创 发布平台jenkins

一. 安装jenkins创建docker-compose容器构建文件jenkins.yml,内容如下:version: "3" # docker-compose版本号services: jenkins: image: jenkinsci/blueocean # 使用镜像 container_name: qy-jenkins # 容器名称 privileged: true ports: # 端口映射 宿主机端口:容器

2020-11-11 15:58:13 187

原创 nginx中root和alias的区别

root: root路径 + location路径alias: alias路径替换location路径例:# 请求/ static/a.html时, 实际请求路径为/opt/qy/static/a.htmllocation /static/ { root /opt/qy/;}# 请求/static/a.html时, 实际请求路径为/opt/qy/a.htmllocation /static/ { alias /opt/qy/;}注意:使用alias时,目录名后面一定要加"/",

2020-11-09 11:42:17 108

原创 为什么性别字段不适合建索引

大家都知道索引分聚集索引和非聚集索引,性别字段因为可重复肯定只能建立非聚集索引,然而因为非聚集索引叶子节点存储的是索引值和聚集索引值,需要回表。所以在性别这种辨别度较低的字段上建立索引,索引树可能只有两个节点,跟线性查找没有太大区别,并且因为回表的存在导致在聚集索引树和非聚集索引树来回切换反而导致查询时间更慢。并且维护该索引还要一定的开销。另外,数据库优化器最终很大概率也不会选择走这个索引。综上,在辨别度较低的字段上建立索引得不偿失。...

2020-11-09 11:25:05 5744

原创 一次线上慢查询问题排查

需求&问题公司需要在商城首页添加一个跑马灯功能,需要获取指定省份下的近两天内的订单的前100条数据。首先这种请求频繁且数据量大的查询肯定是要使用缓存的,直接查表数据量不大的话索引弄好点还好,数据量一大可能数据库直接就挂掉了。但是由于此功能急着要,加上新来的同事经验不足,没有使用缓存,直接查表导致数据库服务器cpu暴增,cto要求紧急修复。排查首先,我们通过mysql慢查询日志定位到问题sql如下:select id, code, item_id, item_title ... from or

2020-08-18 17:42:16 251

原创 如何搭建ELK

一. 什么是ELKELK是Elasticsearch, Logstash, Kibana三个开源软件的缩写。ELK提供了一套集成方案,配合FileBeat一起使用是目前比较主流的一种日志系统。Elasticsearch是基于lucene的开源搜索引擎,是一个分布式的搜索分析系统,提供高拓展,高实时的搜索与数据分析。主要用于全文搜索,结构化数据分析,日志分析等场景。Logstash是一个管理日志和事件的工具,用于日志的搜集和分析,由于是jvm跑的,资源消耗比较大,所以一般都用Filebeat进行日志收集

2020-07-18 22:54:31 341

原创 真实业务场景下,事务隔离级别使用读提交还是可重复读?

一. 提交读(RC) or 可重复读(RR)大家都知道mysql的默认隔离级别是RR(可重复读),然而oracle只支持提交读和串行化。那我们在实际场景中到底用的哪种隔离级别比较多呢?答案是:提交读!缘由一:在RR隔离级别下,存在间隙锁,导致出现死锁的几率比RC大的多!缘由二:在RR隔离级别下,条件列未命中索引会锁表!而在RC隔离级别下,只锁行缘由三:在RC隔离级别下,半一致性读(semi-consistent)特性增加了update操作的并发性!重复读中有gap锁大大增加了锁等待和死锁概率

2020-06-23 09:48:51 2647 3

原创 Mysql数据库索引(面试常问)

索引类型一. 聚簇索引索引的叶子节点就是对应的数据节点(MySQL的MyISAM除外,此存储引擎的聚集索引和非聚集索引只多了个唯一约束,其他没什么区别),可以直接获取到对应的全部列的数据,而非聚集索引在索引没有覆盖到对应的列的时候需要进行回表查询。因此在查询方面,聚集索引的速度往往会更占优势二. 非聚簇索引(二级索引,辅助索引)叶子节点仍为索引节点,只是多了一个指针(主键值)指向对应数据节点,需要回表。非聚簇索引按不同条件又可分为普通索引,唯一索引,单列索引,联合索引,前缀索引等回表由于非聚簇索

2020-06-19 16:11:09 274

原创 关于docker一直restart(启动后马上退出)的解决方案

在用docker部署djagno项目时,需要用uwsgi启动django应用并同时启动celery。celery和uwsgi都运行在web容器中。于是写了个脚本打算通过docker-compose的command实现容器启动后自动运行脚本来实现uwsgi和celery的启动启动脚本start.sh:#!/bin/bashuwsgi --ini /featech_v2_0/uwsgi.ininohup celery -A celery_tasks.sms.tasks worker -l info &g

2020-06-10 17:41:30 10972

原创 docker三天速成,用docker部署Django+Redis+Mysql+MongoDB+Uwsgi+Nginx+Celery全家桶

背景标题说是三天速成,其实只是想装一下*而已,严格来说本菜其实一直都有去了解docker方面的相关知识,只是没有机会(其实就是自己懒)去真正操作而已,刚好最近公司需要用到,于是用了三天完成了理论到实践的蜕变。docker, docker-compose, Kubernetes,k8s对docker不太熟悉的小伙伴对这些名词是不是一脸懵逼?反正我是的,之前整天听人家提到这些名词,感觉很牛逼的样子。其实当你去了解的时候发现也就是几个名词而已。简单来说,docker就是一种虚拟化技术,可以看成一个超轻量级的

2020-06-10 11:38:24 801

原创 drf使用mongodb时实现过滤搜索,通过字典拆包解包实现将变量作为关键字参数的key

最近公司要记录用户行为记录日志用到了mongodb,项目框架用的是django rest framework, 用mongodb作为用户行为日志记录数据库导致了django-filter的过滤和drf的search功能都无法使用。网上没能查到解决方法,只能自己写一个过滤和搜索了。下面展示一些 过滤搜索代码,主要是过滤start_time和end_time字段,并对title, user等字段进行...

2020-04-29 14:24:06 617

原创 haystack同一模型实现不同的索引字段

前提在公司项目中遇到了这么一个需求,有两个接口需要用到haystack的全文索引,但是这两个接口需要进行索引的字段不一样,当时心里想到的方法是通过重写haystack的某个方法实现索引字段的过滤,但是网上查了很多资料,并且反复研究了一下haystack的源码,还是没有找到相应的方法。最后终于在google找到了另外一种实现方式,那就是django的代理模型继承。django三种模型继承一 ...

2019-09-05 09:50:46 418

原创 DRF框架之连表查询

DRF框架之连表查询DRF框架的视图序列化器封装节省了我们很多的工作,同时orm也让我们对数据库的操作更加方便。但我一直认为连表查询是DRF框架的一个痛点。大家应该经常能见到这样一种需求,一个接口需要返回两个表中的数据。在原生sql中这几乎不算问题,join in一下就好了。但是DRF中就不一样了,我们虽然可以通过object_set来实现表连接的功能,但是在DRF中,如果我们想要使用序列化器,...

2019-08-14 10:10:29 2494

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除