<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[php_lzr的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/php_lzr</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; php_lzr]]></copyright><item><title><![CDATA[后端程序员必备：书写高质量SQL的30条建议]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/125502978</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/125502978</guid><author>php_lzr</author><pubDate>Tue, 28 Jun 2022 15:22:46 +0800</pubDate><description><![CDATA[sql 优化]]></description><category></category></item><item><title><![CDATA[订单过期 自动取消实现方案]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/125168380</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/125168380</guid><author>php_lzr</author><pubDate>Tue, 07 Jun 2022 16:45:07 +0800</pubDate><description><![CDATA[在电商、支付等领域，往往会有这样的场景，用户下单后放弃支付了，那这笔订单会在指定的时间段后进行关闭操作，细心的你一定发现了像某宝、某东都有这样的逻辑，而且时间很准确，误差在1s内；那他们是怎么实现的呢？一般的做法有如下几种定时任务关闭订单rocketmq延迟队列rabbitmq死信队列时间轮算法redis过期监听一、定时任务关闭订单（最low)...]]></description><category></category></item><item><title><![CDATA[Redis键空间通知]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/123890304</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/123890304</guid><author>php_lzr</author><pubDate>Fri, 01 Apr 2022 09:48:59 +0800</pubDate><description><![CDATA[Redis键空间通知(Keyspace Notifications)

Redis Keyspace Notificationshttps://redis.io/topics/notifications

Redis 是一个键值对数据库服务器，服务器中每个数据库都由 redisDB 结构表示（默认16个库）。其中，redisDB 结构的 dict 字典保存了数据库中所有的键值对，这个字典被称为键空间（key space）。
而16个库，独立在各自的键空间（key space）中。

键空间（key spac]]></description><category></category></item><item><title><![CDATA[水平分库分表的关键步骤和技术难点]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/123232255</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/123232255</guid><author>php_lzr</author><pubDate>Wed, 02 Mar 2022 15:45:40 +0800</pubDate><description><![CDATA[分片技术的由来
关系型数据库本身比较容易成为系统性能瓶颈，单机存储容量、连接数、处理能力等都很有限，数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展。在互联网行业海量数据和高并发访问的考验下，聪明的技术人员提出了分库分表技术（有些地方也称为Sharding、分片）。同时，流行的分布式系统中间件（例如MongoDB、ElasticSearch等）均自身友好支持Sharding，其原理和思想都是大同小异的。

分布式全局唯一ID
在很多中小项目中，我们往往直接使用数据库自增特性来生成主键ID]]></description><category></category></item><item><title><![CDATA[分库分表的几种常见玩法及如何解决跨库查询等问题]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/123232209</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/123232209</guid><author>php_lzr</author><pubDate>Wed, 02 Mar 2022 15:44:38 +0800</pubDate><description><![CDATA[在谈论数据库架构和数据库优化的时候，我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是，这些朋友所服务的公司业务量正在（或者即将面临）高速增长，技术方面也面临着一些挑战。让人感到担忧的是，他们系统真的就需要“分库分表”了吗？“分库分表”有那么容易实践吗？为此，笔者整理了分库分表中可能遇到的一些问题，并结合以往经验介绍了对应的解决思路和建议。

垂直分表
垂直分表在日常开发和设计中比较常见，通俗的说法叫做“大表拆小表”，拆分是基于关系型数据库中的“列”（字段）进行的。通]]></description><category></category></item><item><title><![CDATA[redis中setbit(位操作)的实际应用]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/123232143</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/123232143</guid><author>php_lzr</author><pubDate>Wed, 02 Mar 2022 15:42:53 +0800</pubDate><description><![CDATA[redis的五种数据类型相信大家都非常清楚了，任何人问你基本都能脱口而出(string,hash,list,set,zset)。如果还不清楚，建议先看看redis基础，但是还有这几种类型很多人会忽略到。比如 Setbit(位操作)，GEO(地理位置信息)等等。

今天我们就来淦一淦setbit，看一看实际场景中到底是怎么用的，以及有哪些优势？

我们先来回顾一下setbit吧，大家知道位操作，只有两个值，0和1，8个位正好是1b，所以位操作是非常节省空间的一种操作。


1Byte（B）=8bit
...]]></description><category></category></item><item><title><![CDATA[PHP 利用phpexif_read_data函数获取iPhone 手机拍摄的图片 进行翻转照片]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/121530241</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/121530241</guid><author>php_lzr</author><pubDate>Thu, 25 Nov 2021 09:31:32 +0800</pubDate><description><![CDATA[最近业务上做有关设计人脸识别的业务 发现有的图片识别不到，查看人脸库图片是翻转的，查看具体图片信息发现是苹果设备拍摄的，为了识别成功 需要将图片进行翻转。

话不多说 下面展示解决方法

利用PHPexif_read_data函数获取图片信息


echo "1111.jpg:&lt;br /&gt;\n";
$exif = exif_read_data('1111.jpg', 0,true);
echo $exif===false ? "No header data found.&lt;...]]></description><category></category></item><item><title><![CDATA[mysql 面试精典问题]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/121225966</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/121225966</guid><author>php_lzr</author><pubDate>Tue, 09 Nov 2021 14:29:52 +0800</pubDate><description><![CDATA[大家好~

今天给大家分享MySQL常考的面试题，看看你们能答对多少



本期MySQL面试题的目录如下：


	事务的四大特性？
	
	
	事务隔离级别有哪些？
	
	
	索引

	
		什么是索引？
		
		
		索引的优缺点？
		
		
		索引的作用？
		
		
		什么情况下需要建索引？
		
		
		什么情况下不建索引？
		
		
		索引的数据结构
		
		
		Hash索引和B+树索引的区别？
		
		
		为什么B+树比B树更适合实现数据库索引？
		
		
		索引有什么]]></description><category></category></item><item><title><![CDATA[Laravel 使用 JWT 完成多用户认证]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/121030501</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/121030501</guid><author>php_lzr</author><pubDate>Fri, 29 Oct 2021 11:02:34 +0800</pubDate><description><![CDATA[JWT ------ json web Token
作用:

1.降低耦合性,适用于前后端分离,分布式架构,取代传统的session

2.较少服务器和数据库的压力

JWT的结构
JWT包含了使用.分隔的三部分： Header 头部 Payload 负载 Signature 签名 结构为 Header.Payload.Signature

Header

在header中通常包含了两部分：token类型和采用的加密算法。{ "alg": "HS256", "typ": "JWT"} 接下来对这部分内容使用]]></description><category></category></item><item><title><![CDATA[postgresql无序uuid性能测试]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/121030227</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/121030227</guid><author>php_lzr</author><pubDate>Fri, 29 Oct 2021 10:51:06 +0800</pubDate><description><![CDATA[无序uuid对数据库的影响

由于最近在做超大表的性能测试，在该过程中发现了无序uuid做主键对表插入性能有一定影响。结合实际情况发现当表的数据量越大，对表插入性能的影响也就越大。

测试环境

PostgreSQL创建插入脚本，测试各种情况的tps。

数据库版本：PostgreSQL 10.4 (ArteryBase 5.0.0, Thunisoft)

操作系统配置：CentOS Linux release 7 ，32GB内存，8 cpu

测试参数：pgbench -M prepared -r -n]]></description><category></category></item><item><title><![CDATA[在Windows系统的环境搭建 ELK（ElasticSearch7.3，logstash,kibana）]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/121029420</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/121029420</guid><author>php_lzr</author><pubDate>Fri, 29 Oct 2021 10:31:56 +0800</pubDate><description><![CDATA[1、安装ElasticSearch7.3

一、下载ElasticSearch7.3html

百度搜索ElasticSearch官网或者直接去官网下载，地址https://www.elastic.co/cn/downloads/elasticsearchgit

版本7.3，windows环境github

二、安装ElasticSearchide

下载完毕，直接解压，进入路径bin目录下，直接双击运行elasticsearch.bat。ui





首先会检测你本机的jdk环境，7.3使用的是jd.]]></description><category></category></item><item><title><![CDATA[win10环境Filebeat+Logstash+Elasticsearch+kibanan存储日志]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/121029120</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/121029120</guid><author>php_lzr</author><pubDate>Fri, 29 Oct 2021 10:15:13 +0800</pubDate><description><![CDATA[Filebeat 是轻量级的数据收集器， 占用资源少， 支持系统很多， 是ELK 后期增加的一员。

一. 从官网下载， win10 是win 64位版本

下载地址：https://www.elastic.co/cn/downloads/beats/filebeat

目前是7.0.1 版本。

二. 把下载的filebeat-7.0.1-windows-x86_64.zip 解压

我是把里面的文件夹解压到 D:\program files\ 下，然后把文件夹filebeat-7.0.1-windows]]></description><category></category></item><item><title><![CDATA[为什么MySQL用B+树做索引]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/118099288</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/118099288</guid><author>php_lzr</author><pubDate>Tue, 22 Jun 2021 09:02:45 +0800</pubDate><description><![CDATA[索引这个词，相信大多数人已经相当熟悉了，很多人都知道MySQL的索引主要以B+树为主，但是要问到为什么用B+树，恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。

索引是一种数据结构，用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量，数据量大了索引才显得有意义，如果我想要在[1,2,3,4]中找到4这个数据，直接对全数据检索也很快，没有必要费力气建索引再去查找。索引在mysql数据库中分三类：

B+树索引、Hash索引、全文]]></description><category></category></item><item><title><![CDATA[PHP常见方法封装]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/115637908</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/115637908</guid><author>php_lzr</author><pubDate>Mon, 12 Apr 2021 19:54:50 +0800</pubDate><description><![CDATA[get请求
function get_curl($url, $timeout = 5) {
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true );
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, fal...]]></description><category></category></item><item><title><![CDATA[PHP常见算法合集]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/115637799</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/115637799</guid><author>php_lzr</author><pubDate>Mon, 12 Apr 2021 19:52:45 +0800</pubDate><description><![CDATA[一、文件夹遍历
&lt;?php
function allFile($path = __DIR__, $level = 1)
{
  if (is_dir($path) &amp;&amp; is_readable($path)) {
    if($pd = opendir($path)) {
      while (($file = readdir($pd)) !== false) {
        if($file != '.' &amp;&amp; $fi...]]></description><category></category></item><item><title><![CDATA[php获取某段时间内每个月的方法 ]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/115096898</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/115096898</guid><author>php_lzr</author><pubDate>Mon, 22 Mar 2021 20:34:51 +0800</pubDate><description><![CDATA[php获取某段时间内每个月的方法，返回由这些月份组成的数组，具体代码如下：
/**
* 生成从开始月份到结束月份的月份数组
* @param int $start 开始时间戳
* @param int $end 结束时间戳
*/
function monthList($start,$end){
if(!is_numeric($start)||!is_numeric($end)||($end&lt;=$start)) return '';
$start=date('Y-m',$start);
$end=dat]]></description><category></category></item><item><title><![CDATA[php的运行原理、cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/114318988</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/114318988</guid><author>php_lzr</author><pubDate>Wed, 03 Mar 2021 15:43:52 +0800</pubDate><description><![CDATA[要了解php的运行原理，首先要了解下面几个概念：


CGI：


CGI的英文是（COMMON GATEWAY INTERFACE）公共网关接口，它的作用就是帮助服务器与语言通信，这里就是nginx和php进行通信，因为nginx和php的语言不通，因此需要一个沟通转换的过程，而CGI就是这个沟通的协议。


nginx服务器在接受到浏览器传递过来的数据后，如果请求的是静态的页面或者图片等无需动态处理的则会直接根据请求的url找到其位置然后返回给浏览器，这里无需php参与，但是如果是一个动态的页面请求，这]]></description><category></category></item><item><title><![CDATA[SQL 优化极简法则]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/109494889</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/109494889</guid><author>php_lzr</author><pubDate>Wed, 04 Nov 2020 17:23:42 +0800</pubDate><description><![CDATA[查询优化是一个复杂的工程，涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执行顺序、索引以及统计信息的采集等，甚至应用程序和系统的整体架构。本文介绍几个关键法则，可以帮助我们编写高效的 SQL 查询；尤其是对于初学者而言，这些法则至少可以避免我们写出性能很差的查询语句。

以下法则适用于各种关系型数据库，包括但不限于：MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite 等。如果觉得文章有用，欢迎评论????、点赞????、推荐????

法则一：只返]]></description><category></category></item><item><title><![CDATA[PHP 无限极分类]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/109133900</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/109133900</guid><author>php_lzr</author><pubDate>Sat, 17 Oct 2020 15:45:48 +0800</pubDate><description><![CDATA[$data = array(
    array('id' =&gt; 1, 'pid' =&gt; 0, 'name' =&gt; '山西省'),
    array('id' =&gt; 2, 'pid' =&gt; 0, 'name' =&gt; '北京市'),
    array('id' =&gt; 3, 'pid' =&gt; 1, 'name' =&gt; '晋中市'),
    array('id' =&gt; 4, 'pid' =&gt; 2, 'name' =&gt; '朝阳区'),
.]]></description><category></category></item><item><title><![CDATA[Mysql系列   子查询]]></title><link>https://blog.youkuaiyun.com/php_lzr/article/details/108998504</link><guid>https://blog.youkuaiyun.com/php_lzr/article/details/108998504</guid><author>php_lzr</author><pubDate>Sat, 10 Oct 2020 15:49:25 +0800</pubDate><description><![CDATA[子查询

出现在select语句中的select语句，称为子查询或内查询。

外部的select查询语句，称为主查询或外查询。

子查询分类

按结果集的行列数不同分为4种


	标量子查询（结果集只有一行一列）
	
	
	列子查询（结果集只有一列多行）
	
	
	行子查询（结果集有一行多列）
	
	
	表子查询（结果集一般为多行多列）
	
按子查询出现在主查询中的不同位置分


	select后面：仅仅支持标量子查询。
	
	
	from后面：支持表子查询。
	
	
	where或having后面：支持标]]></description><category></category></item></channel></rss>