- 博客(55)
- 收藏
- 关注
原创 paypal支付接口开发-Golang版
做全球性的支付,选用paypal!为什么选择paypal? 因为paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台。买家只需知道你的paypal账号,即可在线直接把钱汇入你的账户,即时到账,简单方便快捷。一、环境准备注册paypal账号先去“https://www.paypal.com”注册一个paypal账号,这一步就不演示了。登陆paypal开发者账号在浏览器输入“https://developer.paypal.com”,点击右上角的“L
2020-07-15 11:06:19 2856
原创 supervisor维护golang进程
golang supervisor准备工作:先整一个简单的golang http服务:文件名为demopackage main import ( "fmt" "log" "net/http") func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world") }) er
2020-06-29 22:32:12 741
原创 Git简介和使用教程
版本控制:1. 概念:对软件开发过程中,各种程序代码,配置文件、说明文档等文件变更管理 。2. 功能:追踪文件的变更,将文件什么时候、由什么人更改以及更改的内容等信息记录下来实现并行开发3. 特点:随着文件的改变,文件的版本号回增加。4. 内容:输入输出控制分支与合并历史纪录5. 常用的版本控制工具集中式:SVN,CVS等分布式:Git集中式与分布式:1. 集中式版本...
2019-06-07 11:29:06 497
原创 M1 Pro MacBook Pro 上的奇遇:Rust 构建失败,SIGKILL 惊魂记
在 M1 Pro MacBook Pro 上运行 Rust 项目时频繁出现 SIGKILL 异常,导致构建失败。本文分析了可能的原因并提供了解决方案,包括调整 strip 命令路径和优化 PATH 环境变量设置。
2024-10-29 17:24:33 605
原创 阿里云ECS centos配置vnc远程连接
1、安装图形界面软件包:yum groupinstall "Server with GUI" -y此过程相对较耗时,稍等,直至底部出现Complete!字样即可进入下一步。2、设置图形模式为默认模式启动systemctl set-default graphical3、重启reboot...
2021-09-13 14:45:03 437
原创 在Docker的CentOS镜像中安装mysql和redis
目标:在docker中拉centos,并在里面部署MySQL和Redis,把新容器保存为文件。1.#似乎与真实环境比较接近 docker run -it --privileged --name centos7 centos:7 /usr/sbin/init安装mysql1.安装wget yum install wget2.使用:rpm -ivh mysql57-community-release-el7-9.noarch.rpm 安装源3.安装 yum install mysql-serv
2020-10-29 10:08:41 531
原创 Go发送Gmail邮件
一、创建Gmail应用专用密码官方教程已经很详细了(附链接)https://support.google.com/accounts/answer/185833?hl=zh-Hans&ref_topic=7189145注意:创建时选择其他,不要选mail。创建完成后先记录应用专用密码,下面代码中会用到。二、代码实现package gmailimport ( "crypto/tls" "fmt" "log" "net/smtp")type mail struct { us
2020-09-07 23:00:03 2056
原创 openssl生成自签名证书
打开终端,按如下步骤制作证书:#1、会生成server.key文件openssl genrsa -des3 -out server.key 2048#2、创建证书请求,会生成server.csr。 common name:域名openssl req -new -key server.key -out server.csr#3、测试方便,删除密码openssl rsa -in server.key -out server_no_passwd.key#4、生成server.crtopenssl
2020-08-11 11:08:00 878
原创 golang对接支付宝支付
沙箱环境文档:https://docs.open.alipay.com/200/105311/沙箱地址:https://openhome.alipay.com/platform/appDaily.htm密钥(文档已经很详细了,附链接)https://opendocs.alipay.com/open/291/105971#Krqvg代码使用的第三方库github.com/smartwalle/alipay/v3代码简单实现网页支付package paysimport ..
2020-07-31 22:28:58 2580
原创 go gin框架swagger生成api文档
下载安装swaggo get -u github.com/swaggo/swag/cmd/swag生成docs/doc.go、docs/swagger.json、docs/swagger.yamlswag init下载gin-swaggergo get -u github.com/swaggo/gin-swaggergo get -u github.com/swaggo/files在router中倒入包以及注册路由"github.com/gin-gonic/gin"g..
2020-07-27 11:11:57 448
原创 Nginx其他常见高级模块
配置语法secure_link_module模块作用:制定并允许检查请求的链接的真实性以及保护资源免遭未经授权的访问。限制链接生效周期,防止不断的被盗用,资源频繁被下载。Syntax: secure_link expression;Default: Context: http,server,locationSyntax: secure_link_md5 expression;Default: Context: http,server,location# 示例secure_
2020-07-26 20:22:22 175
原创 Nginx的rewrite规则
作用:实现url重写以及重定向。(依赖于正则表达式)场景:URL访问跳转,支持开发设计。页面跳转,兼容性支持,展示效果等。SEO优化搜索引擎的录入(规范)等维护后台维护、流量转发等。安全实现伪静态配置语法Syntax: rewrite regex replacement [flag];Default: Context: if,server,location#示例:#把所有的页面都重定向到一个页面。 rewrite ^(.*)$ /pages/ma
2020-07-26 20:21:20 163
原创 Nginx缓存服务
配置语法proxy_cache配置Syntax: proxy_cache_path path [levels=levels][use_temp_path=on|off]keys_zone=name:size[inactive=time][max_size=size][manager_files=number][manager_sleep=time][manager_threshold=time][loader_files=number][loader_sleep=time][loader_thres
2020-07-26 20:20:02 141
原创 Nginx负载均衡
GSLB:全局负载均衡SLB:在一个地域,nginx就是SLBnginx负载均衡原理:客户 ------------> nginx -----------> upstream servernginx转发到一组虚拟的服务池,叫upstream server(里面可以定义服务单元,里面实现了不断的轮询)。配置语法upstream配置Syntax: upstream name {...};Default:Context: http后端服务器在负载均衡调度中的状态.
2020-07-26 20:19:03 249
原创 Nginx代理服务
客户---------------->HTTP | ICMP\POP\IMAP | HTTPS | RTMP(流媒体常用格式) ----------------->Http server | Mail server | Http server | media server正向代理:代理的对象是客户端反向代理:代理的对象是服务端配置语法代理服务Syntax: proxy_pass URL;Default:Context: location,if in locati
2020-07-26 20:17:34 189
原创 Nginx静态资源web服务
配置语法:文件读取Syntax: sendfile on|off;Default: sendfile off;Context: http,server,location,if in locationtcp_nopush(不是着急的发送给客户端)作用:sendfile开启的情况下,提高网络包的传输效率。解释:比如一个发快递的场景,如果有10个包裹,发10次,就要叫10次快递员来发送。那么可以把10个包裹整理到一起,一次性发送出去。Syntax: tcp_nopush on|off;
2020-07-26 20:15:58 199
原创 Nginx常用的基础配置
配置语法nginx的客户端状态 http_stub_statusSyntax: stub_status;Default: Context: server,location#示例:location /mystatus { stub_status;}目录中选择一个随机页面展示 http_random_indexSyntax: random_index on|off;Default: random_index off;Context: location连接限制S
2020-07-26 20:13:58 140
原创 初识Nginx
Nginx是一个高效、可靠的web服务和代理中间件一、为什么选择nginx?I/O多路复用(epoll) 多个描述符的I/O操作都能在一个线程内并发的、交替地顺序的完成。这就叫I/O多路复用。这里的“复用”指的是复用一个线程。select与epollselect:能够监视文件描述符数量的最大限制(1024)线性扫描效率低下epoll:每当FD就绪,采用系统回调函数直接将fd放入,效率更高。最大连接无限制轻量级功能模块少代码模块化cpu亲和
2020-07-26 20:12:28 140
原创 HTTPS协议
HTTPS协议加密加密分为两种方式一种是对称加密(比如DES,AES),一种是非对称加密(RSA)。在对称加密算法中,加密和解密使用的密钥是相同的。在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一把是作为公开的公钥,另一把是作为谁都不能给的私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。公钥加密只能私钥解密,私钥签名只能公钥验签数字证书 不对称加密也存在同样的问题,如何将不对称加密的公钥给对方呢?一种是放在一个公网的地址上,让对方下载;另一种就是在建立
2020-06-30 22:22:53 314
原创 http协议
HTTP协议 HTTP 协议,几乎是每个人上网用的第一个协议,同时也是很容易被人忽略的协议。 http://www.163.com 是个 URL,叫作统一资源定位符。HTTP 请求的准备浏览器会将 www.163.com 这个域名发送给 DNS 服务器,让它解析为 IP 地址。HTTP 是基于 TCP 协议的,然后建立 TCP 连接。建立连接以后,浏览器就要发送 HTTP 的请求。HTTP 请求的构建 HTTP 的报文大概分为三大部分。分别是请求行,请求的首部(请求头),请求
2020-06-30 22:19:48 210
原创 Golang中的位运算
位运算可能在平常的编程中使用的并不多,但涉及到底层优化,一些算法及源码可能会经常遇见。位运算简单介绍:位与. &位或. |异或. ^左移. <<右移. >>与操作:&1 & 1 = 11 & 0 = 00 & 1 = 00 & 0 = 0或操作:!1 | 1 = 11 | 0 = 10 | 1 = 10 & 0 = 0异或:^1
2020-06-29 11:39:00 397
原创 shell编程
Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命令,又可以利用Shell脚本编程去执行一、变量SHELL 变量可分为两类:局部变量和环境变量。局部变量: 简单的理解变量,相当于定义一个别名=名称,引用的时候加上$符号就可以了。#例如定义变量 name=wuguangke#执行 将会显示 wuguangkeecho $name 常见的系统变量#当前用户的ID,root为0echo $UID#当前所在的目录echo $PWD#当前程序的名称
2020-06-25 18:07:53 270
原创 分布式存储
CAP理论一、什么是 CAP? C 代表 Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。 A 代表 Availability,可用性,是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。 P 代表 Partition Tolerance,分区容错性,是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络
2020-06-14 20:00:01 1161
原创 PubSub
消息多播 消息多播允许生产者生产一次消息,中间件负责将消息复制到多个消息队列,每个消息队列由相应的消费组进行消费。它是分布式系统常用的一种解耦方式,用于将多个消费组的逻辑进行拆分。支持了消息多播,多个消费组的逻辑就可以放到不同的子系统中。PubSub 支持消息多播,这个模块的名字叫着 PubSub,也就是 PublisherSubscriber,发布者订阅者模型。 Redis PubSub 的生产者和消费者是不同的连接,使用了两个 Redis 的连接。这是必须的,因为 Redis 不允许
2020-06-14 17:14:11 412
原创 管道
Redis 管道 (Pipeline) 本身并不是 Redis 服务器直接提供的技术,这个技术本质上是由客户端提供的,跟服务器没有什么直接的关系。本质:两个连续的写操作和两个连续的读操作总共只会花费一次网络来回,就好比连续的 write 操作合并了,连续的 read 操作也合并了一样。这便是管道操作的本质,服务器根本没有任何区别对待,还是收到一条消息,执行一条消息,回复一条消息的正常的流程。客户端通过对管道中的指令列表改变读写顺序就可以大幅节省 IO 时间。管道中指令越多,效果越好。 对
2020-06-14 17:13:29 177
原创 redis持久化
Redis 的持久化机制有两种,第一种是快照,第二种是 AOF 日志。 快照是一次全量备份,AOF 日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。AOF 日志在长期的运行过程中会变的无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会无比漫长。所以需要定期进行 AOF 重写,给 AOF 日志进行瘦身。快照原理多进程 Redis 在持久化时会调用 glibc 的函数fork产生一个子进程,快照持久
2020-06-14 17:11:30 145
原创 线程 IO 模型
一、Redis 单线程为什么还能这么快? 因为它所有的数据都在内存中,所有的运算都是内存级别的运算。正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些时间复杂度为 O(n) 级别的指令,一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。Redis 单线程如何处理那么多的并发客户端连接? 多路复用二、非阻塞 IO 当我们调用套接字的读写方法,默认它们是阻塞的,比如read方法要传递进去一个参数n,表示最多读取这么多字节后再返回,如果一个字节都没有,那么线程就会
2020-06-14 17:09:36 229
原创 Scan
**keys:**Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key。127.0.0.1:6379> set codehole1 aOK127.0.0.1:6379> set codehole2 bOK127.0.0.1:6379> set codehole3 cOK127.0.0.1:6379> set code1hole aOK127.0.0.1:6379> set code2hole bOK127.0.0.1
2020-06-14 17:07:26 415
原创 GeoHash简单介绍
意味着我们可以使用 Redis 来实现摩拜单车「附近的 Mobike」、美团和饿了么「附近的餐馆」这样的功能GeoHash 算法将二维的经纬度数据映射到一维的整数,这样所有的元素都将在挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。它的内部结构实际上只是一个 zset(skiplist)。通过 zset 的 score 排序就可以得到坐标附近的其它元素 (实际情况要复杂一些,不过这样理解足够了),通过将 score 还原成坐标值就可以得到元素的原始坐标。...
2020-06-14 17:03:41 290
原创 限流
简单限流如何限定用户的某个行为在指定的时间里只能允许发生 N 次?eg:一分钟内只允许最多回复 5 个帖子。整体思路就是:每一个行为到来时,都维护一次时间窗口。将时间窗口外的记录全部清理掉,只保留窗口内的记录。zset 集合中只有 score 值非常重要,value 值没有特别的意义,只需要保证它是唯一的就可以了。(设置 zset 过期时间,避免冷用户持续占用内存)漏斗限流Redis 4.0 提供了一个限流 Redis 模块,它叫 redis-cell。该模块也使用了漏斗算法,并提供了原子的限流指令
2020-06-14 17:02:37 163
原创 布隆过滤器
set 中会存储每个元素的内容,而布隆过滤器仅仅存储元素的指纹。概念:布隆过滤器可以理解为一个不怎么精确的 set 结构,当你判断某个对象是否存在时,它可能会误判。(只会误判那些没见过的元素)基本使用:布隆过滤器有二个基本指令,bf.add 添加元素,bf.exists 查询元素是否存在,它的用法和 set 集合的 sadd 和 sismember 差不多。注意 bf.add 只能一次添加一个元素,如果想要一次添加多个,就需要用到 bf.madd 指令。同样如果需要一次查询多个元素是否存在,就需要用到
2020-06-07 22:46:16 321
原创 HyperLogLog
PV、UV、IP概念:PV:访问量,网站的点击量或者浏览量,用户每打开一次页面就加1,刷新也加1UV:独立访客的意思,访问网站的一台设备是一个访客,网站判断是否为同一台电脑,主要是通过cookie的方式实现IP:独立IP数,统计有多少个ip访问了网站HyperLogLog 数据结构是 Redis 的高级数据结构需要占据一定 12k 的存储空间,标准误差是 0.81%使用场景:不适合统计单个用户相关的数据。如果你的用户上亿,可以算算,这个空间成本是非常惊人的。但是相比 set 存储方案,Hype
2020-06-07 22:44:30 228
原创 位图
场景:会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天。如果使用普通的 key/value,每个用户要记录 365 个,当用户上亿的时候,需要的存储空间是惊人的。Redis 提供了位图数据结构,这样每天的签到记录只占据一个位,365 天就是 365 个位,46 个字节 (一个稍长一点的字符串) 就可以完全容纳下,这就大大节约了存储空间。常用命令:setbit、getbitbitcount:统计指定位置范围内 1 的个数bitpos:查找指定范围
2020-06-07 22:40:06 157
原创 延时队列
异步消息队列:Redis 的 list(列表) 数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列,使用lpop 和 rpop来出队列。队列空了怎么办?1.客户端就会陷入 pop 的死循环,可以sleep 1秒。2.使用阻塞读:阻塞读在队列没有数据的时候,会立即进入休眠状态,一旦数据到来,则立刻醒过来。消息的延迟几乎为零。用blpop/brpop替代前面的lpop/rpop注意:闲置过久,服务器一般会主动断开连接,减少闲置资源占用。注意异常捕获。延时队列:通过 Redis
2020-06-07 22:38:15 209
原创 分布式锁
场景:一个操作要修改用户的状态,修改状态需要先读出用户的状态,在内存里进行修改,改完了再存回去。如果这样的操作同时进行了,就会出现并发问题,因为读取和保存状态这两个操作不是原子的。setnx(数据存在则返回错误) > expire(设置过期时间) > 解锁(删除数据)缺点:在 setnx 和 expire 之间服务器进程突然挂掉了,就会导致 expire 得不到执行,也会造成死锁进化:Redis 2.8 版本中作者加入了 set 指令的扩展参数,使得 setnx 和 expire 指令可以
2020-06-07 22:35:17 152
原创 分布式事务
概念:分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成。分布式事务主要是解决在分布式环境下,组合事务的一致性问题。实现分布式事务有 3 种基本方法:基于 XA 协议的二阶段提交协议方法;协调者向参与者发送执行消息,参与者开始执行,执行成功yes,失败no。协调者根据响应,给参与者发送提交或回滚消息。缺点:同步阻塞问题:在执行过程中,所有参与节点都是事务阻塞型的。当本地资源管理器占有临界资源时,其他资源管理器如果要访问同一临界资源,会处于阻塞状态。单点故障问题:一旦事务管理器
2020-06-07 21:38:23 192
原创 分布式共识
一、什么是分布式共识:分布式共识的本质就是“存异求同”。分布式共识就是在多个节点均可独自操作或记录的情况下,使得所有节点针对某个状态达成一致的过程。分布式共识包括两个关键点,获得记账权和所有节点或服务器达成一致。二、3 种主流的解决分布式在线记账一致性问题的共识技术:PoW算法(工作量证明):是以每个节点或服务器的计算能力(即“算力”)来竞争记账权的机制,因此是一种使用工作量证明机制的共识算法.缺点:共识达成的周期长、效率低,资源消耗大。PoS算法(权益证明):为了解决 PoW 算法的问
2020-06-07 21:36:57 1939
原创 分布式选举
为什么要有分布式选举?主节点,在一个分布式集群中负责对其他节点的协调和管理,保证其他节点的有序运行。分布式选举的算法:Bully算法:在所有活着的节点中,选取 ID 最大的节点作为主节点。集群中每个节点均知道其他节点的 ID节点:主节点和普通节点三种消息:Election 消息,用于发起选举;Alive 消息,对 Election 消息的应答;Victory 消息,竞选成功的主节点向其他节点发送的宣誓主权的消息。eg:MongoDB 的副本集故障转移功能。MongoDB 的分布式选举中,采用
2020-06-07 20:15:24 368
原创 初识分布式
单机模式的主要问题是:性能受限,存在单节点失效问题。数据并行(数据分布式):多台计算机并行执行多个相同的任务。缩短了所有任务的整体执行时间,但对提升单个任务的执行性能及降低时延无效。任务并行(任务分布式):指将单个复杂的任务拆分为多个子任务,从而使得多个子任务可以在不用的计算机上并行执行。提供了更好的性能,扩展性,可维护性,但带来设计复杂性问题。1.分布式是什么?分布式就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。数据并行,任务并行都是分布式的一种形态。2.分布式的目的
2020-06-07 17:40:43 210
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人