自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 phpstorm 快捷键

Ctrl + N 全局搜索类或者文件名,或者连续按两次 ShiftCTRL + ALT + L 格式化代码Ctrl + Y 删除行Ctrl + Shift + U 大小写转换Ctrl + D:复制当前行并粘贴Ctrl + Shift + ↑/↓ 向上/下移动当前行Ctrl + Shift + Enter 在当前行补全语句SHIFT + F2 高亮错误或警告快速定位错误,多个错误循环高亮CTRL + ALT + ←/→ 返回上次编辑的位置ALT + ↑/↓ 在方法间快速

2024-08-29 10:17:41 299

原创 二维数组字符串字段求并集并且去重

查询结果集合$complete1如上图,对 room_id 求并集,然后去重。

2024-08-28 23:18:21 203

原创 left join 使用 sum()

因为查询后的每个 group中的score都一样,可以使用 distinct 去重。SUM DISTINCT只能用于单个列的求和,不能用于多个列的求和。语句3中 on 多个条件,先对右表筛选 sex=1,再生成临时表。左表没有的数据以null补齐,以右表为主。避免直接lefj join 查询,先查询子表,再将子表查询结果与主表结果关联。一对多,实际上是对上面四条数据的 sum(a.score)。先处理“一对多”中这个多表,将多表中的数据先聚合成一条。表一,test_group 分组表。

2024-08-28 15:22:58 234

原创 自定义可逆加密字符串

【代码】自定义可逆加密字符串。

2024-08-07 14:44:34 125 1

原创 php排序算法

此时j=1,比较并交换位置之后 为 4,9,10,3。2.将待排序元素进行分区,比基准值小的元素放在基准值前面,比基准值大的元素放在基准值后面。分析:外层遍历,i=0的时候,就是拿 10 和内层 [‘10’,‘4’,‘9’,‘3’] 依次做比较,如果。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。第二轮,i=1,手机用4,9,3,10遍历比较完之后为 4,3,9,10。

2024-06-17 18:45:40 353

原创 电商秒杀系统

假设有100万人来抢购100个商品,既然大部分人都不可能抢到,那我们完全可以在用户提交下单请求时生成一个 0 ~ 100 的随机数,如果这个数大等于 2 则直接告诉用户抢购的人太多请重试,这样能落到 Redis 的请求就只剩下了 2% 也就是 2 万人。在代码层面可以使用路由中间件来实现。先判断是否有库存和是否有抢购权限,如果有,立刻返回抢购成功,完成抢购。完成抢购后生成订单等耗时的操作使用rabbitmq等消息中间键做异步队列来执行。

2024-06-16 17:32:56 474

原创 面向对象设计模式准则

罗伯特·C·马丁在 21 世纪早期引入了名为「SOLID」的设计原则,指代了面向对象编程和面向对象设计的五个基本原则(也有说六个的),即为SOLIDD单一职责原则(Single Responsibility Principle)开放封闭原则(Open Closed Principle)里氏替换原则(Liskov Substitution Principle)接口隔离原则(Interface Segregation Principle)

2024-06-15 22:12:52 609

原创 php redis分布式锁

在PHP中实现分布式锁通常可以使用数据库、缓存系统(如Redis)或者其他中央存储系统来保证在分布式系统中的数据一致性与同步。这里我采用方案三,加锁和根据判断解锁都需要保持原子性,所以使用Lua脚本。方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)方案五:SET EX PX NX + 校验唯一随机值,再释放锁。方案二:SETNX + value值是(系统时间+过期时间)方案四:SET的扩展命令(SET EX PX NX)方案七:多机实现的分布式锁Redlock。

2024-06-12 16:12:38 617

原创 mysql和redis的双写一致性问题

这四种方法各有各的弊端,并不能完全保证数据一致性,采用“先写 MySQL,再删除 Redis”的策略,这种情况虽然也会存在两者不一致,但是需要满足的条件有点苛刻,所以是满足实时性条件下,能尽量满足一致性的最优解。为什么采用删除缓存而不是更新缓存,是因为高并发下产生脏数据的要求要比更新缓存的要求更多,也就是删除缓存产生脏数据的概率更小一些。按照常规思路有四种办法,1.先更新mysql数据,再更新缓存数据 2.先更新缓存数据,再更新mysql数据。采用先删除缓存,再更新数据库。

2024-06-11 20:20:03 655 1

原创 php yield使用

yield简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。yield只有在调用的时候才会执行,并不产生多余的值,比如读取一个很大的文件或者计算大量的数据时,如果直接读取很有可能内存就爆了,而yield就可以做到把数据一行行读取到php运行内存,并非一次性读取到php运行内存,这样在运行时就会节省大量的内存;就是 foreach一次,for一次。使用yield 创建一个生成器。

2024-06-11 18:46:36 273

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

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

2024-05-09 14:20:49 416

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

不可重复读是指在一个事务内,多次读取同一数据返回的结果不一致。例如,假设有两个事务C和D,C首先按照某个范围条件(如id>10 and id

2024-05-09 11:53:11 833

原创 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 1061

原创 dcat笔记

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

2024-03-30 19:55:14 405

原创 ES 嵌套对象数据问题

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

2024-03-28 12:58:34 519

原创 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 929

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

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

2024-03-27 16:54:16 255

原创 Laravel 小技巧

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

2024-03-26 16:23:10 272

原创 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 572

原创 docker安装elasticsearch

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

2024-03-24 21:31:56 292

原创 laravel faker使用详情

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

2024-03-21 11:01:49 300

原创 nginx日志统计qps

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

2024-03-19 21:22:46 1403

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

比如我给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 827

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

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

2024-03-05 14:58:42 615

原创 hyperf协程使用几种方式

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

2024-03-04 23:12:50 594

原创 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 399

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

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

2024-03-04 19:02:21 771

原创 二叉树和平衡二叉树

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

2024-03-04 12:12:23 453

原创 hyperf开发项目

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

2024-03-04 11:19:27 486

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

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

2024-03-04 11:13:31 529

原创 swoole

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

2024-03-02 22:46:49 598

原创 nginx,php-fpm

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

2024-03-02 22:30:17 1165

原创 docker构建hyperf环境

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

2024-03-01 23:11:44 1816

原创 本地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 728

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

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

2024-03-01 14:34:33 881

原创 swoole协程

【代码】swoole协程。

2024-02-28 15:02:11 605

原创 laravel8配合jwt

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

2024-02-28 11:58:46 744

原创 docker-compose 搭建laravel环境

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

2024-02-25 20:24:47 1068

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

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

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

原创 php做物联网

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

2023-05-23 17:28:46 483

空空如也

空空如也

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

TA关注的人

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