自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 数据库丢失日志,依靠失败日志进行恢复

问题很多情况下,由于当时创建数据库表字段时,没有准确的确定日志表的自增ID类型,或者说其他值的类型,有可能插入失败主键超出范围varchar类型超出范围等因此,通过错误日志信息,将数据导出,重新将丢失的数据写入数据库中数据库使用sqlx将日志数据上传到服务器上,通过定时任务,在数据库接收数据量少的时候进行脚本数据迁移,每次限定次数import ( "bufio" "encoding/json" "fmt" "github.com/jmoiron/sqlx" "io/ioutil"

2022-05-25 13:55:49 626

原创 QPS限流之令牌桶

type LingLimit struct { // 锁 sync.Mutex // 模拟时钟 clock Clock // 开始取令牌的第一个时间 startTime time.Time // 容量 capacity int64 // 给桶中加令牌的数量(每一时刻) quantum int64 // 每个时刻之间的间隔大小 fillInterval time.Duration // 桶中可用的令牌数量 availableToken int64 // 上一时刻 latestT

2022-05-24 09:31:46 301

原创 切片作为参数进行append,造成的错误 (完美诠释值传递)

Go中没有引用传递package mainimport "fmt"func main() { s1 := []int{1, 2} s2 := s1 s2 = append(s2, 3) Test1(s1) Test1(s2) fmt.Println(s1, s2)}func Test1(s []int) { s = append(s, 0) for i := range s { s[i]++ }}A:[2,3] [2,3,4]B:[1,2] [1,2,3]C:

2021-12-01 17:20:09 478

原创 慢sql的原因

1、针对偶尔很慢的情况下一、数据库在刷新脏页(需要去了解数据库数据写入的具体过程)二、拿不到锁● 这个就比较容易想到了,我们要执行的这条语句,刚好这条语句涉及到的表,别人在用,并且加锁了,我们拿不到锁,只能慢慢等待别人释放锁了。或者,表没有加锁,但要使用到的某个一行被加锁了,这个时候,我也没办法啊。● 如果要判断是否真的在等待锁,我们可以用 show processlist这个命令来查看当前的状态哦,这里我要提醒一下,有些命令最好记录一下,反正,我被问了好几个命令,都不知道怎么写,呵呵。查看数据库

2021-11-08 15:29:12 384

原创 Channel管道的基础

Channel管道的基础(一)func main(){ ch := make(chan interface{}) // 无缓冲管道 对于没有缓存的通道,需要接收方实时接收数据,否则会报错 ch1 := make(chan interface{}, 10) // 带缓冲区的管道 // 向管道发送数据 ch1 <- struct{} ch1 <- 0 ch1 <- "hello" select{ // 专门用来选

2021-11-01 17:43:44 530

原创 MAC 安装RocketMq及前置安装JDK和maven

所需环境JDK 1.8+MavenRocketMqJava环境的安装JDK8打开dmg文件,mac会自动解压安装配置环境变量#查看全部的环境变量envecho $JAVA_HOME #没有配置为空vim ~/.bash_profileexport JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Homeexport PATH=$PATH:$JAVA_HOME/binwq保

2021-08-03 15:54:26 261

原创 QPS单点限流

var ipMap = map[string]*rate.Limiter -- 根据ip设置不同限流,存入map var mu = *sync.RWMutex -- 读写锁func GetLimiter(unique string,r rate.Limit, defaultQPS int) *rate.Limiter{ mu.RLock() //开启读锁 limiter, exist := i.map[unique] mu.RUnlock() //关闭读锁..

2021-06-15 17:32:12 819

原创 gin对各种请求中的参数的处理

1、获取Get请求参数Get请求示例 : /getUserInfo?id=1获取请求参数所用函数func (c *gin.Context) Query(key string) stringfunc (c *gin.Context) DefaultQuery(key string, defaultValue string) stringfunc (c *gin.Context) GetQuery(key string) (string, bool)示例:func Handler(c *gi

2021-06-09 10:29:41 1743

原创 Gorm框架中有关操作数据库表

GORM框架有关Table的语句1、根据表名查看当前表在数据库中是否存在Gorm.io/gorm 包下exist := db.DB.Migrator().HasTable(tableName)github.com/jinzhu/gorm包下exist := db.hasTable(tableName) ⚠️ 不仅判断不同,许多方法均有一定差别,官方文档如下Gorm.io/gormgithub.com/jinzhu/gorm2、根据数据库中的表创建相同结构、数据的表,表名不相同//创

2021-06-05 10:43:59 2321

原创 初步了解JVM,总结小知识

JVM 内存结构先来一张内存结构图那么什么就做Java虚拟机呢?我们学习的时候,应该都知道Java语言能够一次编译,到处运行的特点,其中这种平台无关性关键就在于Java虚拟机,他是一个可执行Java字节码的虚拟机进程。组成部分ClassLoader:(类加载器)类装载子系统,JVM启动的时候,将字节码加载到JVM中。RunTime Data Area:(运行时数据区)如上图,将内存分为不同的区域,分别实现不同的功能。Excution Engine:(执行引擎)不仅负责执行class文件中的字

2020-09-26 09:48:03 255

原创 MySQL底层数据结构应用的变化及比较

MySQL底层数据结构应用的变化及比较我们知道的数据结构有很多,下面列出了5种。Hash (HashMap种使用较多)二叉树平衡二叉树B 树B+ 树既然有这么多种,为什么又刚好选择了B + 树作为存储结构呢?1、为什么不是用hash 作为存储结构?Hash在HashMap中得到了充分体现,数组 + 链表 + (JDK 1.8)红黑树,经过多次修改,检索效率是非常高的,时间复杂度为 O( 1 ),但是,数据一多,时间复杂度就变成了O( n ),这样看来,对于存储千万数据的MySQL显然是不

2020-09-25 22:39:03 181

空空如也

空空如也

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

TA关注的人

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