小敏的博客


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

PHP-Laravel核心思想

发表于 2020-12-21 | | 阅读次数:

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递(注入)给它。

阅读全文 »

运维-Laravel 开发文档

发表于 2020-12-21 | | 阅读次数:

Laravel 是一个由Taylor Otwell所创建,免费的开源[3] PHP Web 框架,旨在实现的Web软件的MVC架构,并作为CodeIgniter的替代方案。

阅读全文 »

运维-Laravel Homestead 开发环境

发表于 2020-12-21 | | 阅读次数:

Laravel Homestead 实际是一个打包好各种 Laravel 开发所需软件和工具的 Vagrant 盒子(关于 Vagrant 盒子的释义请参考 Vagrant 官方文档),该盒子为我们提供了一个优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、Composer、Nginx、MySQL、Memcached、Redis、Node 等其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!

阅读全文 »

运维-homebrew安装

发表于 2020-12-14 | | 阅读次数:

Homebrew是一款自由及开放源代码的软件包管理系统,用以简化macOS系统上的软件安装过程

阅读全文 »

杂项-碎片资料整理

发表于 2020-12-12 | | 阅读次数:

当你在浏览器地址栏输入一个URL后回车,浏览器做了什么?

1、浏览器的url请求
2、递归寻找DNS服务器
3、连接目标IP并建立TCP连接
4、向目标服务器发送http请求
5、web服务器接收请求后处理
6、web服务器返回相应的结果【无效、重定向、正确页面等】
7、浏览器接收返回的http内容
================================前端解析分割线===========================================
8、开始解析html文件,当然是自上而下,先是头部,后是body
9、当解析到头部css外部链接时,同步去下载,如果遇到外部js链接也是下载【不过js链接不建议放在头部,因为耽误页面第一展现时间】
10、接着解析body部分,边解析边开始生成对应的DOM树,同时等待css文件下载
11、一旦css文件下载完毕,那么就同步去用已经生成的DOM节点+CSS去生成渲染树
12、渲染树一旦有结构模型了,接着就会同步去计算渲染树节点的布局位置
13、一旦计算出来渲染的坐标后,又同步去开始渲染
14、10-13步进行过程中如果遇到图片则跳过去渲染下面内容,等待图片下载成功后会返回来在渲染原来图片的位置
15、同14步,如果渲染过程中出现js代码调整DOM树机构的情况,也会再次重新来过,从修改DOM那步开始
16、最终所有节点和资源都会渲染完成
=========================================分析结束分割线==============================================
17、渲染完成后开始page的onload事件
18、整个页面load完成

Redis主从复制

1
2
3
4
5
1:当一个从数据库启动时,会向主数据库发送sync命令,
2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来
3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。
5:主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致;

Mysql主从复制原理及流程

1
2
3
4
1) I/O 线程向主库发出请求
2)主库线程响应请求,并推BINLOG 日志到从库
3)I/O 线程收到线程并记入中继日志
4)SQL 线程从中继日志读取SQL,并记入从库binlog 日志,FLUSH进硬盘

MAC 取消开机启动项

1
2
3
4
5
- 通过系统设置
- ~/Library/LaunchAgents
- /Library/LaunchAgents/
- /Library/StartupItems
- /Library/LaunchDaemons/

parallels 虚拟机 windows 忘记密码重置

1
2
3
4
https://docs.virtuozzo.com/virtuozzo_7_command_line_reference/managing-virtual-machines/prlctlvm.html
打开虚拟机。
打开Terminal也就是终端,并输入命令:prlctl list --all,此命令得到的结果样式见下文,然后在结果中找到UUID。
输入命令:prlctl set --userpasswd <用户名>:<密码>,然后回车。完成!

运维-SSR安装

发表于 2020-12-10 | 分类于 IT , 运维 | | 阅读次数:

SSR服务器

1
https://github.com/shadowsocksr-backup/shadowsocksr/tree/manyuser

SSR客户端

1
ShadowsocksX-NG

SSR配置

./mudb.json 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
"d": 0,
"enable": 1,
"method": "chacha20-ietf",
"obfs": "tls1.2_ticket_auth_compatible",
"passwd": "passwdxxx",
"port": 50000,
"protocol": "auth_sha1_v4",
"protocol_param": "8",
"transfer_enable": 9007199254740992,
"u": 0,
"user": "userxxx"
}
]

SSR命令

1
2
3
4
5
# 开启服务并记录日志
./logrun.sh

# 停止服务
./stop.sh

Python-WingIDE安装破解

发表于 2020-12-09 | 分类于 IT , Python | | 阅读次数:

Wingware的Wing Python IDE集成开发环境系列是专门为Python编程语言创建的。这些轻量级但功能齐全的Python IDE旨在加快编写,调试和测试代码的速度,减少编码错误的发生率,并使Python代码更易于理解和导航。

阅读全文 »

Python-wxPython开发学习

发表于 2020-12-09 | 分类于 IT , Python | | 阅读次数:

wxPython是Python语言的GUI工具包,作为Python的扩展模块实现,包装了wxWidgets

阅读全文 »

运维-centos自动更新

发表于 2020-09-29 | 分类于 IT , 运维 | | 阅读次数:

yum-cron程序包使您可以自动将yum命令作为 cron作业运行,以检查,下载和应用更新

阅读全文 »

php-redis开发手册

发表于 2020-09-17 | | 阅读次数:

一、Redis 连接与认证

1
2
3
4
5
6
7
连接参数:ip、端口、连接超时时间,连接成功返回 true,否则返回 false

$ret = $redis->connect('127.0.0.1', 6379, 30);
Copy
密码认证:成功返回 true,否则返回 false

$ret = $redis->auth('123456');

二、String 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
设置键值:成功返回 true,否则返回 false

$redis->set('cfun', 'Welcome!');
获取键值:成功返回 String 类型键值,若 key 不存在或不是 String 类型则返回 false

$ret = $redis->get('cfun');
从某个 key 所存储的字符串的指定偏移量开始,替换为另一指定字符串,成功返回替换后新字符串的长度。

$ret = $redis->setRange('cfun', 7, ' to Beijing!');
获取存储在指定 key 中字符串的子字符串。

$ret = $redis->getRange('cfun', 0, 6);
设置新值,返回旧值:若 key 不存在则设置值,返回 false

$ret = $redis->getSet('cfun', 'hi man');
一次设置多个键值对:成功返回 true。

$ret = $redis->mset(['name' => 'cfun', 'age' => 18]);
一次获取多个 key 的值:返回一个键值对数组,其中不存在的 key 值为 false。

$ret = $redis->mget(['name', 'age']);
设置指定 key 的值及其过期时间,单位:秒。

参数:键名,过期时间,键值。成功返回 true。

$ret = $redis->setex('name', 10, 'cfun');
以毫秒为单位设置指定 key 的值和过期时间。成功返回 true。

$ret = $redis->psetex('name', 10, 'cfun');
key 的值不存在时,才为其设置值。key 不存在且设置成功返回 true,否则返回 false。

$ret = $redis->setnx('name', 'boby');
setnx 命令的批量操作。只有在给定所有 key 都不存在的时候才能设置成功,只要其中一个 key 存在,所有 key 都无法设置成功。

$ret = $redis->msetnx(['country' => 'China', 'city' => 'HangZhou']);
获取指定 key 存储的字符串的长度,key 不存在返回 0,不为字符串返回 false。

$ret = $redis->strlen('name');
将指定 key 存储的数字值增加 1。若 key 不存在会先初始化为 0 再增加 1,若 key 存储的不是整数值则返回 false。成功返回 key 新值。

$ret = $redis->incr('age');
给指定 key 存储的数字值增加指定增量值。

$ret = $redis->incrBy('age', 10);
给指定 key 存储的数字值增加指定浮点数增量。

$ret = $redis->incrByFloat('age', 1.5);
将指定 key 存储的数字值减一。

$ret = $redis->decr('age');
将指定 key 存储的数字值减去指定减量值。

$ret = $redis->decrBy('age', 10);
为指定 key 追加值到原值末尾,若 key 不存在则相对于 set () 函数。

$ret = $redis->append('cfun', 'haha');

三、Hash 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
为 hash 表中的字段赋值。成功返回 1,失败返回 0。若 hash 表不存在会先创建表再赋值,若字段已存在会覆盖旧值。

$ret = $redis->hSet('user', 'realname', 'cfun');
获取 hash 表中指定字段的值。若 hash 表不存在则返回 false。

$ret = $redis->hGet('user', 'realname');
查看 hash 表的某个字段是否存在,存在返回 true,否则返回 false。

$ret = $redis->hExists('user', 'realname');
删除 hash 表的一个字段,不支持删除多个字段。成功返回 1,否则返回 0。

$ret = $redis->hDel('user', 'realname');
同时设置某个 hash 表的多个字段值。成功返回 true。

$ret = $redis->hMset('user', ['name' => 'cfun', 'age' => 18]);
同时获取某个 hash 表的多个字段值。其中不存在的字段值为 false。

$ret = $redis->hMget('user', ['name', 'age']);
获取某个 hash 表所有的字段和值。

$ret = $redis->hGetAll('user');
获取某个 hash 表所有字段名。hash 表不存在时返回空数组,key 不为 hash 表时返回 false。

$ret = $redis->hKeys('user');
获取某个 hash 表所有字段值。

$ret = $redis->hVals('user');
为 hash 表中不存在的字段赋值。若 hash 表不存在则先创建,若字段已存在则不做任何操作。设置成功返回 true,否则返回 false。

$ret = $redis->hSetNx('user', 'realname', 'cfun');
获取某个 hash 表的字段数量。若 hash 表不存在返回 0,若 key 不为 hash 表则返回 false。

$ret = $redis->hLen('user');
为 hash 表中的指定字段加上指定增量值,若增量值为负数则相当于减法操作。若 hash 表不存在则先创建,若字段不存在则先初始化值为 0 再进行操作,若字段值为字符串则返回 false。设置成功返回字段新值。

$ret = $redis->hIncrBy('user', 'age', 10);
为 hash 表中的指定字段加上指定浮点数增量值。

$ret = $redis->hIncrBy('user', 'age', 1.5);

四、List 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
从 list 头部插入一个值。

$ret = $redis->lPush('city', 'ShangHai');
从 list 尾部插入一个值。

$ret = $redis->rPush('city', 'ShangHai');
获取列表指定区间中的元素。0 表示列表第一个元素,-1 表示最后一个元素,-2 表示倒数第二个元素。

$ret = $redis->lrange('city', 0, -1);
查看队列所有元素

将一个插入已存在的列表头部,列表不存在时操作无效。

$ret = $redis->lPushx('city', 'ShangHai');
将一个或多个值插入已存在的列表尾部,列表不存在时操作无效。

$ret = $redis->rPushx('city', 'NanJing');
移除并返回列表的第一个元素,若 key 不存在或不是列表则返回 false。

$ret = $redis->lPop('city');
移除并返回列表的最后一个元素,若 key 不存在或不是列表则返回 false。

$ret = $redis->rPop('city');
移除并获取列表的第一个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

参数:key,超时时间(单位:秒)

返回值:[0=>key,1=>value],超时返回 []

$ret = $redis->blPop('city', 10);
移除并获取列表的最后一个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

参数:key,超时时间(单位:秒)

返回值:[0=>key,1=>value],超时返回 []

$ret = $redis->brPop('city', 10);
移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。若源列表没有元素则返回 false。

$ret = $redis->rpoplpush('city', 'city2');
移除列表中最后一个元素,将其插入另一个列表头部,并返回这个元素。如果列表没有元素则会阻塞列表直到等待超时或发现可弹出元素为止。

参数:源列表,目标列表,超时时间(单位:秒)

超时返回 false

$ret = $redis->brpoplpush('city', 'city2', 10);
返回列表长度。

$ret = $redis->lLen('city');
通过索引获取列表中的元素。若索引超出列表范围则返回 false。

$ret = $redis->lindex('city', 0);
通过索引设置列表中元素的值。若是索引超出范围,或对一个空列表进行 lset 操作,则返回 false。

$ret = $redis->lSet('city', 2, 'changsha');
在列表中指定元素前或后面插入元素。若指定元素不在列表中,或列表不存在时,不执行任何操作。

参数:列表 key,Redis::AFTER 或 Redis::BEFORE,基准元素,插入元素

返回值:插入成功返回插入后列表元素个数,若基准元素不存在返回 - 1,若 key 不存在返回 0,若 key 不是列表返回 false。

$ret = $redis->lInsert('city', Redis::AFTER, 'changsha', 'nanjing');
根据第三个参数 count 的值,移除列表中与参数 value 相等的元素。

count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count。

count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。

count = 0 : 移除表中所有与 value 相等的值。

返回实际删除元素个数

$ret = $redis->lrem('city', 'ShangHai', -2);
对一个列表进行修剪,只保留指定区间的元素,其他元素都删除。成功返回 true。

$ret = $redis->ltrim('city', 1, 4);

五、Set 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
将一个元素加入集合,已经存在集合中的元素则忽略。若集合不存在则先创建,若 key 不是集合类型则返回 false,若元素已存在返回 0,插入成功返回 1。

$ret = $redis->sAdd('myset', 'hello');
返回集合中所有成员。

$ret = $redis->sMembers('myset');
判断指定元素是否是指定集合的成员,是返回 true,否则返回 false。

$ret = $redis->sismember('myset', 'hello');
返回集合中元素的数量。

$ret = $redis->scard('myset');
移除并返回集合中的一个随机元素。

$ret = $redis->sPop('myset');
返回集合中的一个或多个随机成员元素,返回元素的数量和情况由函数的第二个参数 count 决定:

如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。

如果 count 大于等于集合基数,那么返回整个集合。

如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

$ret = $redis->sRandMember('myset', 2);
移除集合中指定的一个元素,忽略不存在的元素。删除成功返回 1,否则返回 0。

$ret = $redis->srem('myset', 'hello');
迭代集合中的元素。

参数:key,迭代器变量,匹配模式,每次返回元素数量(默认为 10 个)

$ret = $redis->sscan('myset', $it, 'a*', 5);
将指定成员从一个源集合移动到一个目的集合。若源集合不存在或不包含指定元素则不做任何操作,返回 false。

参数:源集合,目标集合,移动元素

$ret = $redis->sMove('myset', 'myset2', 'aaa');
返回所有给定集合之间的差集,不存在的集合视为空集。

$ret = $redis->sDiff('myset', 'myset2', 'myset3');
将所有给定集合之间的差集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回差集元素个数。

参数:第一个参数为目标集合,存储差集。

$ret = $redis->sDiffStore('myset3', 'myset', 'myset2');
返回所有给定集合的交集,不存在的集合视为空集。

$ret = $redis->sInter('myset', 'myset2', 'myset3');
将所有给定集合的交集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回交集元素个数。

参数:第一个参数为目标集合,存储交集。

$ret = $redis->sInterStore('myset4', 'myset', 'myset2', 'myset3');
返回所有给定集合的并集,不存在的集合视为空集。

$ret = $redis->sUnion('myset', 'myset2', 'myset3');
将所有给定集合的并集存储在指定的目的集合中。若目的集合已存在则覆盖它。返回并集元素个数。

参数:第一个参数为目标集合,存储并集。

$ret = $redis->sUnionStore('myset4', 'myset', 'myset2', 'myset3');

六、Zset 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
将一个或多个成员元素及其分数值加入到有序集当中。如果某个成员已经是有序集的成员,则更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。

$ret = $redis->zAdd('scores', 98, 'English', 90, 'physics');
返回有序集中指定区间内的成员。成员按分数值递增排序,分数值相同的则按字典序来排序。

参数:第四个参数表示是否返回各个元素的分数值,默认为 false。

$ret = $redis->zRange('scores', 0, -1, true);
查看 Zset 所有成员以及它们各自的分数值

返回有序集中指定区间内的成员。成员按分数值递减排序,分数值相同的则按字典序的逆序来排序。

$ret = $redis->zReverseRange('scores', 0, -1, true);
返回有序集中指定分数区间的成员列表,按分数值递增排序,分数值相同的则按字典序来排序。默认使用闭区间。

$ret = $redis->zRangeByScore('scores', 90, 100, ['withscores'=>true]);
返回有序集中指定分数区间的成员列表,按分数值递减排序,分数值相同的则按字典序的逆序来排序。注意,区间表示的时候大值在前,小值在后,默认使用闭区间。

$ret = $redis->zRevRangeByScore('scores', 100, 90, ['withscores'=>true]);
迭代有序集合中的元素。

返回值:[元素名 => 分数值,,..]

$ret = $redis->zscan('scores', $it, '', 10);
返回指定有序集的元素数量。

$ret = $redis->zCard('scores');
返回有序集中指定分数区间的成员数量。

$ret = $redis->zCount('scores', 90, 100);
返回有序集中指定成员的分数值。若成员不存在则返回 false。

$ret = $redis->zScore('scores', 'math');
返回有序集中指定成员的排名,按分数值递增排序。分数值最小者排名为 0。

$ret = $redis->zRank('scores', 'chemistry');
返回有序集中指定成员的排名,按分数值递减排序。分数值最大者排名为 0。

$ret = $redis->zRevRank('scores', 'chemistry');
移除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数。

$ret = $redis->zRem('scores', 'chemistry', 'English');
移除有序集中指定排名区间的所有成员。

$ret = $redis->zRemRangeByRank('scores', 0, 2);
移除有序集中指定分数值区间的所有成员。

$ret = $redis->zRemRangeByScore('scores', 80, 90);
对有序集中指定成员的分数值增加指定增量值。若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。

$ret = $redis->zIncrBy('scores', 2, 'Chinese');
计算给定一个或多个有序集的交集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis->zinterstore('zset3', 'zset2', 'zset1');
计算给定一个或多个有序集的并集,并将其存储到一个目的有序集中。结果集中某个成员的分数值是所有给定集下该成员分数值之和。

$ret = $redis->zunionstore('zset3', 'zset2', 'zset1');
<i class="fa fa-angle-left"></i>1…567…11<i class="fa fa-angle-right"></i>

106 日志
15 分类
173 标签
GitHub E-Mail
友情链接
  • Google
  • Twitter
  • FB Page
  • VK Group
  • StackOverflow
  • YouTube
  • Instagram
© 2018 — 2025 小敏-mingo
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
本站总访问量次 本站访客数次