mysql
char 与 varchar
char : 定长,效率高,一般用于固定长度的表单提交数据存储
varchar:不定长,效率较低
使用 Innodb引擎的话,使用varchar 代替 char
软删除
删除操作会在数据表中留下很大的空洞,将会导致性能问题,可使用 OPTIMEIZE TABLE
,进行碎片整理
msyql根据json字段内容作为查询条件
使用 字段 -> '$.json属性名'
进行查询
Redis
雪崩
大批量缓存同时失效、或者缓存层自身出现问题,导致对db物理层的压力骤增
方案:
使用集群,防止某台机器出现问题后影响这个服务
互斥锁,使用锁机制或者队列来控制进行读写对的线程数,将服务器压力控制在可控范围
不同的key设置不同的过期时间,让失效时间尽可能的均匀分布,如随机的过期时间
设置永不过期的key
资源保护,做各种资源的线程池隔离,从而保护主线程池
穿透
拿着key去取对应的value,不存在,则去db中查找,同时并发量过高将会对db系统造成较大压力
方案:
不论返回结果是否为空,都对返回结果进行缓存,空的结果设置一个较短的过期时间
设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截,从而避免了对底层存储系统的查询压力
PHP
classname :: name
类中调用同一类中的其他静态资源,可用static::name
来代替classname::name
self static
self 调用静态方法或属性,可能会升级为父类中的数据
static 调用只会涉及当前类中数据,不会发生升级现象
self this parent
this 指向当前对象的指针
self 指向当前类的指针
parent 指向父类的指针
数组函数
array_merge
合并数组,返回值为合并后的数组
array_diff
求数组差集,只比较键值,返回值为差集数组
array_intersect
求数组并集,只比较键值,返回值为并集数组
array_unshift
将变量加到数组的开头function array_unshift ( array &$array, ...$values ){}
php闭包函数/匿名函数
使用关键字use
连接闭包和外界变量
匿名函数中的use,作用就是从父作用域继承变量
且此行为实在函数定义时发生,即若函数定义时,use的变量不存在,则已经找不到变量
…$args 语法糖
function add($a, $b ,$c)
{
return $a + $b + $c;
}
$num = [2,3];
echo add(1,...$num);
表示使用可遍历变量来代替若干个变量
Heredoc结构
heredoc句法结构 <<< 用来表达字符串。在该运算符之后要提供一个标识符,然后换行,接下来是字符串本身,最后要用之前定义的标识符来作为结束标志。
结束时所要引用的标识符必须在该行的第一列,且该行除了一个分号外,不能包含其他字符。包括缩进和空白,以及制表符。
示例:
echo <<<EOTMy name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
nowdoc结构
heredoc类似于双引号字符串,而nowdoc类似于单引号字符串,关键在于不对字符串内容进行解析操作。
一个nowdoc结构后面的标识符要用单引号括起来,即<<<'EOT'
,其余都是相同。
mktime函数
根据给出的参数返回unix时间戳,若参数非法,返回false
参数顺序为:分,秒,时,月,日,年
get_class_vars
返回由类的默认属性组成的数组,常用在数据实体转数组
get_class
返回对象的类名
method_exists
检查类的方法是否存在
ini_get
获取一个配置项的值(php.ini中的)
usleep
延迟执行,单位为微妙,注意是延迟执行
use的用法
命名空间使用
用于trait特性能力的引入
匿名函数传参
$_FILE
当上传文件时,$_FILE
接收文件时,出现问题时会记录错误
如下:
$_FILES['file']['error']
其值为 0,没有错误发生,文件上传成功。
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
其值为 3,文件只有部分被上传。
其值为 4,没有文件被上传。
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
其值为 7,文件写入失败。PHP 5.1.0 引进。 看报错的话,应该是临时文件夹没有写权限或者不存在
__invoke()
尝试以调用函数的方式调用一个对象时,__invoke()
方法就会被自动调用
示例
<?php
class CallableClass {
function __invoke($x) {
var_dump($x);
}
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>
会输出
int(5)
bool(true)
Closure 类
用来代表匿名函数的类
匿名函数会产生这个类型的对象,此类带有一些方法,允许在匿名函数创建后对其进行更多控制
ClassName::class
返回一个字符串,包含了类 classname 的完全限定名称,即为 命名空间/classname
phpstorm
phpstorm中文插件
在phpstorm 2020.2.3及其以后的版本中,插件市场里会有一个可以将IDE完全汉化的插件,搜索 Chinese,star最多的就是了
phpstorm 常用快捷键
F2
快速定位错误或警告
ctrl + F
在当前文件中查找字符
ctrl + shift + F
在项目文件中查找字符
ctrl + alt + L
格式化代码
alt + F1
快速定位文件位置
ctrl + F12
查看当前文件的方法和属性列表
alt + ↑/↓
在方法间快速移动
ctrl + G
转到行(会出现对话框)
alt + Insert
生成代码(GET,SET方法和构造函数)
ctrl + Y
删除行插入符号
ctrl + D
复制行
alt + (table上面的点)
快速弹出vcs菜单(git操作面板)
ctrl + alt + F12
资源管理器打开文件夹,跳转至文件在磁盘上的位置,为倒置的树形列表