自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Srodong的博客

来敲点代码吧~

  • 博客(50)
  • 收藏
  • 关注

原创 redis 用scan批量删除大量key

redis 用scan

2023-02-07 13:45:40 1189

原创 go并发协程中的通道使用

//计数器var w sync.WaitGroupfunc Xiecheng(c *gin.Context) { //是一个有限长队列 超过10个就会报错 ch := make(chan int, 10) for i := 0; i < 10; i++ { //计数器 减一 w.Add(1) //协程 go getAdd(i, ch) } w.Wait() //所有协程执行完了,数据都写入了 //关闭通道 close(ch) for v := range...

2021-03-04 15:08:56 316 1

原创 go协程中的安全map使用

为什么要用安全map?是go协程中才会使用,Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。问题来了,这么安逸的 数据结构,它不是协程安全的 !当多个 协程同时对一个map 进行 读写时,会抛出致命错误。go 语言中有一个其他的工具 sync.WaitGroup计数器。WaitGroup对象内部有个计数器, 最初从0 开始, 他有3个方法 Add() , Done(), Wait()用来控制计数器的数量。 Add(n) 把计数器设.

2021-03-04 14:12:43 762 1

原创 go 进行微信支付 (不采用第三方包)

拉起微信支付和回调 直接上代码调用支付pubPay := pay.WxPubPay{} openid := userInfo["openid"] pubPay = pay.WxPubPay{AppId: configs.Conf.WechatPay.AppID, MchId: configs.Conf.WechatPay.Mchid, AppKey: configs.Conf.WechatPay.Apikey} var order = pay.UnifiedOrder{OrderN..

2020-10-17 14:26:30 1483 1

原创 php 用curl进行get,post请求。header头里加参数

curlget请求 /** * @Notes:curl 进行get请求 * @Interface curl_get * @param $url * @return bool|string * @author: Dong * @Time: 2020/10/17 13:27 */ function curl_get($url){ $curl = curl_init(); // 启动一个CURL会话 .

2020-10-17 13:44:37 1152 1

原创 go是元素否在数组里 获取字符串的MD5 获取昨天的时间 数组转为字符串 字符串转为数组

// @Author Dong// @Description //判断是元素否在数组里// @Date 9:32 2020/8/19// @returnfunc InArray(item string, items []string) bool { for _, eachItem := range items { if eachItem == item { return true } } return false}//time.Now().Format("2006-01-.

2020-08-26 14:30:56 154

原创 GO 获得当前月,当前周,当前季度的初始和结束日期

/** * @Author: Dong * @Description:获得当前月,当前周,当前季度的初始和结束日期 * @File: tools * @Date: 2020/08/06 16:24 */package toolsimport ( "strconv" "time")/** * @Author Dong * @Description 获得当前月的初始和结束日期 * @Date 16:29 2020/8/6 * @Param * @param null *.

2020-08-06 16:35:21 1056 2

原创 Docker常用命令

基础操作:docker images查看镜像信息列表 镜像是静态的docker ps -a查看运行中的所有容器docker search [imagename] 搜索docker镜像信息docker pull [images]:[version]从dockerhub拉取指定镜像docker run -p 8000:80 -tdi --privilege...

2020-03-29 17:03:31 177

原创 Memcache、redis和mongodb的区别及应用场景

memcache :内存缓存优点: 1、高性能、效率相对最高缺点: 1、只支持简单的数据结构 string一个value最大只支持1MB,而Redis最大支持512MB 2、不支持数据持久化 3、不支持数据同步应用场景: 1、减轻数据库负载,提升性能,适合多读少写的...

2020-03-24 15:33:18 336

转载 php内存管理机制与垃圾回收机制

一、内存管理机制先看一段代码:/内存管理机制var_dump(memory_get_usage());//获取内存方法,加上true返回实际内存,不加则返回表现内存$a = "laruence";var_dump(memory_get_usage());unset($a);var_dump(memory_get_usage());//输出(在我的个人电脑上, 可能会因为系统,...

2020-03-23 13:47:48 225

原创 Docker部署php环境运行web项目

docker部署web项目需要用到几个服务:php,nginx,mysqldocker下载镜像速度太慢的话需要修改一下配置主要是因为国家把docker国外镜像hub封掉了,导致镜像pull不下来,为此,改用国内的镜像# cat /etc/docker/daemon.json { "registry-mirrors": ["https://75oltije.mirror.aliy...

2020-03-22 21:19:46 9988 2

原创 虚拟机下CentOS7安装Docker

Dockerdocker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。Docker和VM虚拟机的区别VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;Container(Docker容器),在宿主机器...

2020-03-22 16:01:47 3430

原创 VMware下新建虚拟机CentOS7

CentOS 7镜像下载官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/或者进入阿里云(http://mirrors.aliyun.com/centos/7/isos/x86_64/)站点,选择CentOS-7-x86_64-DVD-1908.iso下载各个版本的ISO镜像文件说明:CentOS-7-x86_...

2020-03-22 15:33:11 1087

原创 VMware虚拟机安装

VMWare (Virtual Machine ware)是一个“虚拟PC”软件公司.它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切...

2020-03-22 15:00:19 507

原创 php依赖注入,和工厂模式不同点。

依赖注入说这个话题之前先讲一个比较高端的思想--'依赖倒置原则'"依赖倒置是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高。而依赖倒置原则的思想是,上层不应该依赖下层,应依赖接口。意为上层代码定义接口,下层代码实现该接口,从而使得下层依赖于上层接口,降低耦合度,提高系统弹性"上面的解释有点虚,下面我们以实际...

2020-03-17 15:24:46 723

原创 thinkphp5 安装,路由默认模块名

thinkphp5 安装打开thinkphp的官网 百度搜索thinkphp。将下载好的文件解压到项目下然后配置域名 注意tp5的入口文件是"public".默认模块名thinkphp5的默认打开的是index模块下的index控制器下的index方法可以在public文件下的index.php文件中添加define('BIND_MODUL...

2019-11-01 08:33:19 978

原创 thinkphp5数据查询

tp5.0的手册https://www.kancloud.cn/manual/thinkphp5/118008tp5.0的目录结构要增删改查首先要连接数据库,所以要配置数据库 在applica下的database.php下为了调试错误可以把配置里的app_debug改为true在index下进行数据库查询 注意用Db::table这种数据库查询时候要use think...

2019-10-31 17:17:23 555

原创 mysql四种语言和常用查询语句

用一个sql语句查询出发表留言数量大于10条的用户名及其留言数量,查询结果按文章数量降序排列参考答案:用户表结构如下: 表名 user 字段名 字段说明 字段类型 索引 user_id 用...

2019-10-10 15:56:08 671

原创 php实现极光消息推送

首先在极光注册一个账号,然后创建一个应用,需要上传应用名称和图标,然后下一把上传包名上传成功后在设置里拿到appkey和masterSecret 上传后可以下一个demo做测试RegId 就是registration_id 高级功能里可以设置别名和标签极光推送的文档https://docs.jiguang.cn/jpush/server/push/rest_api...

2019-08-05 15:40:27 1906

原创 索引无法应用的情况,隐式类型转换,隐式字符编码转换

索引无法应用的情况条件字段函数操作select count(*) from test where month(modified)=7;如果对字段做了函数计算,就用不上索引了,这是 MySQL 的规定。对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。MySQL 无法再使用索引快速定位功能,而只能使用全索引扫描。隐式类型转换selec...

2019-07-26 15:36:19 2302

原创 MySQL中sql语句count(*),orderby,随机数据展示。

count(*)这么慢,我该怎么办?MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。这里需要注意的是这是说没有过滤条件的 count(*),如果加了 where 条件的话,MyISAM 表也是不能返回得这么快的。...

2019-07-02 16:11:48 5258

原创 MySQL的索引方面问题,刷脏页,重建表。

优化器怎么选择索引而优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。在数据库里面,扫描行数是影响执行代价的因素之一。扫描的行数越少,意味着访问磁盘数据的次数越少,消耗的 CPU 资源越少。当然,扫描行数并不是唯一的判断标准,优化器还会结合是否使用临时表、是否排序等因素进行综合判断。扫描行数是怎么判断的?MySQL 在真正开始执行语句之前,并不能精确地知道满足...

2019-06-27 14:57:13 1104

原创 MySQL怎么执行的?mysql的索引,mysql中的锁。

一条sql语句是怎么执行的。第一步 连接数据库 连接器负责跟客户端建立连接、获取权限、维持和管理连接第二步 查询缓存MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中 (MySQL8.0取消了缓存机制)第三步 分析器 对sql语句进行解析第三步 优化器 会考虑用哪个索...

2019-06-03 15:53:03 442

原创 php设计模式,单例模式,工厂模式,观察者模式

单例模式单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。所有的单例模式至少拥有以下几点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。当然还要有一个私有的clone方法,防止克隆;就是通常说的三私一公。<?...

2019-05-14 10:43:53 342

原创 linux常用命令和vim基本命令

linux常用命令linux切换用户 $ 为普通用户su root 切换为root用户 输入 su root 后会让你输入密码 输入密码后 # 就代表你是超级用户了 > su - //切换为超级管理员root用户(账号和权限都是root) > su - root //与上边指令效果一直 > su root //账号...

2019-04-13 20:22:04 416

原创 MySQL唯一索引和普通索引运行原理和使用选择

普通索引这是最基本的索引类型,而且它没有唯一性之类的限制。唯一性索引这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。这两种索引的运行原理查询过程对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足条件的记录。对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索...

2019-03-27 11:43:57 6653 4

转载 MySQL可重复读事务隔离具体是怎么实现的?

事务的启动会有的操作 事务的隔离等级有四种,现在说默认的可重复读,可重复读就是一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。https://blog.csdn.net/Srodong/article/details/88688084 事务的隔离等级 可重复读隔离级别的事务启动的时候会创建一个视图 ...

2019-03-26 16:25:43 2162 8

原创 MySQL事务的启动和实现

事务的实现之前的文章说过事务隔离等级 https://blog.csdn.net/Srodong/article/details/88688084现在说说事务等级为“可重复读”的事务怎么是实现的在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就...

2019-03-26 14:40:20 3236

原创 MySQL的预处理语句和php下使用

MySQL的预处理语句预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。不带参数预处理准备预处理语句:prepare语句名称 from “预处理的sql语句”;prepare sql_y from "...

2019-03-21 11:10:41 431

原创 MySQL四大特性与事务隔离等级

事务的隔离级别在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。InnoDB存储引擎提供事务的隔离级别有 读未提交(Read uncommitted)、读提交(Read committed)、可重复读(Repeatable read)和串行化(Serializable )。读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。读提交是指,一个事务提交之...

2019-03-20 15:10:53 411

原创 php 遍历文件夹里面所有文件及文件夹

代码如下: function getFiles($dir){ if(is_dir($dir)){ //判断文件是否是目录。 $files = array(); if($handle = opendir($dir)){ //打开一个目录,获取目录句柄资源 while ( ($file = readdir($handle)) !== ...

2019-03-20 11:16:38 838

原创 php四种算法排序详解(冒泡排序、选择排序、插入排序、快速排序)

冒泡排序思路分析:前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。所以每一次循环就将确认一个最大值放在数组尾部。测试运行时间(0.000331)$arr=array(1,43,54,62,21,66,32,78,36,76,39); 长度为11function sortArray($...

2019-03-19 19:30:53 312

原创 php下用redis解决秒杀超卖问题

秒杀超卖问题,就是有一个商品抢购活动,一个商品假如有100件库存,但是在抢购时有200人来抢购,这时就会并发,原本只有100的库存但是抢购的人过多,就会发生数据库里原本只有100的库存但是库存为0的时候还会有人提交成功,这就是超卖。 今天简单的用redis的队列来解决超卖问题。因为redis有list类型,list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加...

2019-03-19 11:15:51 5948 6

原创 ThinkPHP5与单元测试PHPUnit使用

PHPUnit是一个用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。单元测试可以使用任意一段已经写好的测试代码,也可以使用一些已经存在的测试框架,比如JUnit、PHPUnit或者Cantata+...

2019-03-18 16:17:53 4399 2

原创 thinkphp5 使用ElasticSearch 做搜索

一,安装Java SE环境在安装Elasticsearch引擎之前,必须安装ES需要的软件环境,安装Java JDK和配置JAVA_HOME环境变量:1,从https://www.oracle.com/technetwork/java/javase/downloads/index.html下载和安装Java SE开发包,我下载的是最新版本如图:ElasticSearch对JRE的版...

2019-03-17 17:49:08 10688 3

原创 sphinx的安装和php下使用

一.sphinx1. 介绍sphinx本身是一个中文检索索引技术mysql索引: 主键、唯一、普通、全文(match/agaisnt)sphinx是俄罗斯人开发一款速度、效率非常高的索引技术sphinx是来替代mysql全文索引的mysql本身的全文索引技术特性表现一般,一般数据库使用全文索引都不是使用本身的,都需要借助第3方索引技术支持,php-&gt;mysql-&gt...

2019-03-14 09:26:16 657

原创 thinkphp5 使用 MongoDB

安装php-mongo拓展第一步:根据php版本,ts还是nts,vc6还是vc9,php版本x86还是x64,进行选择对应的拓展版本第二步:放置拓展文件到php的ext拓展目录第三步:修改php.ini配置文件,然后重启服务重启apache服务第四步:查看是否安装成功mongo拓展,打印phpinfo查看操作原理安装了mongo拓展之后,通过...

2019-03-13 14:47:00 4860

原创 MongoDB 的安装和使用

MongoDB介绍产品特点1)存储数据量大适合存储数据量比较的数据,不太重要的数据。适合存储日志信息,评论·······2)关系数据库需要提前设计,mongodb 不需要提前设计存储性单表可以存储pb级别的数据1024b = 1kb1024kb = 1mb1024mb = 1gb1024gb = 1tb1024tb = 1pbmysql 单表...

2019-03-13 11:06:03 235

原创 Mysql优化三(读写分离、主从复制)

主服务器负责写入数据,从服务器复制主服务器数据。主从复制:从服务器复制主服务器数据读写分离:不同的服务器,进行不同的操作,专门写的服务器,专门读的服务器,把读写操作,分配不同的服务器上。主从复制使用范围:主从复制之后,从服务器数据备份了主服务器的数据,所以从服务器可以作为备份数据的服务器 主从复制之后,为了实现业务上的读写分离操作从服务器多于主服务器mysql实现主从复制,...

2019-03-12 21:31:50 739

原创 MySQL优化二(索引、缓存、分区分表、慢查询日志)

索引1.什么是索引?正常查询数据表操作,需要遍历扫描整个表数据。索引是一种结构,里面有相对应的算法。可以保证速度更快的查询出来。就是把建立索引的字段,单独存储起来,对应存储字段和对应的真实数据文件存储的物理地址。比如:公交站牌的上的站点数据,就是一个索引,可以帮助找到对应的站点信息办公大楼的门牌索引,可以更快找到对应的公司办公地点书的目录所记录的页数,也是一个索引,可以...

2019-03-11 17:09:20 1041

空空如也

空空如也

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

TA关注的人

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