自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tiway的博客

分享工作和学习笔记

  • 博客(92)
  • 资源 (3)
  • 收藏
  • 关注

原创 SSL routines:ssl_choose_client_version:unsupported protocol

Openssl 版本高于slqsrv要求版本。

2023-05-17 15:17:15 1000

原创 YII 优雅的实现软删

大部分项目都有软删的需求,我们现项目也自己封装了一个软删除的类,但是存在不够健壮,查询数据不友好等缺陷。原来软删除Trait 类代码;以上代码为自己封装,好处是用Trait,可以随时声明软删,实现方便。但是存在一些问题如不够健壮,如只默认deleted_at 为删除字段,默认值为0等,并且对于数据查询不够友好等缺陷以下是结合第三方包及Trait的实现,不仅具备方便而且安全健壮修改Trait类因为这个第三类库的deleted()函数的删除时间默认为softDeleteAttributeValues的

2022-11-17 17:18:42 719

原创 报错信息: Method __PHP_Incomplete_Class::handle() does not exist

添加一个队列报错信息。

2022-11-09 14:18:21 395

原创 laravel 多条件结合scope查询作用域优化

最重要的是这种筛选条件可能根据需求不断的添加...那么我们是否可以优化这种情况呢…

2022-11-09 10:03:58 408

原创 微服务(四) kratos 用户服务链路追踪

go-kratos Tracing 中间件使用 OpenTelemetry 实现了链路追踪。

2022-10-25 11:51:54 1255

原创 微服务(三)kratos laravel 用户服务consul 服务注册与发现

kratos user服务实现用户注册

2022-10-24 10:42:20 550

原创 微服务(二) php laravel 用户客户端

后期有时间把用户信息全部添加一个redis 缓存简化controller,添加仓库层实现数据如果你也是用docker desk,为求方便,联系我,我将提供workspace 和php-fpm 的镜像压缩包。

2022-10-21 16:31:57 1339

原创 微服务(一) go kratos 用户服务

因为前端业务需求的多样性与敏捷性,我们可能考虑需要用php 作为client,实现数据的组装与拼接,以应对前端的多边的需求;用go 来实现server端。我们采用laravel 作为client的框架,kratos 作为server。

2022-10-20 15:32:27 674

原创 es geo实现同城短视频列表

结合es redis 实现同城视频帖列表并去重

2022-10-20 10:34:55 654

原创 整合mysql多个bool值字段,用&查询

运用mysql 的位运算整合多个bool 值的字段

2022-08-16 13:45:22 400

原创 docker 本地搭建mysql主从

如何通过docker在本地实现高可用。如何解决测试库数据实时同步到本地开发库

2022-07-27 17:50:04 430

原创 浅谈‘过早优化’

优化即根据实际的业务需求,在程序,架构以及部署方面下功夫,降低资源消耗,提升资源利用效率。有效的优化能给企业节能增效,是老板换劳斯莱斯,买别墅的制胜法宝,是编程人提升自我,改造自我的关键所在。程序员们浪费了大量的时间去思考、担心程序中非关键部分的性能,如果考虑整体代码的debug和维护的时间,则这些性能优化的开销是得不偿失的。在未得到市场反馈前,一切都是根据经验的假设,而过度的优化则会让这种假设的成本大大增加。过早优化是开发人员应该一直考虑的事情,是在日常工作中应该尽量避免的事情。...

2022-07-21 13:44:18 614

转载 《领域驱动设计之php实现》- 集成上下文【转载】

在本章中,我们将探索如何做到这一点,所以要对战略设计的见解和启发式学习做好准备。使用分布式系统用分布式系统处理很困难。把系统分成独立自主的部分有它的好处,但同时带来了复杂性。......

2022-07-20 17:26:08 229

原创 mysql 随机分页取不重复数据

即MD5(主键id)生成唯一32位字符的字段,通过mysql的substr函数随机从32位数据中截取一部分排序实现随机不重复数据分页

2022-07-15 17:37:13 2549 1

原创 区别go array,slice,map

对于phper来说map,数组都是array,今天我们我们一起研究下go的array,slice,map之间的区别与联系

2022-07-13 18:32:41 271

原创 Go语言指针

指针是一个变量,其值是另一个变量的地址,即存储器位置的直接地址。类似变量或常量一样,必须要先声明一个指针,然后才能使用它来存储任何变量地址。

2022-07-12 14:20:52 396

转载 《领域驱动设计之php实现》- 应用服务【转载】

应用层是将领域模型与查询或更改其状态的客户端分离的层。

2022-07-12 11:21:09 309

原创 hyper子查询优雅实现多表关联字段查询及排序

通过子查询的形式优雅实现关联条件查询

2022-07-11 11:50:49 856

原创 docker: Error response from daemon: OCI runtime create failed: container_linux.go:380

报错信息$ winpty docker run -v /d/Code:/var/www -p 9501:9501 -it --privileged -u root --entrypoint /bin/bash hyperf/hyperf:7.4-alpine-v3.11-swooledocker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container proces

2022-05-23 14:17:14 2502

转载 《领域驱动设计之php实现》- 仓储【转载】

为了与领域对象交互,你需要保留对它的引用。达到这个目标的途径之一就是通过创建器(creation)。或者你可以遍历关联。在面向对象程序中,对象具有与其他对象的链接(引用),这使它们易于遍历,从而有助于模型的表达能力。但这有一点很重要:你需要一种机制来检索第一个对象:聚合根。仓储作为存储位置,其检索到的对象以与存储对象完全相同的状态返回。在领域驱动设计中,每个聚合类型通常都有一个唯一的关联存储库,用于持久化和检索需求。但是,在需要共享一个聚合对象层次结构的情况下,这些类型可能共享一个存储库。只要你从仓储中

2022-05-14 11:38:19 403

转载 《领域驱动设计之php实现》- 工厂【转载】

工厂是强大的抽象。它们有助于使客户端在如何与领域交互的细节里解耦。客户端不需要了解怎么构建复杂对象和聚合,所以你可以用工厂创建整个聚合,从而保证它们的不变性。聚合根上的工厂方法工厂方法(Factory Method)模式,正如经典著作《Gang of Four》中所述,是一个创建型模式:它定义一个创建对象的接口,但将对象类型的选择权交给其子类,创建被延迟到运行时。在聚合根里增一个工厂方法隐藏了从外部客户端创建聚合的内部实现细节。这也将集成聚合的责任转移到根。在一个含有 User 实体和 Wis

2022-05-12 15:33:15 217

原创 go 创建连接池操作redis

安装go-redis 库go get github.com/gomodule/redigo/redis创建链接池package gredisimport ( "time" "github.com/gomodule/redigo/redis")var RedisConn *redis.Poolfunc Setup() error { RedisConn = &redis.Pool{ // Maximum number of idle connections in th

2022-05-11 17:06:12 899 1

转载 《领域驱动设计之php实现》- 聚合【转载】

聚合可能是领域驱动设计中最难的构建块了。它们难以理解,并且难以正确设计。但不用担心,我们会帮助你。不过,在进入聚合之前,我们首先需要深入了解一些概念:事务和并发策略。介绍如果你使用过电子商务应用,则可能已经遇到过与数据库中数据不一致有关的错误。例如,考虑一个总额为 99.99 美元的购物订单,该订单与订单中每行总金额的总和 89.99 美元不匹配。那这笔额外的 10 美元来自哪里?或者,考虑一个为影院售卖电影票的网站。有一个剧院有 100 个可用座位,并且在电影成功上映之后,每个人都在网站上等待购票

2022-05-10 15:43:19 822

原创 bitmap过滤海量重复数据

需求从海量的帖子中推荐一页帖子在首页,尽量避免用户刷到相同的帖子;需求分析1.针对用户推荐帖子2.避免重复数据3.帖子数据量巨大实现1.考虑用redis 布隆过滤器,但是因为我们可以得到帖子id是唯一的,直接用id作为hash值写入redis的bitmap ;我这边是用户只要两个月不需要看到重复的数据即可;如果是没有时间限制则去掉对应的时间限制RedisAbstract 缓存抽象类abstract class RedisAbstract{ protected $prefix =

2022-05-09 14:08:45 739

转载 《领域驱动设计之php实现》- 模块【转载】

《领域驱动设计-软件核心复杂性应对之道》 -Eric Evans当你把某些类一起放进一个模块,你正在告诉下一个要看你的设计的开发者要把他们作为一个整体进行思考。如果说模型是在讲述故事,那么模块就是其中的篇章。当遵循领域驱动设计构建应用程序的一个共识就是,把代码放到哪里。尤其当你使用 PHP 框架时,用推荐的方法来放置代码是很重要的,哪里应该放基础设施代码,以及模型中的不同概念应当怎样组织。在领域驱动设计里,有一个为此的战术模式:模块。如今,每个人都用模块来组织代码。所有语言都有一些工具来组织类和语

2022-05-06 15:53:37 233

转载 《领域驱动设计之php实现》- 领域事件【转载】

软件事件即系统中其它组件感兴趣的事物。PHP 程序员工作中普遍不使用事件,因为这不是该语言的特性。不过,现在更常见的是,新的框架和库采用它们来提供一种新的解耦,重用和加速代码的途径。领域事件是领域发生改变时相关的事件。领域事件即发生在领域内的事件,是领域专家所关心的。在领域驱动设计中,领域事件是基础构建块,它们可以:与其它界限上下文通讯提高性能和可扩展性,推进最终一致性作为历史归档记录领域事件的本质是异步通信。有关此主题的详细信息,我们推荐 Gregor Hohpe 和 Bobby Wool

2022-05-05 10:37:38 251

转载 《领域驱动设计之php实现》- 服务【转载】

软件事件即系统中其它组件感兴趣的事物。PHP 程序员工作中普遍不使用事件,因为这不是该语言的特性。不过,现在更常见的是,新的框架和库采用它们来提供一种新的解耦,重用和加速代码的途径。领域事件是领域发生改变时相关的事件。领域事件即发生在领域内的事件,是领域专家所关心的。在领域驱动设计中,领域事件是基础构建块,它们可以:与其它界限上下文通讯提高性能和可扩展性,推进最终一致性作为历史归档记录领域事件的本质是异步通信。有关此主题的详细信息,我们推荐 Gregor Hohpe 和 Bobby Wool

2022-04-27 13:46:30 216

转载 《领域驱动设计之php实现》- 服务【转载】

你已经了解什么是实体和值对象了。作为基本构建块,它们应该包含任何应用程序绝大多数的业务逻辑。然而,还有一些场景,实体和值对象并不是最好的方案。让我们看看 Eric Evans 在他的书《领域驱动设计:软件核心复杂性应对之道》中提到过的:当领域里一个重要过程或者转换不是实体或者值对象的自然责任时,则要增加一个操作到模型中作为一个单独的接口,并定义为一个服务。根据模型语言来定义接口,并确保操作名词是通用语言的一部分。使服务无状态化。因此,当有一些操作需要体现,而实体和值对象并不是最好选择时,你应该考虑将

2022-04-26 11:27:04 220

转载 《领域驱动设计之php实现》- 实体【转载】

我们已经讨论过优先将领域中所有内容作为值对象进行建模的好处。但对领域建模时,可能会有一些场景,你会发现在通用语言里的某些概念需要一根标识线。介绍对象需要标识符的一些简单例子:一个人。 人总是有一个标签,并且依照他们的名字或者身份证来说总是相同的。电子商务系统订单。在这个上下文里,随便时间的推移每个新创建的订单都有它自己的标识。这些有标识的概念有长期存在的特性。无论概念中的数据发生多少次变化,它们的标识总是相同。这些使得它们成为实体而不是值对象。就PHP实现而言,它们就是简单的类。例如,考虑下

2022-04-25 11:47:02 191

原创 一次join查询优化的历程

以下是获取关注用户的已通过审核,content_type ==2 帖子的sql ;并需要根据点赞数和评论数排序SELECT t1.*,t2.comment_total,t2.like_total,t2.collect_total,t3.nickname,t3.avater,t4.name from posts AS t1 # 连接 帖子统计信息获取点赞,评论数LEFT JOIN post_statistics as t2 on t1.id = t2.post_id # 连接 用户信息INNER J

2022-04-24 14:41:07 343

转载 《领域驱动设计之php实现》- 值对象【转载】

值对象通过使用 self 关键字,我们不会将值对象作为领域驱动设计的基本构建块,在代码中它们用于对通用语言概念进行建模。值对象不仅仅是领域中衡量,量化或者描述事物的东西。值对象可以被视为小而简单的对象 - 例如金钱或者日期范围 - 它们的相等性不是通过其标识,而是基于其持有的内容体现的。例如,产品价格可以用值对象建模。在这种情况下,它不代表一个东西,而是一个值,可以用于衡量产品的价值。这些对象的内存占用是微不足道的,无法确定(通过它们的组成部分计算)且开销极小。因此,即使表示相同的值 ,创建新实例也

2022-04-18 14:49:25 370

转载 《领域驱动设计之php实现》- 架构风格【转载】

对于构建复杂应用,一个关键点就是得有一个适合应用需求的架构设计。领域驱动设计的一个优势就是不必绑定到任何特定的架构风格之上。相反的,我们可以根据每个核心域内的限界上下文自由选择最佳的架构,限界上下文同时为每个特定领域问题提供了丰富多彩的架构选择。例如,一个订单系统可以使用事件源(Event Sourcing)来追踪所有不同订单的操作;一个产品目录服务可以使用 CQRS 来暴露产品细节给不同客户端;一个内容管理系统可以使用一般的六边形架构来暴露如博客(blogs),静态页等服务。从传统守旧派的 PHP 代

2022-04-15 10:05:41 521

原创 DDD部分应用之项目重构demo

最近一直在学习DDD相关内容,通过近几个月的学习也确实感觉到我们现有项目的一些缺陷。项目介绍目前项目项目架构项目框架:YII21.在controller 层得到对应版本号映射对应的service,每个版本对应一个servicepublic function __construct($id, $module, $config = []) { parent::__construct($id, $module, $config); //获取对应service版本

2022-04-14 11:08:38 2194

转载 《领域驱动设计之php实现》-入门(译)

Getting Started with Domain Driven Design不用大惊小怪,如果你已经读过 Vaughn Vernon 和 Eric Evans 著作里的这些主题,你可能会很熟悉我们讲的是什么,因为我们大量借鉴了他们的定义和解释。领域驱动设计(DDD)是一种帮助我们理解和构建软件模型设计的方法。它提供了战略和战术模型工具来帮助我们设计高质量的软件从而达到我们的业务目标本书的主要目的是向你展示领域驱动设计战略模式的 PHP 代码实例。如果你想了解更多战略模式和领域驱动设计的核心,你最

2022-04-06 15:44:45 323

原创 go package学习笔记

go package包用于组织 Go 源代码以获得更好的可重用性和可读性。包是位于同一目录中的 Go 源文件的集合。包提供了代码划分,因此很容易维护 Go 项目包(package)是多个 Go 源码的集合,是一种高级的代码复用方案,像 fmt、os、io 等这样具有常用功能的内置包在 Go语言中有 150 个以上,它们被称为标准库,大部分(一些底层的除外)内置于 Go 本身。包要求在同一个目录下的所有文件的第一行添加如下代码,以标记该文件归属的包:package 包名每个可执行的 Go 应用程

2022-03-07 14:55:40 327

原创 正确认识自己和定位自己

从学校出来在职场中摸爬滚打这么多年,分享下我的个人职场经验,也是自我勉励吧。希望我们大家在工作中都能在工作中快乐的实现自我价值作为发量代言人,咱们面临的最具挑战性的问题之一与管理经理和他/她的期望有关。你的经理没有给予你应有的尊重和重视。你的一位同僚没有发表意见,他总是能够收到关注与采纳。你和你的经理之间发生了一些误会,甚至于冷战。从过去几年开始,你的经理没有考虑过你的升职或薪水调整。你认为你的经理能力不够,甚至自己完全有能力代替ta。不管你提供什么,你仍然必须得到负面反馈。由于你头发

2022-02-28 15:38:08 422

原创 Go Modules 学习笔记

Go Modulesgo modules是 golang 1.11引入的新特性。模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。GO111MODULEgolang 1.11还引入了一个名为的新envGO111MODULE=off 时,go get 将以旧方式运行,它将下载 $GOPATH/src 文件夹中的依赖项GO111MODU

2022-02-23 16:02:29 213

原创 关于php类常量与静态变量

关于类常量与类变量// 处理状态:0=未处理,1=已处理,2=无需处理 const DEAL_STATUS_UNTREATED = 0; // 未处理 const DEAL_STATUS_PROCESSED = 1; // 已处理 const DEAL_STATUS_NEED_NOT = 2; // 无需处理 const DEAL_STATUS_MAP = [ self::DEAL_STATUS_UNTREATED => '未处理',

2022-02-22 15:33:50 510

原创 gobee generate api 链接信息链接数据库创建项目报错

现象gobee根据已有的数据库创建项目bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"]报错:______| ___ \| |_/ / ___ ___| ___ \ / _ \ / _ \| |_/ /| __/| __/\____/ \___| \___| v1.12.02021/08/31 18:03:19 INFO

2021-12-01 16:34:07 209

原创 yii2 aftersave事件时间回滚会触发吗

yii2 aftersave事件时间回滚会触发吗会在命令行验证\commands\TestController.phppublic function actionTest() { $tran = PaymentBillRepository::getDb()->beginTransaction(); try { $account = User::findOne(4); $account->name

2021-12-01 16:30:44 344

EmptyExtension.zip

phpcpp 空扩展包demo

2021-06-29

go1.16.4.darwin-amd64.pkg

mac-go1.16.4

2021-05-18

go1.16.4.windows-amd64.msi

window-go1.16.4

2021-05-18

空空如也

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

TA关注的人

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