2020-09-30 11:58:06    253    0    0
## 压缩 ``` tar -cvf x.tar.gz x.txt y.txt ``` ## 解压 ### 解压 .tar.gz ``` tar xzvf x.tar.gz -C /home/targetDir ``` ### 解压 .zip ``` unzip x.zip -d /home/targetDir ```
2020-09-30 11:57:20    219    0    0

CentOS

  1. cat /etc/redhat-release

Ubuntu

  1. cat /etc/os-release
2020-09-30 08:22:43    241    0    0
**前言** 本篇主要讲述Go语言的命名规范。优秀的代码必须具备良好的可读性,而可读性的关键即在于命名风格。 Go的函数、变量、常量、自定义类型、包(Package)的命名方式遵循以下规则: 1)首字符可以是任意的Unicode字符或者下划线 2)剩余字符可以是Unicode字符、下划线、数字 3)字符长度不限 Go只有25个关键字 break default
2020-04-06 22:49:52    185    0    0
### 1. 可以查看各个硬盘和分区的大小 ``` fdisk -l ``` ### 2. 给新的硬盘分区 ``` #具体哪个硬盘,得看你新加的是哪个,一般第二个就是sdb或xvdb fdisk /dev/sdb ``` 输入`m`打开选择菜单: 一般新建一个分区的输入 n ,分区的类型选 p 然后选分区起始扇区和结尾扇区。 分配完成后,输入w 保存 ### 3. 设置分区格式 ``` mk
2020-03-30 22:12:28    249    0    0
通常,Linux系统中swap分区可以通过两种方式指定,分别为: 一、在磁盘分区的时候格式化一个swap分区; 二、在文件系统中创建一个swap文件作为swap分区。此文主要介绍第二种方式。步骤如下: ### 1. 创建文件 ``` sudo fallocate -l 1G /swapfile ``` CentOS 使用 dd 创建 ``` dd if=/dev/zero of=/swapfi
2019-10-19 11:25:56    369    0    0
# Mac交叉编译linux go-sqlite3错误 ## 交叉编译配置 ``` export CGO_ENABLED=1 export GOOS=linux export GOARCH=amd64 go build -o ./bin/example ./cmd/ ``` ## 错误详情 ``` sqlite3-binding.c:32753:42: error: use of undecla
2019-08-30 11:10:41    258    0    0

【业务场景】:10 万用户在同 1 秒种进行抢红包的操作,红包只有 10 个

【回答1】:
对于这种大并发抽奖, 注意 3 点
1. redis incr 使用原子计数可以解决, 并发情况下不会超发
2. 用户锁, 解决同一用户同时多次秒杀, 除非你不在乎一个用户中了多次奖品
3. 防人机, 简单的方案是图形码 或者是 CSRF 都可以
注意一下流控, 不要让大流量冲垮你的系统, 宁愿让用户看到系统忙, 也不要让用户看到 500

【回答2】:
因为 Redis 支持原子操作,所以可以使用 Redis 做。

  1. 比如 redis incr ,因为是原子操作,你不需要担心并发的问题,你只需要判断每次 incr 后的值是否小于等于 10.
  2. 使用有限资源的模式,比如使用 redis list ,先创建好 10 个资源,然后每次操作都是 pop ,因为只有 10 个资源,不会 pop 出来 11 个资源的,谁拿到资源谁就中奖。

另外,一般的配置, Redis 并发几万的请求一点问题也没有。

【回答3】:
1. 用 Redis 的 queue ,开奖前 enqueue 10 个元素进去,开奖后 dequeue ;
2. 用 Redis 的 setNx ,预定义 10 个 key ,能 setNx 成功表示得奖了

【参考文档】:
redis incr: http://redisdoc.com/string/incr.html
redis setnx:http://redisdoc.com/string/setnx.html

【相关实现】:
PHP:https://github.com/zhaocong6/lock
GO:https://github.com/go-redsync/redsync https://github.com/go-locks/distlock

docker    2019-08-01 15:59:13    241    0    0

1、容器是独立运行的一个或一组应用,及他们的运行环境。容器是Docker中的一个重要的概念。

2、docker容器的启动有三种方式
a.交互方式,基于镜像新建容器并启动
例如我们可以启动一个容器,打印出当前的日历表

  1. [root@rocketmq-nameserver4 ~]# docker run my/python:v1 cal ##my/python:v1为镜像名和标签

我们还可以通过指定参数,启动一个bash交互终端。

  1. [root@rocketmq-nameserver4 ~]# docker run -it my/python:v1 /bin/bash

参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。

使用docker run命令来启动容器,docker在后台运行的标准操作包括
1.检查本地是否存在指定的镜像,不存在则从公有仓库下载
2.使用镜像创建并启动容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
5.从地址池分配一个ip地址给容器
6.执行用户指定的应用程序
7.执行完毕之后容器被终止

映射本地文件夹到容器

  1. docker run -it -v /c/Work/sm2:/home/sm2 lizarel/phpstudy:php71 /bin/bash

b、短暂方式,直接将一个已经终止的容器启动运行起来
可以使用docker start命令,直接将一个已经终止的容器启动运行起来。

  1. [root@rocketmq-nameserver4 ~]# docker run my/python:v1 /bin/echo hello test
  2. hello test

命令执行完,控制台会打印"hello test",container就终止了,不过并没有消失,
可以用docker ps -n 5看一下最新前5个的container,第一个就是刚刚执行过的container,可以再次执行一遍:docker start container_id

不过这次控制台看不到”hello tes

2019-08-01 15:56:21    732    0    0

安装OpenSSL

  1. wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz
  2. tar zxvf openssl-1.1.1c.tar.gz
  3. cd openssl-1.1.1c
  4. ./config shared zlib --prefix=/usr/local/ssl

一定记得加上shared选项,不然重新编译php的openssl扩展的时候,OpenSSL Library Version和OpenSSL Header Version会不一致。用--prefix指定安装路径

  1. make && make install
  2. mv /usr/bin/openssl /usr/bin/openssl.bak
  3. mv /usr/include/openssl /usr/include/openssl.bak
  4. # ① 用find / -name openssl查询一下(如果PHP采用了--with-openssl=/usr/local/openssl选项来编译,一般和这个选项的值相同),所以也有可能是这个路径
  5. # mv /usr/local/openssl /usr/local/openssl.bak
  6. ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
  7. ln -s /usr/local/ssl/include/openssl /usr/include/openssl
  8. # 用find / -name openssl查询一下,也有可能是这个路径(同① )
  9. # ln -s /usr/local/ssl/include/openssl /usr/local/openssl
  10. echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
  11. ldconfig

查看openssl版本

  1. openssl version

升级PHP的OpenSSL扩展

OpenSSL未与PHP一起编译的情况下的升级

  1. 进入PHP源码中的openssl扩展文件夹
  1. cd /root/lnmp/src/php-7.2.20/ext/openssl
  1. 准备c
2019-05-14 00:28:05    144    0    0
Twig中有两种定界符{% ... %} 和 {{ ... }} , 前一种用来执行语句,比如for循环、IF判断、过滤等操作,后一种模版中用来显示变量。 ## Twig常用用法 ### 可用符号 == != < > >= <= + - ~ * / // % ** | [] . .. and or not in is b-and b-or b-xor 部分符号的含义如下 `~`:连接两字符串,相当于 PHP 中的点号 `//`:整除 `**`:乘方,相当于 PHP 中的 ^ `b-and`、`b-or`、`b-xor`:按位与、按位或、按位异或 `-`:减法以及去除空白的简写用法,如 {{- 数据 }} => 去除左边的空白、{{ 数据 -}} => 去除右边的空白、{{- 数据 -}} => 去除两边的空白 ### 注释 ``` {# This is Twig Comme
7/10