自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小僵尸打字员的博客

天将降大任于斯人也

  • 博客(124)
  • 收藏
  • 关注

原创 手摸手教你写任务中心-积分冻结&解冻&消耗

继上一篇积分领取&消耗&回收 之后, 基本上就能满足大部分公司的业务需求了;但是, 还有有部分公司业务可能会涉及到冻结&解冻(比如金融交易公司), 再配合上回收可以说处理复杂度又上了一层;至此应该就是整体的任务中心积分逻辑了, 暂时想不到更复杂的场景了, 大家有什么更复杂的需求可以提出来一块讨论一下, 或者有什么性能更优的处理方案欢迎分享;

2023-06-14 09:43:14 514

原创 手摸手教你写任务中心-积分领取&消耗&回收

继上一篇签到任务之后呢, 就有朋友让我写一下任务积分的领取和使用, 以及回收;其实前面两种都不难, 就只是积分的加减而已, 真正麻烦的是回收, 有回收的话你就需要考虑到每笔积分存在多种状态的可能了;积分功能应该是很多APP都会做的一个功能了, 领取消耗很简单, 但是再加上回收的话就比较复杂了, 何况在不能后置使用的情况下还要保证性能, 这个就值得我们思考如何更有效的实现功能, 那么, 如果在此基础上再加上冻结, 解冻及消耗呢?

2023-06-13 09:44:17 451

原创 手摸手教你写任务中心-签到任务

不会吧不会吧, 都2202年了还有人不会写签到?redis位图实现签到功能简单方便, 走过路过可不要错过呦!

2023-06-13 09:42:37 595

原创 Go语言框架中如何快速集成限流中间件

在我们的日常开发中, 常用的中间件有很多, 今天来讲一下怎么集成限流中间件, 它可以很好地用限制并发访问数来保护系统服务, 避免系统服务崩溃, 资源占用过大甚至服务器崩溃进而影响到其他应用!通常我们的服务会同时存在多个进程, 也就是负载来保证服务的性能和稳定性, 那么就需要走一个统一的限流, 这个时候就需要借助我们的老朋友-redis, 来进行分布式限流;这个就只适用于单个服务进程的限流, 比如个人搭的一些小网站之类的;上面的代码均摘自我开发的一个开源项目中。

2022-10-09 17:20:41 638 1

原创 Go语言框架中如何快速集成RabbitMq

在我们日常开发中, 消息队列是必不可少的一环, RabbitMq是一个实现了AMQP高级消息队列协议的消息队列服务, 也是我们比较常用的消息队列, 还可以实现延迟消费, 今天来说说怎么把它集成到我们的开发框架中;上面的代码均摘自我开发的一个开源项目中, 主要是一个Go的标准项目布局, 封装了一些常用的组件, 有兴趣的朋友可以了解一下, 新手极易上手;

2022-10-09 15:40:08 1786 3

原创 GO语言框架中如何快速集成日志模块

在我们的日常开发中, 日志模块永远是最基础且最重要的一个模块, 它可以有效的帮我们发现问题, 定位问题, 最后去解决问题;zap是一个可以在go项目中进行快速, 结构化且分级的日志记录包, git star数高达16.3k,Git 项目地址, 在各大公司项目中被广泛使用;...

2022-08-16 18:47:18 336 2

原创 Go函数并发情况的错误处理

最近遇到了一个很有意思的问题, 感觉值得写一篇博客来记录一下, 也在大家遇到这种问题的时候可以有个参考;下面这段代码大家都不陌生吧, 一个简单的多程处理, 大家可以看看有没有什么问题

2022-06-30 18:03:22 357

原创 Goroutine 最大数量的限制

前言最近有个朋友, 刚入职没多久就被组长叼了, 原因是他在业务场景中开Goroutine导致测试服务器资源占用过大, 其他服务都崩了…场景类似于监听区块链交易, 对每个区块进行轮询处理每笔交易, 他直接循环开Goroutine处理每笔交易, 数据大了goroutine开的太多导致资源占用过大, 导致了这场悲剧;工作中我们需要开Goroutine来提高代码处理的效率, 但也不能滥用, 需要对它进行一定限制, 保证资源占用在可控范围内, 所以我们需要对项目中Goroutine的数量进行限制, 用chann

2022-03-04 15:41:50 9763

转载 代码评审中的MySQL(团队规范)

原文作者: 翁智华;原文: https://www.cnblogs.com/wzh2010/p/15027366.html数据库对象命名规范数据库对象数据库对象是数据库的组成部分,常见的有以下几种: 表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等。 命名规范是指数据库对象如数据库(SCHEMA)、表(TABLE)、

2022-02-23 10:05:05 162

原创 Docker端口映射只有Ipv6端口导致Ipv4访问不通

前言我有一个朋友, 他在Dev 和 Test 服务器用Docker 搭建了Redis 供项目使用, 然后今天Test 环境的Redis 端口访问不通了, 在服务上可以正常连接, 真是离了个大齐, 让我们试试排查排查问题;正文端口检测 lsof已确认在本地用 telnet ip 6381 访问不通, 那就上服务上看看端口情况DevTestDev环境同时映射到Ipv6和Ipv4端口, Test环境仅映射到Ipv6, 那基本上就可以断定是环境问题了容器状态 docker ps既然端口映射

2022-02-22 18:37:14 7285 3

原创 Go源码解读-sync.Map的实现

前言我有一个朋友, 最近困扰于map的线程安全问题, 每次都要单独定义个结构体加锁处理, 例如以下结构体type SafeMap struct { m map[string]interface{} mu sync.RWMutex}每次都要加锁解锁太麻烦, 问我有没有其他的实现方式这不巧了吗, 官方考虑到了这种情况已经实现了sync.Map 供使用,让我们看看它是怎么实现的正文存储结构体type Map struct { // 操作写map和miss计数器的时候操作 mu Mutex

2022-02-18 11:35:53 810

原创 ERC20和BSC链调用智能合约转移拥有者权限

背景自从回答了 bsc合约拥有者权限怎么打入0x000000000000000000地址 这个问题后, 好多人私信我要教程, 在这写一下实现ERC20链和BSC链都是一样的, 包括调用其他合约的方法(看不懂代码的别自己调用…浪费矿工费的不说别把自己钱转没了)...

2022-02-15 17:11:00 3837 13

原创 Fly-小学妹都喜欢的Go后端项目

背景有个漂亮的小学妹要写毕设, 找我帮忙搭个架子, 于是…它来了它来了, 分享下自己写的Go后端框架, 封装了一些(db,socket等)常用的组件, 开箱即用, 纵享丝滑!任何问题, 建议或者需求都欢迎提 issues, 有问必回!github地址gitee地址项目结构参考 Go程序布局├── README.md├── config| ├── dev.json // 各环境配置文件| └── config.go // 配置初始化| └── mo

2021-12-14 17:53:16 1579

原创 记一次线上Go服务内存占用异常问题排查

背景最近线上有个服务内存异常增长, 默认服务启动实存应该是25M左右, 但是这个服务运行了一段时间实存达到了32GB的量级, 并且还在缓慢增长, QA重启之后内存就恢复到了初始水准, 需要我们定位一下内存异常的问题进行解决过程整吧那就, pprof整起来, 在main 函数增加三行代码import _ "net/http/pprof"func main() { go func() { _ = http.ListenAndServe("0.0.0.0:6060", nil) }()}

2021-11-10 09:56:28 1452

原创 瞄一眼clickhouse(附 go demo)

前言有个朋友业务需要存大量的流水数据, 还希望可以实时根据流水聚合统计, 需求计算的精度到小数点18位(Es和Doris就可以直接ps了), 正好可以看看很火的clickhouse不看不知道, 一看吓一跳, 查询速度是真快啊, 数据压缩也是香了一匹, 运维再也不怕磁盘报警了!简单操作一下因为我要测精度, 就不用官方示例了, 有兴趣的建议了解一下, 比较全搭建直接在 docker仓库 上找到clickhouse的镜像, 拉取就完事了// 拉取镜像docker pull yandex/click

2021-07-21 15:16:52 1406 7

原创 Mysql 根据同一字段实现一条语句部分正序部分倒序的解决方案

前言五个月没更新的我又回来了! 各位朋友六一快乐啊!这次是朋友有一个比较emmm罕见的需求吧, 场景类似活动时间吧, 活动结束的倒序, 正在进行的正序, 看看sql应该怎么写环境Mysql版本Mysql 5.7准备表和数据简单来个表, 主要就是按时间部分正序部分倒序,CREATE TABLE `test_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `timer` int(20) DEFAULT NULL, PRIMARY KEY

2021-06-01 12:02:08 3171

原创 手摸手用Truffle开发自己的第一个DApp

前言简单写个杂货铺的DApp, 每个人可以把自己不用的物品挂在上面, 以获得领取别人物品的机会, 简单来说就是共享自己无用的物品;效果图, 请忽略样式, 毕竟我是个后端项目源码环境需求MetaMasknodeyarnGanachetruffle (npm install -g truffle)lite-server (yarn add lite-server )后端初始化项目truffle init npm init目录介绍|-- Dapp |

2020-12-04 17:14:07 762

原创 手摸手部署IPFS(星际文件系统)

前言部署完UniSwap之后, 也要看一看备受推崇的IPFS, UniSwap的前端项目uniswap-interface就是基于此部署的简介官网地址, 星际文件系统(InterPlanetary File System,缩写IPFS)是一个旨在创建持久且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Protocol Labs在开源社区的帮助下发展。其最初由Juan Benet设计。

2020-12-04 12:17:33 513

原创 Solidity笔记-合约间的互相调用

前言合约间偶尔也有需要互相调用的场景, 跟Go的接口声明挺像的示例代码调用加密猫和usdt的合约, 分别获取加密猫信息和usdt余额pragma solidity ^0.4.19;contract KittyInterface { /// @notice Returns all the relevant information about a specific kitty. /// @param _id The ID of the kitty of interest.

2020-11-03 15:56:55 1811

原创 Solidity笔记-快速入门

前言Solidity 的代码都包裹在合约里面. 一份合约就是以太应币应用的基本模块, 所有的变量和函数都属于一份合约, 它是你所有应用的起点示例代码先简单写一份存储用户信息的合约, 然后里面基本覆盖了solidity的基础语法owner.solpragma solidity ^0.4.19;/** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authori

2020-10-30 14:52:54 594 2

原创 嵌套结构体导出excel的实现方式

// StructValueToSlice 结构体值转入slicefunc StructValueToSlice(val interface{}) (data []interface{}) { // 判断是否为指针 var t reflect.Type var v reflect.Value if reflect.ValueOf(val).Type().Kind() == reflect.Struct { v = reflect.ValueOf(val) t = reflect.TypeO

2020-08-09 23:08:50 700

原创 在 alpine 上打包运行go服务

在 alpine 上打包运行go服务之前的Dockerfile是这样# 设置基础镜像FROM golang:1.14.4-alpine# 作者描述信息LABEL maintainer="飞啊飞"# 使用国内源RUN echo -e http://mirrors.aliyun.com/alpine/v3.7/main/ > /etc/apk/repositories# copy当前目录的文件到镜像里面的工作目录目录下COPY ./config/test.json /demo/

2020-08-09 23:00:22 1737 2

原创 日志收集分析利器-ELK加FileBeat

安装docker-composepip install --upgrade pippip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U docker-compose编写配置文件别忘了把127.0.0.1 替换成自己的ip地址创建挂载目录mkdir -p /data/elk/es /data/elk/filebeatcd /data/elk小技巧linux vim下粘贴文件可能会存在格式文件, 在粘贴前进入paste模式:

2020-06-30 22:44:24 339

原创 Docker私有仓库搭建&Go服务部署

前言最近有个朋友在写一个新的项目, 想用docker搭建一套测试服务, 问我有没有什么坑需要注意的…其实挺简单的, 也没啥坑, 注意一下时区问题和docker配置就好了大体流程搭建私有仓库docker pull registrydocker run -d -v /data/registry:/var/lib/registry -p 5000:5000 镜像Id这样启动确认没问题就可以了, 然后就是配置的事, docker在1.3之后交互默认使用https, 比如你的机器ip是127.0.0.

2020-06-14 19:14:56 450

原创 go 数据导出Excel&前台接收后端返回文件流并在浏览器提供下载

实现package mainimport ( "testing")import ( "github.com/tealeg/xlsx")func TestCreateExcel(t *testing.T) { var user = struct { Name string Age int }{} user.Name, user.Age = "飞起来", 11 // 生成一个新的文件 file := xlsx.NewFile() // 添加sheet页 sheet,

2020-05-19 09:17:33 7050 4

原创 python调用redis-cell(CL.THROTTLE)

前言我有一个朋友, 在我刚发完上面那篇限流功能实现之后问我, 为啥没有写用python实现的方法,我说我故意的你信不奸笑因为我当初在学习的时候瞅见别人也没得发, 这意味着啥, 可以再水一篇文章啊狂笑其实实现也很简单, 只不过因为这个要用到reids-cell的插件, 所以官方没有提供对应的sdk而已, 但是, 上帝关了一扇门, 就一定会在给你留一扇窗, 毕竟维持生活还是很必要的啊正文...

2020-04-23 20:31:03 857

原创 限流功能的实现

最常见的限流方式 固定窗口, 滑动窗口, 漏桶算法和令牌桶假设限制10s最多请求二十次, redis_key为user_id:api固定窗口:即固定死10s时间段, 在这期间只接受二十次请求, 请求打满了就只能登下一段10s, 可以用incr实现接受请求调用incr key, 如果value=1, 则证明为第一次请求, 使用exipre加上10s过期时间,如果大于21, 则拒绝或等待该请求...

2020-04-21 20:52:45 514 5

原创 gorm批量插入解决方案

我有一个朋友, 最近用gorm发现官方不支持批量插入, 看官方issue 2014年就有人提过这个问题了, 不过现在还不支持但是问题不大, 官方留出来一个执行原生SQL(db.Exec)的方法来解决这个问题, 而且官方现在在开发v2版本, 在v2版本中就会支持这个功能了但是生活还得继续, bug还是得继续写, 本来想在网上找一个公用方法来维持一下生活, 结果竟然没找见!都是指定单个结构...

2020-04-15 22:30:41 13295

原创 Go实现随机加盐密码认证

为什么要加密人们往往有使用同一密码的习惯, 为了防止数据库意外泄露/破坏和出于保护用户隐私的目的, 不应在数据库里存入用户密码明文实现代码package mainimport ( "fmt" "golang.org/x/crypto/bcrypt" "time")func main() { password := []byte("thisIsPassWord") now...

2020-03-23 23:41:49 2904

原创 Python的赋值引用, 浅拷贝和深拷贝

前言有个朋友昨天问了我这个问题, 刚好好长时间没写博客了, 就顺便在这写一下赋值引用赋值引用其实就是最基本也是最常用的引用, 即:a = [1, 2, 3]b = aa[0] = 2print(b) # [2, 2, 3]就相当于下面的过程所以当b=a时, 其实就是将b指向a的内存地址, 当a改变的时候, b也会随之改变浅拷贝浅拷贝就是只复制一份最外层元素, 生成一个...

2020-02-27 10:59:54 161

原创 ElasticSearch update

官网文档地址1 - 单个更新指定字段update table set first_time = 1 where id=1POST test/doc/1/_update{ "doc": { "first_time": 1 }}2 - 批量更新字段update table set first_time = last_time where first_time=0 an...

2020-01-13 11:52:49 2287

转载 ElasticSearch中"distinct","count"和"group by"的实现

原文地址https://www.jianshu.com/p/62bed9cc8349最近在业务中需要使用ES来进行数据查询,在某些场景下需要对数据进行去重,以及去重后的统计。为了方便大家理解,特意从SQL角度,方便大家能够理解ES查询语句。1 - distinctSELECT DISTINCT(user_id) FROM table WHERE user_id_type = 3;...

2020-01-13 11:31:48 2042 1

原创 es keyword和text的区别以及联想词实现方案

keyword和text的区别相同支持模糊查询和精确查询不同分词keyword 不分词text 分词聚合查询keyword 支持text 不支持联想词实现方案内容基于es的keyword和text来实现keyword 类型存储多个相关关键字, 使用间隔符分开, 查询时使用正则查询(wildcard)text 类型存储需要分词的关键字, 比如中间可能会带符...

2019-12-21 17:16:28 2275

原创 mysql ORDER BY自定义排序

前言最近一直在忙公司新项目开发, 主要是用go开发后段功能, 所以一直都没时间写博客了, 也不知道要写些啥, 正好刚有个朋友问我排序的问题, 平常用的也比较多, 这里写一篇划波水 (用Go一时爽, 一直用Go一直爽)开始表演默认排序都知道 sql 默认自带排序, 字符串的话按照字母顺序来, 数字的话按照数字大小来, 比如这个样子这是表sql 语句及执行结果自定义排序实际过程中...

2019-11-21 11:50:20 1331

原创 es 平行多次聚合查询

需求比如说我有 city, source, company, user等字段, 然后需要根据 user 字段来查出 各城市对应的 source, company字段, 即同样条件不同字段聚合, 如下user city company user city source需要同时返回这两种聚合结果, 要怎么实现呢实现{ "aggs": { "city": { # 第一...

2019-08-13 14:34:49 2986

原创 记一次mysql 执行查询语句卡死的问题

背景表里面有上亿条数据, 写了一条左联的查询语句, 比如这样select a.city, b.value from tablea as a left join tableb as b on a.cid = b.cid where a.source = 10然后语句执行就卡死了,实际上这条语句在tablea 只有30条数据, 在tableb没有数据,然后用 explain 查看语句也走索...

2019-08-12 20:47:03 4450

原创 Go 和Python中的闭包实现及使用

闭包网上闭包的概念已经很多了, 在这就简单说一下体现: 在一个函数内部(外函数)返回另外一个函数(内函数) 内函数使用外函数的局部变量 外函数的返回值是内函数的引用 只要闭包还被使用,那么被闭包引用的变量会一直存在使用场景比如说 你有一个变量需要放到内存中, 然后只希望那个变量由你想要的方式去改变, 其他人不能去改变的时候就可以用到了实例我有一个方法需要判断...

2019-08-01 16:40:50 228

转载 MysqlsMom: 同步mysql数据到elasticsearch的利器

把Mysql的数据同步到Elasticsearch是个很常见的需求,但在Github里找到的同步工具用起来或多或少都有些别扭。例如:某记录内容为"aaa|bbb|ccc",将其按|分割成数组同步到es,这样的简单任务都难以实现,再加上配置繁琐,文档语焉不详...所以我写了个同步工具MysqlsMom:力求用最简单的配置完成复杂的同步任务。目前除了我所在的部门,也有越来...

2019-07-30 17:09:26 467 2

原创 go 切片排序以及转为带间隔符的字符串

前言Go 切片排序通过匿名函数来快速实现代码示例package mainimport ( "sort" "fmt" "strings")func main() { // 切片排序 intSlice := []int{ 1, 3, 4, 2, 55, } sort.Slice(intSlice, func(i, j int) bool { return i &g...

2019-07-29 12:03:36 1530

原创 ADSL拨号代理的搭建

前言动态拨号vps获取代理, 这里主要是把代理服务器搭建那一步写成shell脚本封边后面搭建, 参考了崔庆才老师的文章, 写的非常详细 https://cloud.tencent.com/developer/article/1151781开始搭建首先是进入vps主机, 用ssh命令进入ssh root@127.0.0.1 -p 22 进入主机后找到拨号初始化的shell脚本, 一般...

2019-07-17 15:44:49 710 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除