自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 游戏算法系列 - 字典树

简介trie是一种搜索树,也称为字典树。最大的特点是共享字符串的公共前缀来达到提高效率的目的。 trie的核心思想是空间换时间,缺点是内存占用高 最大限度地减少无谓的字符串比较,查询效率比哈希表高性质根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符都...

2019-06-28 11:21:55 101

原创 游戏服务器架构系列 - 一致性Hash

一致性Hash作用主要是为了解决因为后端服务节点的动态删减导致节点不能正常服务的问题。特别是在分布式缓存系统中,如果某台服务器失效,或者需要新增服务器,对于整个系统来说如果不采用合适的算法来保证一致性,那么缓存于系统中的所有数据都可能会失效,即由于系统节点数目变少或增多,客户端在请求某一数据时需要计算hash值,所以很可能找不到保存该数据的服务器节点,因此一致性hash就显得至关重...

2019-06-25 16:50:06 298

原创 游戏服务器架构系列 - 分布式ID生成

为什么要生成分布式ID?在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。例如在游戏中,游戏数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求,那业务系统对ID号的要求有哪些呢?1)全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。2)趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,...

2019-06-25 16:48:15 370

原创 游戏服务器架构系列 - 网关限流

为什么要进行网关限流?手游的架构通常是客户端通过Socket连接直连网关,所有请求都需要经过网关,然后由网关统一进行转发,所以只需在网关进行限流即可。常见的算法主要有计数器限流、令牌桶限流和漏桶限流,这些算法都是单机的算法,正好可以用在网关限流。算法1、计数器限流严格意义上来说计数器限流不属于限流算法,使用计数器来进行限流,主要用来限制总并发数,比...

2019-06-25 15:56:47 527

原创 下拉滚动,导航条悬停在顶部

效果图以前总觉得这个效果很绚,但是写不出来,最近出来实习了,老师教了这个效果,我给他贴出来,感觉很简单。说明首先导航条上边的部分占150像素,导航条本身40像素,首先得在css中定义一个class,这个class也就是定位之后的结果,又由于我的导航条进来有动画的,所有top值首先设为-40px,然后从-40px的位置出现,这个40px也正好是导航条的高度。/*固定定位*/.fixed{ p

2017-07-18 22:03:44 3797

原创 redis微博——拉模型

上回写了一篇推模型的内容,这回分享一篇拉模型的内容。拉模型拉模型就是展示微博的时候,获取自己的所有关注的人,然后从关注的人中拉取最新微博。微博项目数据结构设计user表设计注册的时候将user数据写入redis中,key如下:user数据的key用户名=user:uesrid:$uesrid:username密码=user:userid:$userid:password还需要这样写一份,因为需

2017-06-13 15:32:13 1567 1

原创 redis微博——推模型

最近在看了一下关于redis的内容,然后利用redis写了一个简单的微博项目,这篇文章是关于推模型的。推模型所谓推模型,就是用户在发布微博的时候会将微博推送给关注者和自己,然后其他关注者登录之后就可以看到发布的微博。微博项目数据结构设计user表设计注册的时候将user数据写入redis中,key如下:user数据的key用户名=user:uesrid:$uesrid:username密码=u

2017-06-13 14:45:13 1244 2

原创 redis中的事务

redis与mysql的事务Redis支持简单的事务简单使用讲张三的100圆钱转账给lisi:set zhangsan 800set lisi 100multidecrby zhangsan 100incrby lisi 100exec失败的两种情况在mutil后面的语句中, 语句出错可能有2种情况,还是以转账的情况来分析:(1)语法就有问题127.0.0.1:6379> multiOK

2017-06-07 14:40:23 314

原创 session垃圾回收机制

session过期时间在php.ini文件中有这样一个配置,这个配置表示session文件过期时间,默认的话是1440秒,也就是24分钟,这个24分钟是session的发呆时间,如果在24分钟内没有对session进行操作,那么session文件就会过期,如果在23分钟的时候操作了session,那么就会又有24分钟的过期时间,如果过期了,该session被服务器认为是垃圾。session.gc_m

2017-06-07 08:29:11 1104

原创 禁用cookie后,如何使用session?

问题大家都知道,session的sessionid是通过cookie来保存的,那么如果我们的浏览器禁用了cookie,还可以使用session吗?这道面试题是不是经常被问?你能答得出来吗?禁用cookie后,session还是可以使用的。禁用后的情况禁用cookie后,服务器每次session_start的时候都会创建一个单独的session文件,后果就是无法让多个页面共享同一份session解决方

2017-06-06 16:36:19 11181

原创 php文件下载

<?php/** * 文件下载 * @param string $file_name 文件名 * @param string $file_sub_dir 文件子路径 * @return void */function down_file($file_name,$file_sub_dir){ //1、将文件名转码 $file_name

2017-06-05 20:49:59 412

原创 cookie的domain实战

setcookie方法bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )在setcookie方法中,第5个参数是domain参数,通过这

2017-06-05 14:11:23 3647 2

原创 集群环境下的session问题

问题假设我们有4台服务器,1台做负载均衡器,其余3台做web节点服务器,并将这3台服务器做一个负载均衡。我们给这3台服务器标记一下,为1、2、3号服,假设某个用户发出登录请求,正好落在1号服上,登录成功,接着用户又发出了第2个请求,这个时候正好落在了2号服务器上,这里我用的是Nginx服务器,Nginx服务器集群默认采用的是轮询算法,所以会接着落在第2号服务器上,但是尴尬的是,我的用户session

2017-06-04 11:17:34 596

原创 Nginx连接Memcached

前言之前这篇文章PHP与Memcached实战说的是php怎么连memcached,文中主要写的是php连接memcached的api。Nginx连接Memcached架构图首先请求Nginx,Nginx去连接Memcached,从中读取数据,如果不存在,就使用PHP连接MySQL,在数据库中读取数据,然后将数据在复制到Memcached一份。Memcached keymemcached是k/v存储

2017-06-03 17:09:27 631

原创 Nginx expires缓存

expires缓存对于网站的图片,尤其是新闻站, 图片一旦发布, 改动的可能是非常小的.我们希望 能否在用户访问一次后, 图片缓存在用户的浏览器端,且时间比较长的缓存。可以, 用到 nginx的expires设置 。nginx中设置过期时间,非常简单。在location或if段里,来写。设置格式expires 30s;#30秒expires 30m;#30分钟expires 2h;#2个小时e

2017-06-02 23:17:58 6768

原创 Nginx gzip压缩

gzip配置的常用参数gzip on|off; #是否开启gzipgzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)gzip_disable #正则匹配UA 什么样的Uri不进行gzipgzip_min_length 200 # 开始压缩的

2017-06-02 16:04:01 434

原创 MySQL主从复制(读写分离)

主从复制/读写分离假设有4台数据库服务器需要做集群,我们可以将其中1台做主服务器,然后剩下的3台做从服务器,从服务器负责从主服务器复制数据,所以叫做主从复制。在业务层面,如果有读取操作,我们可以从3台从服务器中读取,如果是更新操作,我们指定操作主服务器,那么对于主服务器的更改就会复制到3台从服务器上,保证了读取的可靠性,这就是读写分离。实现原理1、主服务器凡运行语句,都产生一个二进制日志 bin-l

2017-05-28 22:15:34 438

原创 exists子查询真的就比连接查询慢吗?

问题前面有篇文章in型子查询的陷阱,里面给出的案例体现的是in型子查询的效果比连接查询慢,今天我们来看看另一个例子,来看看exist子查询真的就比连接查询慢吗?案例商品表:goods 栏目表:category 查询出包含商品的栏目。连接查询select category.cat_id,cat_name from category inner join goods on category.cat_

2017-05-27 21:14:48 1814

翻译 使用MySQLAdmin工具查看QPS

代码:./bin/mysqladmin -r -i 1 -uroot -p1234 ext| awk '/Queries/{printf("QPS:%d\n",$4)}/Threads_connected/{printf("Threads_connected:%d\n",$4)}/Threads_running/{printf("Threads_running:%d\n",$4)}'执行结果:参考文

2017-05-26 15:48:27 524

原创 Nginx反向代理与负载均衡

集群集群就是指一组或若干个相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。集群给用户的感觉就是一台服务器,而实际用户请求的是一组集群服务器。负载均衡集群负载均衡集群可以把许多客户集中的访问请求负载压力尽可能平均地分摊在计算机集群中处理。这样的系统非常适合使用同一组应用程序为大量用户提供服务的模式,每个节点都可以承担一

2017-05-25 13:21:22 345

原创 Nginx location配置

作用location指令的作用是根据用户请求的URI来执行不同的应用,其实就是根据用户请求的网站地址URI进行匹配,匹配成功即进行相关的操作。语法location [ = | ~ | ~* |^~ ] uri { ...}上面就是location的语法,上述语法中uri部分是关键,这个uri可以是普通的字符串地址路径,或者是正则表达式,匹配成功后则执行大括号里的相关指令。使用正则表达式的时

2017-05-23 18:01:08 1868

原创 基于Laravel开发的CMS

花了差不多大半个月的时间写了一个基于Laravel的CMS,下载地址:GitHub,欢迎标星!

2017-05-20 22:15:23 5442 4

原创 Laravel+Intervention上传图片

问题使用Laravel上传图片解决安装Intervention根据这个链接来安装https://packagist.org/packages/intervention/image使用Intervention根据这个文档来进行使用http://image.intervention.io/getting_started/introduction简单修改使用下面的代码就能实现上传图片Image::make

2017-05-20 17:32:56 899

原创 datatables服务器分页

问题最近使用了bootstrap的datatables插件,但是在分页的时候遇到了问题。效果图解决方法引入这部分就不讲了开启服务器模式$("#example1").DataTable({ "serverSide": true,//开启服务器模式 "ajax": "/admin/log/getLoginData",//ajax加载数据})api端<?php/** * Create

2017-05-20 16:45:14 2531

原创 重新编译GD扩展

问题看过我的这篇编译LNMP文章的同学应该知道,我的php是编译安装的,并且gd库是采用静态编译的。下面是当时编译php的参数。./configure --prefix=/usr/local/php \--with-gd \--enable-gd-native-ttf \--enable-gd-jis-conv \--enable-mysqlnd \--with-mysql=mysqlnd

2017-05-20 15:31:05 2168

原创 Nginx隐藏软件版本号信息

默认安装Nginx时404错误提示:我们想在隐藏这里的版本号信息1、打开nginx.conf配置文件vim ./conf/nginx.conf2、在http段中添加配置默认情况下server_tokens是on,server_tokens可以添加到http、server、location段http{ ... server_tokens off ...}3、保存并重启ngin

2017-05-11 08:55:22 323

原创 Laravel模板实体转义带来的坑

问题最近在Laravel项目中用到了百度编辑器,插入到数据库我保存的是原始的html标签代码,没有进行实体转义。然后在修改的时候,需要读取到数据库中的数据,进行回显,这时候竟然在编辑器里面显示html标签代码<p>123</p>,这让我很尴尬,因为以前在tp框架中也是这样写的,但是没有问题。搜索之路在知道问题之后,我就开始找百度了,因为一开始的时候我并不知道是框架的原因,我以为是百度编辑器版本的原因

2017-05-01 10:27:42 7362

原创 Laravel实现多个视图共享相同的数据

最近在用Laravel写一个cms,还没有完成,但是也遇到了许多难点,比如cms后台每个视图都要展示相同的导航菜单数据。 环境: PHP 7.1 Apache 2.4 MySQL 5.7 Laravel 5.4传统方法假设使用传统的方法,应该是在每个控制器中都调用数据,然后把数据都塞给视图。$menu = DB::table('menu')->get();return

2017-04-21 13:25:38 4285

原创 Apache下Laravel路由404错误

最近重新配了WAMP环境,下载了一个Laravel5.4版本准备玩玩的,新定义了一个路由,结果404。第一时间想到的就是开启rewrite,但是开启了还是没有用,就百度了一大堆,终于找到了答案。1、在apache conf开启rewrite模块,把下面这句话前面的#去掉。LoadModule rewrite_module modules/mod_rewrite.so2、在conf文件中找到direc

2017-04-20 21:10:45 3224

原创 windows7安装apache2.4+mysql5.7+php7.1

1、下载软件(1)下载apache2.4 http://httpd.apache.org/选择download随便选择一个压缩包(2)下载mysql5.7 https://www.mysql.com/downloads/选择最底下的社区版本再次选择一次社区版选择windows版本这里我选择的是压缩包安装,所以我演示的是压缩包的方式(3)下载php7.1 http://php.net/注意这里

2017-04-19 21:18:22 7471 1

原创 【长期更新】升级php7带来的坑

1、去掉了ereg_*的正则函数2、去掉了MySQL扩展

2017-04-19 15:52:54 1761

原创 Node.js尝鲜——留言功能

1、新建一个文件,使用下面的代码新建创建一个05.js文件,下面的代码就是创建一个http服务器,然后监听8000端口。在服务器中,首先分析请求的路径,然后根据路径进行相应的操作,然后返回相应的数据。const http = require('http');const url = require('url');const qs = require('querystring');var form

2017-04-11 14:14:00 1548

原创 AngularJS尝鲜——联动菜单

分享一个AngularJS写的联动菜单效果图:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>使用Angular做联动菜单</title></head><script src="//cdn.bootcss.com/angular.js/1.6.3/angular.min.js"></scr

2017-04-06 19:18:25 898

原创 AngularJS尝鲜——Ajax请求

AngularJS不仅仅只有双向绑定等等功能,还有发送Ajax请求的Api。效果图:请求的文件(data.php):<?php$data = [ '股市下跌', '清明小长假结束', '我要接着学习了'];echo json_encode($data);Jqurey方式<!DOCTYPE html><html lang="en"><head> <meta c

2017-04-06 19:07:22 2720

原创 AngularJS尝鲜——增减商品购买量

在写商城的时候,应该都会让顾客点击+或者-来选择购买商品的数量。效果图:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>计算商品总价,每件商品8元钱</title></head><script src="//cdn.bootcss.com/angular.js/1.6.3/angular.

2017-04-06 18:59:45 401

原创 AngularJS尝鲜——快递运费计算

最近想多了解关于前端的内容,毕竟是全栈的时代了,不学一点就会落伍咯。先来尝尝AngularJS吧。直接上案例:快递运费计算,我会分别使用原生JS、JQuery、AngularJS来实现。原生js<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生JS,求快递运费</title></head>

2017-04-06 18:50:35 1156

原创 in 型子查询引出的陷阱

在开发商城的时候,核心有一个goods表和category表,category中有多级分类。假设有一个父分类为6,这个父分类中没有商品,商品都在子分类中,那么要查询分类为6的商品,如果我们使用in型子查询,会使用下面的sql。select * from goods where cat_id in (selectcat_id from category where parent_id=6);直观的

2017-03-20 15:56:38 1115

原创 explain详解

(1)idid:代表select 语句的编号, 如果是连接查询,表之间是平等关系, select 编号都是1,从1开始. 如果某select中有子查询,则编号递增.(2)select_typeselect_type: 查询类型(3)tabletable: 查询针对的表有可能是实际的表名 如select * from t1;也有可能是表的别名如 select * from t2 as tmp; d

2017-03-20 09:25:15 455

原创 重复索引与冗余索引

重复索引:表示一个列或者顺序相同的几个列上建立的多个索引。 冗余索引:两个索引所覆盖的列重叠冗余索引在一些特殊的场景下使用到了索引覆盖,所以比较快。场景比如文章与标签表 +——+——-+——+ | id | artid | tag | +——+——-+——+ | 1 | 1 | PHP | | 2 | 1 | Linux | | 3 |

2017-03-16 20:28:11 4585 1

原创 索引对排序的影响

索引不仅能提高查询速度,还可以添加排序速度,如果order by 后面的语句用到了索引,那么将会提高排序的速度。测试1、创建测试表:t15表CREATE TABLE `t15` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `cat_id` int(10) unsigned NOT NULL DEFAULT '0', `price` d

2017-03-16 19:47:19 8661

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