自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 接口防抖(重复点击)

可以给某字段增加唯一索引(唯一约束和唯一索引不同的两个东西,唯一约束是通过唯一索引实现,添加唯一约束就生成了唯一索引,但是添加唯一索引不会自动生成唯一约束,字段中的null值被认为是不同的)请求A接口带上这个token,A接口会判断缓存中是否有此token,如果有此token,则响应请求。请求接口的时候先判断是否有此请求的缓存,如果没有,处理请求,然后将此请求加入缓存,并设置过期时间。在请求A接口(提交数据)前先请求获取唯一码的接口B(获取数据)来获取。后端处理的方法就比较多了,下面说常用的几种。

2024-05-09 14:20:49 284

原创 mysql 幻读,脏读和不可重复读

不可重复读是指在一个事务内,多次读取同一数据返回的结果不一致。例如,假设有两个事务C和D,C首先按照某个范围条件(如id>10 and id<20)查询了表中的数据,然后D在这个范围内插入了新的数据。另外,MySQL还提供了一个特殊的锁——可重复读锁(Repeatable Read),它可以避免不可重复读的问题。用户user1的初始balance是100,事务A减少了他的余额50,并进行其余的操作,但还未提交。事务A又来读取user1的balance,结果是50,两次读取结果就不一致,导致了不可重复读。

2024-05-09 11:53:11 749

原创 Laravel 开发Api规范

accept头即为客户端请求头,做成中间件来使用。Accept 决定了响应返回的格式,设置为 application/json, 遇到的所有报错 Laravel 会默认处理为 JSON 格式。异常分为两种,一种是要给前端返回展示的,比如表单验证,一种是不需要给前端展示的,比如服务器内部错误。在 app/Helpers 目录下创建 ApiResponse.php 文件。Enum 枚举,新建app/Enums/ResponseEnum.php。配置 config/app.php 文件。

2024-04-04 14:16:21 784

原创 dcat笔记

使用继承重写的思路,最好不要直接去修改vendor包里面的dcat源码,只需要找到相应位置,然后复制过来,重写即可。此处我想修改admin_users表,添加一个park_id 关联到parks表,须要修改管理员页面。新建一个controller。

2024-03-30 19:55:14 315

原创 ES 嵌套对象数据问题

很明显,这样的结构丢失了属性名称和属性值的关联,导致查询的时候,出现失效,如果业务要求实现精准搜索,那么这种方案是不满足要求的。新增一个search_value ,把属性名和属性值拼接之后存入这个字段,然后在筛选时也将属性名和属性值拼接,并精确匹配 search_value 字段即可。原因是 ES 对于json对象数组的做了压扁处理,比如上面的例子在 ES真实 存储的结构是这样的。我想要的结果是外包装属性值为白色的产品,结果会多出来另外一个属性机器颜色也是白色的产品。

2024-03-28 12:58:34 445

原创 ES使用copy_to小技巧

给properties.title加上了copy_to参数,值是skus_title,Elasticsearch 就会把这个字段值复制到 skus_title 字段里,这样就可以在 multi_match 的 fields 里通过 skus_title 来匹配。此时我们想查询在skus中存在或者properties中存在的某个匹配的值,skus和properties都是nested嵌套对象类型的,想要的匹配条件并非在一个nested中,如果使用查询。现在使用上面的查询语句就可以查出正确的值了。

2024-03-28 11:11:59 568

原创 查询 in条件下按顺序排序

查询结果是不是按照参数顺序排列的,为了保证查询顺序可以使用。

2024-03-27 16:54:16 136

原创 Laravel 小技巧

数据库中status 值为0或1,设置$casts 后,插入数据库插入数据库模型自动将status=true转换为1,查询数据的时候会自动将status=1转成查询结果中的status=》true,查询条件中也可以直接使用where(‘status’,true)。getCollection()方法可以从分页数据中获取真实的数据(比如分页中的课程数据),setCollection()方法可以将真实数据设置进分页数据,collect()方法可以将数组数据转化为集合数据。

2024-03-26 16:23:10 228

原创 es同义词配置规则

2,a,b:通俗的来讲,就是不管用户输入的是a还是b,es在查询的是用a,或者b搜索.比如 保温杯,杯子,用户输入的是"保温杯",es会用"杯子"去做搜索,也会用"保温杯"搜索。搜索a的时候会同时再搜索b,搜索b的时候会同时再搜索a。1,a=>b: 通俗的来讲,就是尽管用户输入的是a,但是es在查询的是会转成b去搜索,"=>"左边的词全部会被右边的词替换。4.a,b=>a,b 搜索a就等于搜索a或者搜索b,搜索b就等于搜索a或者搜索b。3.a,b=>c 搜索a和b都会转成搜索c。

2024-03-24 23:15:32 360

原创 docker安装elasticsearch

这里一定要看好版本,好多个版本这里插件不一样,坑很多,最终如下,ik里面放的是v7.17.18.zip出来的所有文件。在config中创建elasticsearch.yml文件并写入配置。另外一种方法网络问题一直失败,不建议。

2024-03-24 21:31:56 250

原创 laravel faker使用详情

在congfig/app.php 中增加配置。

2024-03-21 11:01:49 237

原创 nginx日志统计qps

以支付宝为例,每秒钟需要处理大量的交易请求,因此TPS是支付宝必须要关注的性能指标。对于一个高并发应用来说,QPS是非常重要的性能指标,它反映了应用处理请求的能力。举个例子,假设有一个电商网站,这个网站每天需要处理100万个订单请求,那么每秒钟需要处理的订单数量就是1000000 / 86400 ≈ 11.57。tail -f命令用于实时输出日志内容,awk命令用于提取日志中的时间戳信息,cut命令用于截取时间戳中的秒数信息,uniq -c命令用于统计每个秒数内的请求数。可以统计服务一天的访问日志得到。

2024-03-19 21:22:46 1121

原创 一文搞懂所有常见数据结构

比如我给score插入了值是1,其实应该是00000001,左边补0直到长度达到8位。对于int型的字段来说,能存储的最大值和最小值永远都是固定的,int存储大小为4个字节32位,就相当于int32,取值范围就是 -2^31 ~ 2^31 – 1。int8是八位bit,占用一个字节byte,其中最高位符号位(最左边)1是符号,0是正号。计算机只能处理0和1,计算机能把0和1转换成电路中的信号来计算,这个就是计算机的本质。那么最大二进制的数值就是 0 1 1 1 1 1 1 1 ,换成10进制来就是。

2024-03-06 14:37:59 777

原创 docker 安装rabbitmq并配置hyperf使用

这里须要修改配置文件,不然有的地方会报错 docker rabbitmq Management API returned status code 500。用户名和密码 guest。

2024-03-05 14:58:42 549

原创 hyperf协程使用几种方式

hyperf封装的协程基本有四种方式,第一种就是go或co关键字,通过管道channel通讯来并行处理;第二种是通过waitgroup;前两种发现和go几乎一样,第三种通过Parallel;第四种使用Parallel的全局函数,其实都是对前面两种的封装。swoole的协程是单进程单线程的,是不能利用多核的,想使用多核需要通过添加work数来实现。这里和go本质区别就是,worker内的全局函数是进程内共享的,全局共享需要通过共享内存等其他方式实现;

2024-03-04 23:12:50 410

原创 mysql订单查询数据优化

then的用法就不做过多的解释了,这条SQL很容易理解,先对一条一条记录进行遍历,group by对日期进行了分类,sum聚合函数对某个日期的值进行求和,重点就在于case…then对sum的求和巧妙的加入了条件,当o_source = 'CDE’的时候,计数为1,否则为0;每一个查询都进行了全表扫描,五个子查询DEPENDENT SUBQUERY说明依赖于外部查询,这种查询机制是先进行外部查询,查询出group by后的日期结果,然后子查询分别查询对应的日期中CDE,SDE等的数量,其效率可想而知。

2024-03-04 20:25:17 368

原创 三级分销(栏目无限极分类)数据库设计

其中,别名T2的表示原本的数据,而T1中的plevel即是父代的级别(1:直接父代,2:二级父代,3:三级父代)如果plevel为0,代表是查询的节点自身。查询所有用户4的一级下线,查出来的cid列就是结果。查询用户10的所有父级,查出来的pid列就是结果。@r := 9 设置自己所要搜索子节点的id。@r := 1 为要查询的数据id。

2024-03-04 19:02:21 540

原创 二叉树和平衡二叉树

1. 二叉树二叉树binary tree是指每个节点最多含有两个子树的树结构。特点: 1.所有节点最多拥有两个子节点,即度不大于2 2.左子树的键值小于根的键值,右子树的键值大于根的键值。因为二叉树只是定义了简单的结构,所以存在多种深度可能,导致二叉树的效率低,所以引入了平衡二叉树。2. 平衡二叉树2.1 avl树平衡二叉树,基于avl算法,即是avl树(avl tree)特点: 1.符合二叉树的条件下 2.任何节点的两个子树的高度最大差为1

2024-03-04 12:12:23 369

原创 hyperf开发项目

修改配置文件/hyperf-skeleton/config/autoload/swagger.php。ps:查看当前php版本 和swoole版本。修改后须要到容器运行的地方添加此端口映射。,然后添加端口映射并重启容器。先停止docker容器。

2024-03-04 11:19:27 379

原创 phpstrom与服务器docker映射目录同步代码

在gitee上新建一个仓库,本地git 关联这个仓库,虚拟机也关联这个仓库。本地修改后 git push 到仓库,在虚拟机上再 git pll 下来,比较麻烦。最后开启 automatic upload即可,本地修改文件会立刻上传同步到虚拟机。连接成功后先从虚拟机往下拉代码,同步一下。phpstorm 文件同步。

2024-03-04 11:13:31 415

原创 swoole

master进程像创始人老板负责单子业务洽谈,有钱有资源,他拉来一批职业经理人manager进程帮自己管理厂子,然后manager就fork出来很多工人worker进程来干活,后来发现供应物料后勤什么的比较费时间就交给了taskworker进程来做。当Worker工作进程出现异常时关闭,Manager管理进程会重新创建一个Worker工作进程,保证Worker工作进程的数量是固定的。将读写操作的监听注册到对应的Reactor线程中,并通知Worker工作进程处理onConnect,也就是接收到连接的回调。

2024-03-02 22:46:49 572

原创 nginx,php-fpm

一个worker进程可以同时处理的请求数只受限于内存大小,Worker 进程 不再同步阻塞的去处理一个请求,而是可以同时处理多个请求,无需 I/O 等待。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。2)处理请求:当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。worker进程之间是平等的,每个进程,处理请求的机会也是一样的。

2024-03-02 22:30:17 1022

原创 docker构建hyperf环境

这里我们采用创建自定义网络的方式来连通,通过创建自定义网络,可以为容器提供一个独立的网络环境,使得容器可以相互通信,并与其他网络资源进行交互。注意这里有个坑,如果我们composer安装的时候选择安装了mysql,redis等模块,那就须要配置连接信息,否则会一直报错,start启动不起来(mysql不会报错)创建自定义网络后,可以将容器连接到该网络,并使用容器名称或服务名称进行容器间通信。假设我们开启了mysql模块,我本机已经启动了一个mysql容器,我们就去修改配置文件,然后连接mysql数据库。

2024-03-01 23:11:44 1268

原创 本地navicate连接vm虚拟机中的mysql5.7docker容器

注意先配置常规信息,这里填写127.0.0.1或者虚拟机ip其实都可以,原理是先进行虚拟机认证后再进行mysql的连接。修改完之后 docker exit 退出容器。本地vm虚拟机docker-mysql57。前提是我已经启动的mysql5.7容器。我的vm虚拟机使用的NAT模式连接。此时我们有两种方法连接mysql。查看docker端口映射情况。posrts中意思是。

2024-03-01 17:55:16 535

原创 laravel ApiResponse接口统一响应封装

在config中新增配置文件apicode.php。先 use ApiResponse;

2024-03-01 14:34:33 628

原创 swoole协程

【代码】swoole协程。

2024-02-28 15:02:11 562

原创 laravel8配合jwt

执行后 会在config 下自动生成 jwt.php 文件。

2024-02-28 11:58:46 661

原创 docker-compose 搭建laravel环境

laravel环境包含nginx,mysql,php7.4,redis。

2024-02-25 20:24:47 689

原创 前端对用户名密码加密处理,后端解密

js资源地址链接:https://pan.baidu.com/s/1kfQZ1SzP6DUz50D–g_ziQ。后端使用php获取数据。

2023-11-15 21:54:34 644 1

原创 php做物联网

物联网分为两方面环境监测和设备控制;环境监测方面主要通过传感器获得数据。传感器大都会采用RS485通讯,可以通过转接头连接电脑上进行调试。也可以连接DTU,通过TCP/UDP协议或者mqtt协议将数据连接到TCP服务器或者MQTT服务器上;而设备控制也可以通过协议发送指令给控制设备,控制设备根据指令执行相应的操作。

2023-05-23 17:28:46 402

原创 php单例类

单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费。必须拥有一个构造函数,并且必须被标记为private。拥有一个保存类的实例的静态成员变量。拥有一个访问这个实例的公共的静态方法。

2023-04-08 22:54:12 113

原创 宝塔安装nginx geoip2 扩展 并屏蔽指定国家ip请求

以宝塔安装的nginx为例,打开/www/server/nginx/conf/nginx.conf文件,在http中添加。nginx扩展安装好了之后实际上有一个默认的数据库,位置在/usr/share/GeoIP/ 目录下,我们需要使用自己下载的最新数据。修改 对应站点的配置文件,在/www/server/panel/vhost/nginx 目录中的网站配置文件的server段中添加。其中iso_code可参考 http://doc.chacuo.net/iso-3166-1/ 二位字母查询。

2022-11-02 16:24:19 1507

原创 微信支付和退款

1.流程图apiclient_cert.pem 和 apiclient_key.pem 证书是商家在使用微信支付功能的时候,进行身份验证用到的,起到一种安全的作用,但是,目前微信支付仅仅只在使用退款接口或者撤销订单的时候需要可能会用到证书。2.代码付款和退款封装成一个类class WxpayService{ public function __construct() { $this->conf =[ "appid" => config

2021-01-05 15:56:26 1349

原创 支付宝支付和退款

一,支付宝1.名词解释我们一般会看见这四种密钥rsa_private_key 商户私钥 :生成后要保存在服务端,绝对不能保存在客户端,也绝对不能从服务端下发rsa_public_key 商户公钥 :由我们自己生成的RSA公钥(必须与商户端私钥是一对),生成后需要填写在支付宝开放平台alipay_private_key 支付宝私钥 :支付宝私钥是支付宝自己生成的,由他们自己保存的 alipay_public_k

2021-01-05 15:11:27 1902 1

原创 数据库加锁

概述 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理。在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数据的一致性,就需要数据库的锁机制。每种数据库的锁机制都自己的实现方式,mysql作为一款工作中经常遇到的数据库,它的锁机制在面试中也经常会被问到。所以本文针对mysql数据库,对其锁机制进行总结。mysql的锁可以分为服务层实现的锁,例如Lock Tables、全局读锁、命名锁、字符锁,或者存储引擎..

2020-11-05 16:07:19 1764

原创 mysql基础

数据库引擎mysql-5.1版本之前默认引擎是MyISAM,之后是innoDBInnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。1.InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。2.My

2020-11-05 11:19:30 68

原创 Nginx和Apache以及php-fpm

Nginx的优势1.轻量级,采用C进行编写,同样的web服务,会占用更少的内存及资源2.抗并发,nginx以epoll and kqueue作为开发模型,处理请求是异步非阻塞的,多个连接对应一个进程,负载能力比apache高很多,而apache则是同步多进程模型,只能一个连接对应一个进程,当压力过大时,它是会被阻塞型的。在高并发下nginx能保持低资源低消耗高性能 ,而apache在PHP处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。3.设计高度模块化,编写模块相对简单

2020-10-22 16:55:23 169

原创 TCP三次握手和四次挥手

回过头来看看基础知识,简单的看看TCP的三次握手和四次挥手。三次握手CK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。在客户端和服务器建立连接的时候, 客户端发送syn(syn=x)包到服务器,并进入SYN_SENT状态。服务器在收到syn包后,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。客户端收到SYN+ACK包之后,回复给服务器一个ACK(ack

2020-10-22 14:40:14 88

原创 线程和进程

线程和进程进程和线程的关系:(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)CPU分给线程,即真正在CPU上运行的是线程。1、进程进程是程序在计算机上的一次执行活动。是一个具有一定独立功能的程序在某个数据集合的一次运行活动。程序是静态的,进程是动态的。进程具有的特征:动态性:进程是程序的...

2020-10-22 09:15:53 85 1

原创 网站被攻击如何解决 通过日志查找攻击特征

网站被黑被攻击后,我们首先要检查的就是对网站的访问日志进行打包压缩,完整的保存下来,根据客户反映的问题时间,被攻击的特征等等方面进行记录,然后一一的对网站日志进行分析,网站的访问日志记录了所有用户对网站的访问记录,以及访问了那些页面,网站出现的错误提示,都可以有利于我们查找攻击源,网站存在的那些漏洞也都可以查找出来,并对网站的漏洞进行修复。我们就拿前段时间某一个企业客户的网站,进行举例:先看下这...

2020-10-21 15:02:54 3765

空空如也

空空如也

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

TA关注的人

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