置顶推荐

最新发布

经验

Navicat 一段时间不操作表就加载很久

3星期前 48 浏览 评论

使用navicat链接mysql的时候,间隔一段时间不操作表,再次操作的时候表就会加载很长时间,体验贼差!其实我们可以设置心跳保持连接:1. 如果是连接状态,我们就断开连接2. 打开编辑连接3. 选择高级4. 勾选保持连接间隔,并设置为305. 保存

Git

Git 过滤已上传的文件夹

1个月前 91 浏览 评论

我们经常创建新项目的时候忘记添加.gitignore文件,就把类似node_modules之类的文件夹上传到了git上。浪费空间不说,还让远程仓库目录显得乱,远程仓库还无法删除,这时候我们来执行以下操作。step1、删除所有文件追踪状态git rm -r --cached .step2、新增.gitignore文件,并将要忽略的目录写入文件step3、git add . 添加文件追踪step4、git commit 提交本地仓库step5、git push

Go基础

Go logrus日志使用实例

2个月前 202 浏览 评论

Go自带的logger无法满足我们的需求,自然要考虑其他日志框架了,logrus作为很多开发首选的日志框架,这里以logger中间件为例,简单写下logrus的使用和理解。概要:1、Gin框架:这里我们使用gin框架来实现,其他框架大同小异2、自定义logger中间件:添加middleware包,并use middleware.logger3、logrus日志框架:具体操作应该都了解,就没什么好说的了4、日志输出到文件:gin中日志是默认输出到控制台的,根据我们的需求,我们将日志输出到

Go基础

Go 结构体转map[string]interface{}

2个月前 172 浏览 评论

Go数据类型用起来有点累。不定义结构体的话,对map进行json转换的时候,数据不是自己定义的顺序。定义结构体的话,我们往往对数据操作的时候想操作index,但是结构体无法操作index。这时候就要将结构体转成map[string]interface{}格式,下面我们使用反射遍历结构体来生成map:type User struct {    Id   uint32 `bson:"id&q

Gin

Gin框架 BindJSON返回EOF

2个月前 463 浏览 评论

在开发中使用中间件获取json请求参数,使用 ioutil.ReadAll 来读取body中的内容,代码如下:b, err := ioutil.ReadAll(c.Request.Body)以上没有问题,中间件或获取到了我需要的请求参数,但是问题来了:在接口中绑定参数的时候返回EOF。var user models.User err := c.ShouldBindJSON(&user)然后发现,bo

经验

MQ 消息队列

3个月前 135 浏览 评论

什么是队列?队列(Queue)是先进先出的线性数据结构。和堆栈一样的,队列只允许在后端进行插入操作:进队;在前端进行删除操作:出队。具体应用中通常用链表和数组来实现。什么是消息队列?消息队列,简称MQ(Message Queue)。我们可以简单理解为:把要传输的数据放在队列中。把数据放到消息队列叫做生产,发送消息的系统称为生产者。从消息队列取出数据叫做消费,接受消息的系统称为消费者。有哪些消息模式?JMS规范目前支持两种消息模式:点对点(Point To Point, queue)和发

Redis

Redis 缓存数据一致性的理解和方案

3个月前 540 浏览 评论

数据库和缓存读写顺序?在了解缓存数据一致之前,我们需要先了解数据库和缓存的读写顺序。最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。命中:程序先从缓存中读取数据,如果命中,则直接返回失效:程序先从缓存中读取数据,如果没有命中,则从数据库中读取,成功之后将数据放到缓存中更新:程序先更新数据库,然后再删除缓存关于更新操作,其实问题比较多。通常疑惑的就几种:1、我们不考虑更新缓存的原因:首先,并发情况下也可能出现数据不是最新的情况。其次,不确定要更新的这个缓存项是否会被经

Redis

Redis 缓存需要了解和注意的问题

3个月前 130 浏览 评论

Redis缓存想必大家都很熟悉,但是工作中可能使用到的地方都很片面,我们需要有个整体的认识。结合网上查询的和自己的理解,我们也具体总结下。什么是Redis?Redis是一个开源的底层使用C语言编写的key-value存储数据库。可用于缓存、事件发布订阅、高速队列等场景。而且支持丰富的数据类型:string(字符串)、hash(哈希)、list(列表)、set(无序集合)、zset(sorted set:有序集合)。为什么要使用Redis?高并发:单机缓存支持每秒QPS十几万,远远超过数据库;高性

Redis

Redis 并发竞争的理解和方案

3个月前 112 浏览 评论

Redis的并发竞争问题,主要是发生在并发写竞争。例如:两个连接同时对price进行写操作,同时加10,最终结果我们知道,应该为30才是正确。考虑到一种情况:T1时刻,连接1将price读出,目标设置的数据为10+10 = 20。T2时刻,连接2也将数据读出,也是为10,目标设置为20。T3时刻,连接1将price设置为20。T4时刻,连接2也将price设置为20,则最终结果是一个错误值20。怎么解决?主要思路就是把并行读写改成串行读写的方式,从而来避免资源竞争。| 分布式锁我们使用

优化

Mysql 优化

3个月前 121 浏览 评论

MYSQL优化主要分为以下四大方面:架构:主从复制,读写分离,负载均衡。设计:存储引擎,字段类型,范式与逆范式功能:索引,缓存,分区分表。SQL:慢查询,经验。| 服务器架构服务器的架构,通常是由多台服务器通过负载均衡组合成的服务器集群。主从复制:Mysql服务器内部支持复制功能,仅仅需要通过简单配置即可,通常是一主多从的典型结构:主服务器负责写数据,从服务器负责读数据。读写分离、负载均衡:开启主从复制后,PHP不再操作Mysql数据库服务器,而是去操作读写分离、负载均衡服务器,只要服