Git Reset 三种模式
在使用 Git 进行版本控制时,我们经常需要撤销一些提交,回到之前的状态。Git 提供了 reset 命令来实现这个功能。本文将介绍 Git reset 命令的三种模式:--soft、--mixed 和 --hard,并解释它们之间的区别和用途。 正文1. --soft 模式git reset --soft 模式用于撤销提交,但保留暂存区和工作区的修改。下面是一个示例: git reset --soft HEAD~1 在上述示例中,HEAD~1 表示回退到上一个提交,使用 --soft 模式后,Git 会将当前分支的 HEAD 移动到指定的提交位置,并且保留之前的修改。这样做的好处是可以重新提交之前的修改,方便对代码进行调整和优化。 2. --mixed 模式git reset --mixed 模式是默认的模式,用于撤销提交并重置暂存区,但保留工作区的修改。下面是一个示例: git reset --mixed HEAD~1 在上述示例中,HEAD~1 表示回退到上一个提交,使用 --mixed 模式后,Git 会将当前分支的 HEAD 移动到指定的提交位置,并且重置暂存区...
MySql 不存在则插入,存在则更新或忽略
在进行数据插入操作时,我们经常遇到的需求是:如果数据不存在,则插入新数据;如果数据已存在,则更新已有数据或忽略该操作。这种情况在数据库领域非常常见。本文将介绍如何在 MySql 数据库中实现该功能。 正文1. 不存在则插入,存在则更新1.1 使用 ON DUPLICATE KEY UPDATE 语句如果我们想要插入的数据会导致唯一索引或主键发生冲突,可以使用 ON DUPLICATE KEY UPDATE 语句来执行更新操作。下面是一个示例: INSERT INTO `student` (`name`, `age`) VALUES ('Jack', 19) ON DUPLICATE KEY UPDATE `age` = 19; 在上述示例中,如果存在 name='Jack' 的数据,则执行更新操作,将 age 更新为 19。如果不存在该条数据,则插入新数据。执行该语句后,受影响的行数为 2,因为数据库中已存在一条 name='Jack' 的数据。 1.2 使用 REPLACE INTO 语句另一种实现方式是使用 RE...
解决 cURL 命令警告 "Binary output can mess up your terminal"
解决 cURL 命令警告 “Binary output can mess up your terminal”当使用 cURL 命令访问网站 https://www.mi.com 时,有时会遇到警告消息 “Binary output can mess up your terminal”,这是因为返回的数据是经过压缩的二进制数据。为了正确处理这种情况,我们可以使用 --compressed 选项告诉 cURL 直接处理解压。 以下是使用 --compressed 选项的示例命令: curl -k -L -s --compressed https://www.mi.com 上述命令将以压缩格式获取 https://www.mi.com 的内容,并将其显示在终端上。这将解决警告问题,并使 cURL 正确处理压缩数据。 结论通过使用 --compressed 选项,我们可以告诉 cURL 命令正确处理压缩的返回数据,避免出现 “Binary output can mess up your terminal” 警告。这种方法对于访问返回压缩数据的网页非常有用。 引用文献 John Do...
MySQL之Gap-Locks与Next-key-Locks
介绍Next-Key Locks 是 MySQL 的 InnoDB 存储引擎的一种锁实现。 MVCC 不能解决幻影读问题,Next-Key Locks 就是为了解决这个问题而存在的。在可重复读(REPEATABLE READ)隔离级别下,使用 MVCC + Next-Key Locks 可以解决幻读问题。而Next-Key就是行锁+Gap锁的组合。 InnoBD的三种行级锁 Record Lock:锁定一个记录上的索引,而不是记录本身。如果表没有设置索引,InnoDB 会自动在主键上创建隐藏的聚簇索引,因此 Record Locks依然可以使用。 Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。 Next-Key Lock:1、2组合,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。 Gap Lock Gap Lock,又称为间隙锁。存在的主要目的就是为了防止在可重复读的事务级别下,出现幻读问题。 在可重复读的事务级别下面,普通的select读的是快照,不存在幻...
Redis 执行 Lua,能保证原子性吗?
Redis 和 Lua,两个看似风流马不相及的技术框架,为什么能产生“爱”的火花,成为工作中的黄金搭档?面试中更是高频出现:Redis 执行 Lua,到底能不能保证原子性? 一、原子性在回答问题之前,需要对“原子性”这个概念有一个清新的认识,因此,我们首先要分析的是原子性的概念。 关系型数据库的原子性通常意义上,我们说的原子性是指关系型数据库RDBMS(比如 MySQL)的原子性,也就是 ACID(Atomicity、Consistency、Isolation、Durability)中 Atomicity这一项特性。 ACID 中的原子性指是:事务中的所有操作要么全部执行成功,要么全部失败回滚。 这里以银行转账这个生活实例来解释原子性:账户A 给 账户B 转账100元,原子性就是指账户A减去100元的同时,账户B必须增加100元,如果账户A减少100元,账户B没有增加100元,该操作就不具备原子性,需要进行回滚,将账户A减少的100元加回去。JAVA 代码实现如下: Lua 原子性Lua 本身并没有提供对于原子性的直接支持,它只是一种脚本语言,通常是嵌入到其他宿主程序中运行...
验证证书签名请求(CSR)的签名
要对CSR文件进行签名验证,您需要将CSR文件提交给证书颁发机构(Certificate Authority,CA)或使用自签名证书进行验证。下面是使用OpenSSL工具进行CSR签名验证的步骤: 使用CA进行签名验证 将CSR文件(csr.pem)提交给证书颁发机构(CA)。CA将使用其私钥对CSR进行签名,并生成相应的数字证书。 从CA处获取签名后的证书文件(certificate.crt)。 使用以下命令进行签名验证: openssl req -verify -in csr.pem -noout -text 此命令将验证CSR文件的签名,并输出有关证书请求的详细信息。 如果验证成功,您将看到CSR的详细信息,包括公钥、组织信息和常用名称等。 使用自签名证书进行验证如果您使用自签名证书进行验证,可以按照以下步骤操作: 使用以下命令生成自签名证书: openssl x509 -req -in csr.pem -signkey private_key.pem -out certificate.crt 这将使用私钥(private_key.pem)对CSR进行自签...
使用OpenSSL生成RSA私钥和公钥
使用OpenSSL生成RSA私钥和公钥在加密和安全领域中,RSA是一种常用的非对称加密算法。通过OpenSSL工具,您可以轻松地生成RSA私钥和公钥。本文将介绍使用命令行生成RSA私钥和基于私钥创建RSA公钥的步骤,并提供示例命令。 创建RSA私钥使用以下命令可以生成RSA私钥: openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 这将生成一个2048位的RSA私钥,并将其保存在名为private_key.pem的文件中。 基于私钥创建RSA公钥使用以下命令可以基于RSA私钥生成RSA公钥: openssl rsa -pubout -in private_key.pem -out public_key.pem 这将从private_key.pem文件中读取RSA私钥,并生成对应的RSA公钥,并将其保存在名为public_key.pem的文件中。 示例命令下面是生成RSA私钥和公钥的示例命令: openssl genpkey -algorithm RSA -out...
使用OpenSSL生成证书签名请求(CSR)
使用OpenSSL生成证书签名请求(CSR)在加密和安全领域中,生成证书签名请求(Certificate Signing Request,CSR)是一个重要的步骤。通过OpenSSL工具,您可以使用私钥文件(private_key.pem)生成CSR文件(csr.pem)。本文将介绍使用命令行执行此操作的步骤,并提供生成CSR文件的示例命令。 生成CSR命令以下是使用OpenSSL工具生成CSR文件的命令: openssl req -new -key private_key.pem -out csr.pem 命令说明 openssl req: OpenSSL工具的CSR相关命令。 -new: 表示创建新的CSR。 -key private_key.pem: 指定私钥文件的路径和文件名。 -out csr.pem: 指定生成的CSR文件的路径和文件名。 生成CSR示例执行上述命令后,您将被要求提供一些信息,包括国家/地区代码、组织名称、组织单位、常用名称等。请按照提示逐步提供所需的信息,并确保您的输入准确无误。 以下是生成CSR文件的示例命令: openssl r...
PHP 实现JWT认证
使用PHP实现JWT认证JSON Web Token(JWT)是一种用于在网络应用间传递身份认证信息的开放标准。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。在本篇博客中,我们将介绍如何在PHP应用程序中使用JWT进行身份认证。 1. 安装依赖库首先,我们需要使用Composer来管理我们的依赖库。在项目根目录下创建一个composer.json文件,并添加以下内容: { "require": { "firebase/php-jwt": "^5.4" }} 然后在命令行终端中运行以下命令安装依赖库: composer install 2. 生成JWT在PHP应用程序中生成JWT需要使用firebase/php-jwt库。以下是一个生成JWT的示例: <?phprequire 'vendor/autoload.php';use Firebase\JWT\JWT;$key = 'your_...
OpenSSL/1.0.2k-fips: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
接上文说 对接三方平台接口, curl 请求接口 抛错 OpenSSL/1.0.2k-fips: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version 网上搜了很多 , 有说设置升级php8.0 有的说强制设置 1.0 还有的如下 curl --tlsv1.2 -X GET .... 都不解决问题. 原因就是第三方不支持 OpenSSL 1.0.2k 以下版本. 升级是可行的, 但不是升级php8.0, 而是本地的 openssl , 由于是亚马逊的centos 没有办法yum 升级(吐槽亚马逊). $ wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz$ tar xvf openssl-1.1.1k.tar.gz$ cd openssl-1.1.1k/$ ./config --prefix=/usr/local/openssl$ make && make install 安装后 cur...





