自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 channel 实现互斥锁

channel 互斥锁

2023-01-09 16:48:56 206

原创 mongo 笔记

在以往的关系型数据库(如Mysql),使用表和列来对数据进行存储,进行数据查询操作。但是这样有一个弊端就是 1. 多表查询会比较复杂。2.对数据类型要求严格,如果需要加字段会稍微麻烦一些。mongo 是以数组或者对象来对数据进行存储,并且还可以嵌套。

2021-10-21 14:50:27 211

原创 zsh 好用的配置

配置包含主题,显示以及插件防止 copy 的时候覆盖已存在的文件, 带上 i 选项,文件已存在的时候,会提示,需要确认才能 copyalias cp="cp -i"rm命令会直接删除文件,而不是移到废纸篓。所以使用 rm 来代替 trash 命令trash下载地址:trash安装方式: npm install --global trash-cli使用别名来替换: alias rm="trash"cat某个文件,可以在终端直接输出文件内容,bat 相比 cat 增加了行号和颜色高亮

2021-06-18 16:01:29 326

原创 gin 读取配置文件

需求:对于配置文件不要直接在代码中进行定义和使用,而是单独放到配置文件的目录中,以便区分环境使用不同的配置。分离前代码:database, err := sqlx.Open("mysql", "root:XXXX@tcp(127.0.0.1:3306)/test")修改为读取配置文件创建文件 config/main.tomlapp_name = "awesome web"# possible values: DEBUG, INFO, WARNING, ERROR, FATALlog.

2021-05-24 19:26:09 1626

原创 gin 框架将路由文件单独处理

单独处理路由部分代码在刚接触gin框架时,我们会直接在main.go 文件中定义接口,一个文件解决一切,不过这种设计是不符合设计原则的,我们需要将路由层,逻辑层,数据库交互层分离开。package mainimport ( "net/http" "github.com/gin-gonic/gin")func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.Str

2021-05-21 17:16:24 610

原创 gin 数据绑定

gin 框架中使用数据绑定定义请求结构体//router.gopackage routertype Person struct { Id int `form:"id"` //Id 首字母大写,外部才可以访问 Name string `form:"name"` //如果接口参数是全小写,则加上form参数}在函数中进行数据绑定// main.gor.GET("/", func(c *gin.Context) { var jsons router.Person e

2021-05-20 19:49:59 212

原创 go 连接redis

package mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println("conn redis failed,", err) return } c.Do("set","gin_demo","test_gin", "ex",10*60) fmt.Pri

2021-04-06 14:38:47 92

原创 YII2 控制器中不能使用大写的问题

需求: 请求的接口为: getServerAddr问题: 请求的地址只有一个,不符合 控制器名/方法名 的格式。解决方案, 设置默认方法, public $defaultAction = "Index";这样请求 /getServerAddr,实际请求的应该就是/getServerAddr/index经过测试,报错 404, 检查发现是由于控制器的大小写引起的,只有请求地址为:get-server-addr 才会映射到 getServerAddrController 中,看了一下网上的解决方

2021-03-29 14:47:55 263

原创 go包管理代理网址无法访问

go get -u github.com/kardianos/govendor ## 执行命令go get: module github.com/kardianos/govendor: Get "https://proxy.golang.org/github.com/kardianos/govendor/@v/list": dial tcp 172.217.160.81:443: i/o timeout网上找了个能用的代理地址:https://goproxy.cn执行命令:go env -w

2021-03-23 13:57:18 80

原创 redis 使用setnx实现锁

在token失效时,要重新请求服务器生成新的token,如果不使用锁的话,在并发的情况下,会有很多请求同时请求服务器。这里提供一个使用redis来实现锁的。redis的setnx :当键不存在时插入成功,存在时插入失败。插入成功即拿到锁。查询资料发现这样一段代码:<?php$ok = $redis->set($key, $value, array('nx', 'ex' => $ttl));if ($ok) { $cache->update(); $re

2021-03-02 14:27:27 405

原创 mac 安装Yapi

手动进行接口测试是一件很麻烦的事情。所以需要有一个高效,易用的管理平台,比如Yapi首先安装,官网部署链接:官方部署Yapi地址在按照教程进行安装后发现有些问题,就是这里面没有node和mongo的安装教程。自己在安装node 之后,有很多的报错情况。最后发现了一篇宝藏教程:小伙伴总结的安装教程地址根据这个教程很快就安装好了,但是在启动的时候还是报错。根据错误是由于node的版本过高。因为我直接下载的就是最新稳定版。这里要降低node的版本。nvm install 12.14 //这里我

2021-03-01 15:53:02 469

原创 ssh通过证书登陆服务器

之前服务器配置好之后,都是通过账号密码登陆的。这种登陆方式可能会被暴力破解。在密码的安全性不高的情况下。为了安全起见,使用证书登陆。可以刚好的防护服务器。step1: 本机生成公钥,私钥。step2: 将公钥复制到服务器。 具体做法百度。step3: 打开 ~/.ssh/config 文件,添加主机信息。如:Host serverCheckHostIP noHostName server.comUser rootPort 22直接使用ssh登陆:ssh server...

2021-01-29 10:43:12 146

原创 php 拉取 gz 文件进行解压后保存到自己的服务器

需求,将平台生成的文件拉取回来,进行数据分析通过接口请求,发现返回的是一个 .csv.gz 格式的文件。所以要对文件进行解压,网上查到的解压代:function unzip_gz($gz_file){ $buffer_size = 4096; // read 4kb at a time $out_file_name = str_replace('.gz', '', $gz_file); $file = gzopen($gz_file, 'rb'); $ou.

2021-01-27 10:24:00 271 1

原创 yii 配置文件根据模式分类

在刚下载的yii 框架源码中,配置文件是没有进行分类的。我想在index中定义模式(dev,demo,online)。所以希望根据自己的定义读取相应的配置。# index.php 修改如下define('ENVIRONMENT', 'demo'); //这里可以进行我们环境的定义$config = require(__DIR__ . '/../config/'.ENVIRONMENT.'/web.php');在config 目录下创建新的目录文件。如下图:运行后发现报错Unable to

2021-01-21 16:13:26 128

原创 PHP二维数组取差集

二维数组取差集 和 数组下标从0开始需求:获取可以使用的坐标 // $arr1:所有坐标 $arr2:不能使用的坐标错误操作: array_diff()使用 array_diff() 获取差集,返回空数组。这个函数只能用于一维数组,不能用于二维数组。正确操作$arr3 = array_filter($arr1, function($v) use ($arr2) { return ! in_array($v, $arr2);});结果集的数组下标从0开始上面的方法获取到数组的差集,

2020-11-03 11:58:23 855

原创 laravel 之 Unit 单元测试

在进行项目开发的时候,经常会对我们的类,函数,http请求等进行测试,看结果是否符合我们的预期。对于http 请求我们通常会使用postman 来进行测试。那么如果我们需要测试某一个类,某一个方法,需要怎么办?可能我们会这样做:在类或者方法调用后对结果进行打印,然后使用postman 去请求对应接口。这样做有那些坏处呢:可能会在你的代码中出现很多var_dump() 代码。在你调用该类/方法 之前有很多步骤是你不需要的。(比如在调用之前对数据库进行了相关操作)。造成脏数据。由于以上原

2020-06-28 17:24:31 707

原创 前端(JS)与后端(PHP) 通过 RSA 实现加解密

在项目开发过程中,为了安全起见,通常不能以明文形式传递敏感信息,容易被截获,所以引入RSA。1. 生成公钥和私钥在终端(基于 Unix 的操作系统)中输入以下内容。生成私钥openssl genrsa -out rsa_1024_priv.pem 1024通过执行以下命令获取公钥openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem可以使用 cat 命令来查看cat rsa_1024_priv.pem

2020-06-16 10:37:50 1034

原创 shell 脚本提示权限不够的几种解决方式

创建一个 shell 文件。vim test.sh#! /bin/bashecho 'hello world';执行该脚本文件会报权限不足的错误[root@root ~]# ./test.sh-bash: ./test.sh: 权限不够解决方式1)添加可执行权限 chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本2)使用命令 source test.sh 执行3)使用命令 sh test.sh 执行...

2020-06-09 15:53:46 10880 3

原创 ES 简单操作指令

创建数据PUT ip:9200/index/type/id{ "user" : "张三", "title" : "工程师", "desc" : "数据库管理,软件开发"}POST ip:9200/index/type 这样会自动生成id 是一串随机字符串查看数据GET ip:9200/index/type/id 查看单条数据GET ip:9200/index/type/_search 查看所有type数据可以根据 found 字段来判断查询是否成功。更..

2020-06-09 14:25:41 294

原创 开发中遇到的越权问题

越权问题:描述:在使用 api 请求订单详情接口时,一般我们是传递订单id 来获取该订单的内容。但是会存在一个问题:当用户手动去变更订单id 参数来请求接口数据时,会获取到不属于他的数据,这就产生了越权。解决办法: 根据订单id 查询到对应的user_id 对当前登录用户的id 和查询到的user_id 进行一致性判断,如果不一致,则返回操作越权。示例代码:public function orderAuth($order_id){ $userInfo = new User();

2020-05-29 18:14:40 506

原创 laravel 中字段格式处理

如果查询结果集中的某一个字段需要做相同的格式处理,之前的处理方法: $order = \DB::table('order') ->where('status',1) ->get(); foreach($order as &$val){ $val->price = $val->price/100; }这里举一个简单的示例,在laravel 中,我们应当这样做:在对应的Order 模型里定义public function getPriceNameA

2020-05-27 23:14:25 261

原创 laravel 中查看执行的sql 语句

在laravel 框架中,一般使用链式操作来对数据库进行相关的增删改查。那么如何查看我们执行的sql 呢?对于查询语句来说; 我们可以在链式操作后面加上->toSql();来打印执行的sql 语句。但是,对于其他的就不适用了。所以可以采用以下的办法:DB::enableQueryLog();UserAddress::where('id',1)->decrement('last_used_at',1);return response()->json(DB::getQueryLo

2020-05-27 17:41:20 775

原创 并发情况下产品超卖

在并发时减库存不能简单地通过update(['stock' => stock - $amount])来操作,在高并发的情况下会有问题。$amount = $data['amount '];update product set stock = stock - $amount where id = $id and stock >= $amount这样可以保证不会出现执行之后 stock 值为负数的情况,也就避免了超卖的问题。根据返回的受影响行数来判断是否执行成功。...

2020-05-27 16:05:42 150

原创 laravel 中使用 Hash::make() 对用户密码进行加密

laravel 中使用 Hash::make() 对用户密码进行加密问题描述: 在调试中发现使用 Hash:make($password) 对用户密码进行加密;在验证时发现对于相同的password 会出现不同的加密结果,那么加密之后进行对比肯定是不相等的。看了下实现方式: 使用 Hash::check($password,$userInfo->password)这种方式来对密码进行校验,不能使用 Hash:make($password) == $userInfo->password来

2020-05-24 18:45:48 2503

原创 使用 Redis 实现延时队列

使用 Redis 实现延时队列场景描述:订单在下单之后一定时间内没有支付,则关闭该订单实现方式:用户下单-> 生成订单记录-> 将订单信息推入延时队列任务中-> 到时间检查订单的支付状态(未支付则关闭订单)使用redis 实现延时队列 的功能思路: 用户在调用延时任务的方法时,需要传入两个参数(任务脚本,延时时间)。通过redis 有序集合来存储执行时间,每次取出第一个元素,执行时间与当前时间对比,如果小于等于当前时间则执行改脚本。并且移除改元素。由于redis 集合具

2020-05-23 18:19:08 319

原创 mysql update 报错

> 问题描述You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec> 软件:Mysql Workbench```update table...

2020-05-22 18:18:00 221

原创 Failed to get D-Bus connection: Operation not permitted

docker中使用命令systemctl 命令时会报错,错误信息:Failed to get D-Bus connection: Operation not permitted。原因:在centos7的docker容器里面不能用service启动服务。报这个错的原因是dbus-daemon没能启动。systemctl并不是不能使用。将CMD或者entrypoint设置为/usr/sbin/...

2020-04-23 16:59:32 4392

原创 使用 supervisor 来管理 kafka进程

由于在 cli 模式下启动,停止 kafka 和zookpeer 进程命令行比较繁琐,所以推荐使用supervisor 来对进程进行管理。安装: centos 使用 yum 进行supervisor 安装,其他系统根据自己安装方式。启动命令:systemctl start supervisord查找supervisord.conf 的安装位置,使用find / -name supervis...

2020-04-22 14:26:23 782

原创 php 生产kafka 不生效问题

记录一下php 调用 kafka 生产者代码但是消费者端口收不到数据的情况PHP代码如下:<?php$objRdKafka = new RdKafka\Producer();$objRdKafka->addBrokers("localhost:9092");$oObjTopic = $objRdKafka->newTopic("demo");$oObjTopic-&g...

2020-04-21 18:28:03 1011

原创 kafka 入门

简介kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。Kafka安装配置注: 新版本的kafka 里面集成了zookeeper ,所以不需要再单独下载安装。下载wget https://mirror.bit.edu.cn/apache/kafka/2.5.0...

2020-04-19 10:29:35 429

原创 记录一次 laravel 项目队列拥堵的问题

项目的队列使用database 作为队列驱动,在任务入队之后发现并未生效。所以对问题进行排查。首先查看 failed_jobs 表,发现并没有失败的任务生成记录,然后查看jobs 表,发现确实已经入了 jobs 表的记录。查看项目日志,如下Numeric value out of range: 1264 Out of range value for column 'attempts'...

2020-04-02 15:03:49 1176

原创 七牛云 时间戳防盗链

基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间、签名通过一定的方式传递给 CDN 服务器作为判定依据,CDN 边缘节点根据约定的算法判断来访URL是否有访问权限。通过,执行下一步;不通过,响应 HTTP status code 403。签名参数 T:URL 过期时间。按 unix_time 的 16进制小写形式表示。 如2015-08-01 00:00:00 –>...

2020-04-01 10:35:25 598

原创 Nginx 查看接口请求内容

遇到一个接口报错的问题,需要查看接口的参数。方法:1. cat 命令打开NGINX 的配置文件,找到成功日志 access.log 的位置。2.打开日志文件,因为日志文件较大,所以尽量不要直接使用vim 或 cat 命令,可以搭配grep来查看:如:接口名为:payLinetail -f access.log | grep "payLine"结果入下:- [...

2020-03-26 18:23:30 4480

原创 mysql case用法 在sql 进行分支处理

需求:两张表,线上课程表 course 表和线下表 classes 表。还有一张订单表。订单表中有一个字段platform 表示课程类型:0 表示线下, 1表示线上。需要关联查询相关订单信息。问题: 如果分开查询,会导致排序的话会很麻烦,所以还是希望在sql 语句中处理。解决:使用 sql 中的 case 来解决。SELECT a.id as orderId, cas...

2020-03-17 11:36:31 171

原创 crontab 脚本测试demo

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。语法crontab(选项)(参数)选项-e:编辑该用户的计时器设置;-l:列出该用户的计时器设置;-r:删除该用...

2020-03-11 09:54:56 956

原创 Mac iTerm ssh 连接服务器

mac 的iTerm 终端连接服务器命令ssh [email protected] 22ssh 用户名@ip地址 -p 端口号回车输入密码,即可登陆到服务器。如果不想每次都输入密码的话,可以:免密登陆接下来玩一下高级一点的,创建一个shell 脚本,把登陆服务器的代码写在脚本里,每次执行该脚本就可以。1. 创建文件cd ~touch connectS...

2020-03-08 16:50:45 273

原创 laravel 在原值基础上批量更新字段的值

修改order 表的deal_pice 字段的值,所有小于0的值修改为其相反数。Order::where('deal_pice','<',0)->update(['deal_pice'=>DB::raw('0- deal_pice ')])

2019-11-26 17:29:04 1516

原创 guzzle 使用 json 作为主体请求接口

在使用第三方插件 Guzzle 请求微信素材管理接口:接口说明http请求方式: POSThttps://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN#参数{ "type":TYPE, "offset":OFFSET, "count":COUNT...

2019-10-31 15:34:59 2136 1

原创 Laravel orWhere条件

场景描述需要根据三个条件去查询结果集,三个条件的关系是A and (B or C),B条件和C条件有交集,需要取出他两的并集。如果用户登录(UID存在),条件为A and (B or C),用户未登录,查询条件为:A and B错误代码1$uid = $params['uid']??0;$comment = DB::table('users')->where('A', '=', ...

2019-10-16 17:38:06 517

原创 Laravel 批量更新

Laravel 简单的批量更新数据需求:将order 表的 status 字段更新为2,条件是 id 在 arr 数组中的行。$orderId = [1,2,4,6,8];\DB::table('order')->whereIn('id', $orderId)->update(['status' => 2]);完成简单的数据批量更新。...

2019-10-11 14:38:02 142

jsencrypt.js

jsencrypt.js 文件,用于前端对RSA 进行加解密操作。实现前端与后端对统一资源的加解密。保证信息安全。

2020-06-16

空空如也

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

TA关注的人

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