
PHP
文章平均质量分 81
挑灯夜读
这个作者很懒,什么都没留下…
展开
-
使用Redis实现实时排行榜
游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。一个典型的游戏排行榜包括以下常见功能:1. 能够记录每个玩家的分数;2. 能够对玩家的分数进行更新;3. 能够查询每个玩家的分数和名次;4. 能够按名次查询排名前N名的玩家;5. 能够查询排在指定玩家前后M名的玩家。更进一步,上面的操作都需要在短时间内实时完成,这样才能最大程度发挥排行榜的效用。...转载 2021-01-16 18:41:22 · 1311 阅读 · 0 评论 -
LNMP下提示File not found问题的解决方法
前言一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问。最近在配置LNMP(Linux Nginx MariaDB Php-fpm)的时候遇到了1个问题:访问网站首页始终提升File not found。最终解决后总结一条就是:网站根目录的权限问题。起因说说事情的起因。本人用的系统是Manjaro Linux系统。所以用一条命令装好LNMP环境: sudo pacman -S mariadb nginx php。刚开始,我把symfony项目放在我的家目录,也就是~/proj.转载 2021-01-07 16:35:54 · 1119 阅读 · 0 评论 -
php中$_POST接收不到参数问题
问题描述:PHP可以接收_GET、_SERVER、_COOKIE等参数,php://input可以读取没有处理过的POST数据,独独_POST接收不到post参数。原因:php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”不过我通过代码对比总结,得出结果如下:1.Coentent-Type为ap.转载 2020-12-16 09:16:32 · 3840 阅读 · 0 评论 -
使用PHP操作ElasticSearch
网上很多关于ES的例子都过时了,版本很久,这篇文章的测试环境是ES6.5通过composer 安装composer require 'elasticsearch/elasticsearch'在代码中引入require 'vendor/autoload.php';use Elasticsearch\ClientBuilder;$client = ClientBuilder::create()->setHosts(['172.16.55.53'])->build();转载 2020-11-24 16:27:45 · 601 阅读 · 1 评论 -
正确地使用Redis的SETNX实现锁机制
setNX,是set if not exists 的缩写,也就是只有不存在的时候才设置, 设置成功时返回 1 , 设置失败时返回 0 。可以利用它来实现锁的效果,但是很多人在使用的过程中都有一些问题没有考虑到。例如某个查询数据库的接口因为请求量比较大所以加了缓存,并设定缓存过期后刷新。当并发量比较大并且缓存过期的瞬间,大量并发请求会直接查询数据库导致雪崩。如果使用锁机制来控制只有一个请求去更新缓存就能避免雪崩的问题。下面是很多人下意识想到的加锁方法$rs = $redis->setNX($k转载 2020-06-08 17:36:23 · 900 阅读 · 0 评论 -
Linux下RabbitMQ的安装及使用
一、RabbitMQ安装1.下载Erlang的rpm包 RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ版本匹配:https://www.rabbitmq.com/which-erlang.html Erlang下载地址:https://www.rabbitmq.com/releases/erlang/(根据自身需...原创 2020-04-28 17:00:44 · 748 阅读 · 0 评论 -
mysql has gone away解决方案
案例: TP5$user2 = db('user')->where('id',21)->find();sleep(10);$user = db('user')->where('id',20)->find(); 由于mysql wait_timeout,interactive_timeout参数设置的10s,程序sleep 10s后,由于框架的db连...原创 2020-03-27 12:02:39 · 576 阅读 · 0 评论 -
实时查看php-fpm进程的内存使用情况
实时查看php-fpm进程的内存使用情况while true;do clear;date;ps --no-headers --sort -rss -o "rss,pid,cmd" -C php-fpm|awk '{printf("%dM %s\n",$1/1024,$0)}'|head -n 10;sleep 1;done原创 2020-01-15 17:38:38 · 958 阅读 · 0 评论 -
yum安装 lnmp (linux+nginx+php7.2+mysql5.7)
1、第一步先更新yum update2、yum安装nginx安装nginx最新源:yum localinstall http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmyum repolist enabled | grep "nginx*"安装nginx...转载 2019-11-12 15:31:05 · 313 阅读 · 0 评论 -
swoole 异步队列简明教程
############################ 消费者,文件名《server.php》 ############################<?phpclass Server { private $serv; private $logFile; public function __construct() { $this...转载 2019-09-06 16:58:57 · 337 阅读 · 0 评论 -
Swoole扩展的10种模式
前言并发问题可以理解为两个问题并发连接数,就是支持同时接受多少客户端TCP连接 并发请求数,没秒能处理多少请求Swoole底层基于epoll,所以第一个问题在Swoole扩展中实际上不存在任何问题。使用Swoole可以轻松应对10万甚至100万长连接。开发者唯一需要做的就是修改 ulimit -n将系统最大文件描述符改为 10万或更大。不同的模型每秒能处理多少请求数,这...转载 2019-09-06 16:57:01 · 871 阅读 · 0 评论 -
什么是PHP正则表达式?PHP正则表达式的使用方法(附代码)
什么是PHP正则表达式?php正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式,可以匹配、替换、截取匹配的字串;那么,php正则表达式使用方法是怎样的呢?接下来我们就来看一看具体的实例。一、正则表达式的介绍:正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。1. 用途:匹配、查找、替换、分割2. php提供...转载 2019-07-06 15:11:10 · 736 阅读 · 0 评论 -
PHP call_user_func理解
call_user_func():调用一个回调函数处理字符串, 可以用匿名函数,可以用有名函数,可以传递类的方法, 用有名函数时,只需传函数的名称 用类的方法时,要传类的名称和方法名 传递的第一个参数必须为函数名,或者匿名函数,或者方法 其他参数,可传一个参数,或者多个参数,这些参数会自动传递到回调函数中 而回调函数,可以通过传参,获取这些参数 返回回调函数处理后的结...原创 2019-05-28 16:04:43 · 7075 阅读 · 0 评论 -
理解 php new static
今天在看 Laravel 的容器(Container)实现时,发现了这么一段突然不能理解的代码:*** Set the globally available instance of the container.** @return static*/public static function getInstance(){ if (is_null(static::$inst...转载 2019-05-24 17:39:19 · 1008 阅读 · 0 评论 -
令牌桶限流(php redis)
在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个 用户,他在一个时间段(interval)内,比如 1 分钟,调用服务器接口的次数不能够 大于一个上限(limit),比如说 100 次。如果用户调用接口的次数超过上限的话,就直接拒绝用户的请求,返回错误信息。服务接口的流量控制策略:分流、降级、限流等...转载 2019-05-07 09:50:32 · 861 阅读 · 0 评论 -
下载微信头像到本地服务器
const AVATOR_ROUTE = DIRECTORY_SEPARATOR . 'uploads'.DIRECTORY_SEPARATOR .'avator'; /** * 文件下载 * @param [type] $url [下载链接包含协议] * @param [type] $absolute_path [本地绝对路径包含扩展名]...原创 2019-04-09 13:27:22 · 712 阅读 · 0 评论 -
php-fpm端口占用无法启动
启动php-fpm报错:[root@localhost init.d]# /usr/sbin/php-fpm[16-Jun-2017 14:09:15] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)[16-Jun-2017 14:09:15]...原创 2018-10-17 15:54:41 · 2127 阅读 · 0 评论 -
缓存设计需要注意的坑
今天讲的这个话题,我相信是众多工程师和团队的痛。从我刚开始工作,那时候构建本地缓存,到后续memcache, Redis的出现,到现在各种分布式集群的缓存,例如redis Cluster等产品的出现,缓存越来越发达和复杂了,缓存对我们的系统也越发重要,现在很难相信一个后端服务里没有缓存的存在。在这篇文章里,我会和大家分享一下过去踩到的缓存坑,然后试图给出一些解决方案,大家可以一起讨论,最终拿出更好...转载 2018-10-29 11:05:53 · 2051 阅读 · 0 评论 -
Java,PHP设计模式总结
这几天在看设计模式,自己做过Java,也做过PHP,设计模式这块Java和PHP的思想是相通的.发现一个对设计模式总结的比较好的博客:java 23种设计模式 深入理解总结:1.普通工厂和抽象工厂模式1.1区别: 我自己的理解:普通工厂就如同工厂中的一条生产线,比如:一条生产鞋的生产线只能生产鞋(其中包括男鞋,女鞋,不同品牌的鞋,在工厂子类中可以...原创 2018-12-17 15:13:08 · 290 阅读 · 0 评论 -
深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若...转载 2018-12-17 20:10:43 · 139 阅读 · 0 评论 -
PHP各进程,请求与内存之间的关系
php静态方法是什么时候开始占用内存呢? 当你把这个类require或include进去的时候 不同php进程会共用静态方法吗? 首先,进程是系统进行资源分配和调度的基本单位,所以执行每个php脚本的php-fpm进程所使用的内存是互相隔离的 其次,php脚本的生命周期是在脚本执行完毕结束,脚本所占用的内存一般会被回收 因此,不同php进程会一般情况下不会共用静态方法...原创 2018-12-18 16:33:06 · 1357 阅读 · 0 评论 -
laravel本地开发笔记
一,环境搭建:Composer安装1.1域名定义好后访问public下的index.php,报500 解决方案:1.目录下没有.env文件; 2..env文件中“APP_KEY”配置没有生成(解决方案:在终端上, cd到项目目录位置然后执行:php artisan key:generate,系统自动保持到.env中的AP...原创 2019-01-05 01:00:07 · 226 阅读 · 0 评论 -
Laravel 5.4 migrate报错
Laravel 5.4 migrate报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `us ers_email_unique`(`email`))Laravel 5.4 m...转载 2019-01-13 17:54:15 · 228 阅读 · 0 评论 -
Java面向对象面试题汇总
1. super()与this()的区别? 2. 作用域public,protected,private,以及不写时的区别? 3. 编程输出如下图形。 4. JAVA的事件委托机制和垃圾回收机制 5. 在JAVA中,如何跳出当前的多重嵌套循环? 6. 什么是java序列化,如何实现java序列化?(写一个实例) 7. 一个”.java”源文件中是否可以包括多个类...转载 2019-02-15 09:55:54 · 1982 阅读 · 0 评论 -
Java垃圾回收和PHP垃圾回收(gc())
一.JAVA垃圾回收机制:垃圾回收器是一个级别很低的线程,它通过不定时监测程序使用的内存中被占用的动态分配的内存内的对象是否还存在它的引用来判断是否该回收那个内存单元,如果不存在则回收,否则相反~~并不是只要监测到就会回收的,因为垃圾回收器线程的低级别,所以当另一个级别比它高的线程跟他同时竞争运行时间时,前者优先运行,所以你无法知道垃圾回收器何时回收,System.gc()只是建议垃圾回收器进...原创 2019-02-15 13:58:40 · 565 阅读 · 1 评论 -
phpstudy+phpstorm xdebug配置
记录下自己配置xdebug中遇到的一些坑:php.ini中的坑:xdebug.profiler_append = 0xdebug.profiler_enable = 1xdebug.profiler_enable_trigger = 0xdebug.remote_enable = 1xdebug.remote_host = "127.0.0.1"xdebug.remote_ha...原创 2019-03-20 14:08:39 · 321 阅读 · 0 评论 -
APP登录方案设计
生成token每次用户在注册或者登录时,验证密码通过以后,返回给用户一个token,APP缓存此token; 以后客户端每次发送请求的时候,都不用再带上密码了,直接带回token信息即可验证身份。 一般来说,token的生成一定要保持唯一,不然无法标明用户的唯一身份; token的生成策略,建议可以依赖自己的策略反解出userId,因为token一般是存储在缓存中的,当缓存挂掉以后,可以...转载 2019-03-31 10:57:10 · 1004 阅读 · 0 评论 -
thinkphp5.1 创建定时任务 指令详解
1.在application目录下创建crontab模块(统一存放定时任务)2.在command目录下创建Task.php 代码如下:<?phpnamespace app\crontab\command; use think\console\Command;use think\console\Input;use think\console\input\Argument;...原创 2019-04-10 18:43:47 · 3523 阅读 · 0 评论 -
实用的Docker入门
实用的Docker入门目录1 Docker概述 2 Docker安装 3 Docker常用命令 3.1 镜像常用命令 3.2 容器常用命令 4 入门实战 5 Docker Compose 5.1 安装Compose 5.2 安装Compose命令补全工具 5.3 入门实例 正文回到顶部1 Docker概述Docker和虚拟机一样,都拥...转载 2018-09-19 17:02:16 · 141 阅读 · 0 评论