- 博客(45)
- 资源 (6)
- 收藏
- 关注
原创 rabbitmq 消息类型
可以根据routingkey分发到不同的队列,如下图的info分配到q1,error和warning的key 分配到q2队列。,会将消息分发到所有绑定的队列,如下图的q1和q2。以下消息会被q1和q2命中。
2023-01-31 12:17:19 250
原创 docker-composer mongodb error: authentication failed.
后来研究了一下发现第一次安装的时候,有脚本会给你自动创建账号,账号和密码就是你.env的账号密码。下次再docker-composerup的时候就不会再次初始化了。第一次执行docker-composerup的时候没有任何问题的,也都能正常连上,后来我改了一下mongodb的密码(.env)重新docker-composerup时就登陆不上了!,也就是挂载mongodb数据目录volumesmongodb_data/data/db,再重新docker-composerup就好了。...
2022-07-21 10:41:07 1067
原创 elasticsearch No alive nodes found in your cluster 解决
首先检一下host及端口是否正确,网络通不通。其次想一下你的代码有没有bulk这类批量发送数据的操作,如果发送的数据超过默认的100MB,也会报这个错,我就中招了。解决办法就是把http.max_content_length这个参数调大即可。我是docker安装的es,因此我们把这个elasticsearch.yaml配置文件映射到宿主机。在挂载之前先在宿主机上创建这个文件!!elasticsearch.yaml增加http.max_content_length配置然后重新开一下容器(特别注意一下,如
2022-06-20 12:51:43 5010
原创 docker elasticsearch 数据目录迁移到宿主机
最近使用docker 安装了elasticsearch,后来发现系统盘越来越小,直到es无法写入数据。。。后来才发现装elasticsearch的时候没有映射数据目录,现在如果删除容器的话,之前的数据就清空了,所以需要做两步操作,先把docker elasticsearch的数据目录拷贝到宿主机,然后新建容器并挂载数据目录参照1参照2...
2022-06-15 10:21:30 865
原创 mysql root外网连不上,提示密码错误
首先考虑是不是root的账号限制了host,如果root的host是localhost的话,就需要改成%,表示不限制host(慎用)
2022-06-06 18:43:59 339
原创 iTerm2 ssh 自动登陆脚本
新建一个shell文件,如ssh_setting/autologin.sh#!/usr/bin/expectset timeout 30set host [lindex $argv 0]# This line is to set a variable , Variable names can be used casually , Try to make sense , The parameters passed in are shown later ,0 Represents the firs
2022-04-18 08:20:07 475
原创 composer 本地包
第一步:初始化扩展包,并配置composer init在composer.json中设置PSR-4自动加载{ "name": "hou/common", "description": "公用包", "type": "library", "autoload": { "psr-4": { "Common\\": "./common/" } }}第二步:在实际项目中配置:composer.json
2022-03-03 12:22:30 1040
原创 使用Docker运行Hyperf项目(Ubuntu + PHP7.4 + Swoole)
把 Dockerfile文件复制到项目目录,然后在项目目录内执行以下命令docker build -t hyperf:test --build-arg ALPINE_VERSION=3.14 . # 构建镜像,注意最后有个小数点!!!docker run -it -v /mnt/hgfs/www:/www -p 9501:9501 hyperf:test /bin/bash # 运行容器,...
2022-02-22 14:37:34 551
原创 用Redis 有序集合设计粉丝关注表
在用关系型数据库(Mysql)设计粉丝关注表时,感觉要写很多判断,比如:新增关注时,要判断之前的关联是否存在,如果不存在才插入。又或者获取粉丝数量或关注的人数量,一般做法是在数据库里查出来再存到Redis,新增关注后再用redis的incr命令+1,在查询的过程中又要考虑索引问题。。。总之比较的麻烦后来有考虑过用redis的的集合(Set)来存粉丝和关注的人,但问题是集合是无序的,想要获取关注时间就无能为力了。最后用Redis的有序集合解决了上述的所有问题,有顺集合中有一个score分数,会根据这个
2022-02-10 12:49:05 941
原创 golang nohup 后台守护进程运行
nohup ./bin/test > nohub.out 2>&1 &意思是将test这个程序的输入重定向到nohub.out中,最后的&表示后台运行如果要停止,需要找到该进程再杀掉$ pa aux|grep testroot 123 0.0 0.1 1079748 8336 pts/0 Sl 09:58 0:00 ./bin/testroot 456 0.0 0.0 6300 736 pts/0 S+
2022-01-26 10:03:39 1171
原创 如何在 Go (Golang) 中重用 HTTP 连接(复用TCP)
在Golang中想要复用之前的TCP连接,必须要把上一个连接的Body读取完毕才能复用检查工具:httptrace.ClientTrace测试代码:package mainimport ( "context" "io" "io/ioutil" "log" "net/http" "net/http/httptrace")func main() { // client trace to log whether the request's underlying tcp connect
2022-01-21 10:17:16 4784
原创 golang go协程并发请求与WaitGroup
在go里面执行N次并发请求是非常简单的,比如并发执行100次请求,就启100个协程就好了func main() { i := 0 wg := &sync.WaitGroup{} for i < 10 { wg.Add(1) // 放在循环里面,就+1,放在循环外面,要执行多少次计算就加几,比如在for外面:wg.Add(10)是一样的效果 url := "https://www.baidu.com" go func(url string) { resp, _ :=
2022-01-20 12:05:08 973
原创 golang Reqeust Header.Add key 自动转大写的问题
发送请求时,想自定义一些header,但在golang里面使用req.Header.Add或Header.Set时,会自动把我们的KEY转成大写。如果不想转成大写的话,可以用下面的方法(经测试,go的做法是正确的。因为不管你转不转大写在接收端都会按大写接收,因此不必纠结大小写问题) req, err := http.NewRequest("GET", reqUrl, nil) if err != nil { return nil, err } req.Header["my_header"] =
2022-01-19 10:20:54 1649
原创 golang gorm update or insert
在gorm中,想要实现“如果存在就更新,否则就插入”的需求,可以通过以下方式实现 db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, // 这里的列必须是唯一的,比如主键或是唯一索引 DoUpdates: clause.AssignmentColumns([]string{"num", "title"}), // 更新哪些字段 }).Create(&User{ Desc: "ee"
2022-01-14 12:52:47 4097
原创 golang time.Parse timezone 时区问题
当使用time.Parse解析日期时,会发现和实际的时间不一致,这是因为parse是默认时区是UTC。解决方案是用ParseInLocation代替Parseimport ( "time")func main() { t1, err := time.ParseInLocation("2006-01-02 15:04:05.000", "2022-01-12 10:55:00.000", time.Local)}转载:原文...
2022-01-12 10:56:45 1040
原创 go 迭代变量捕获
在go中,循环变量使用相同的变量地址,只是每次迭代的时候不断更新其值。证明一下:func main() { sli := []int{1, 2, 3, 4, 5} for _, v := range sli { fmt.Printf("%x %d\n", &v, v) }}c000014098 1c000014098 2c000014098 3c000014098 4c000014098 5知道了它的特性后,就很容易理解go迭代变量捕获问题var slice []fun
2022-01-10 12:29:08 420
原创 Postman response base64转json
在用postman调试接口时,后端约定返回的内容全部base64编码格式返回,这样我们自己测试的时候非常不方便。我们可以利用postman的Visualize功能自动帮我转成json格式,(其他格式也可以,反正就是返回的body随便处理)方便调试打开postman的Test选项卡:输入以下代码pm.visualizer.set(`<pre id="response" style="font-size:12px;"/><script src="https://cdn.bootc.
2022-01-07 11:08:15 1464
原创 MongoDB获取每个分类最新一条完整记录(会话列表、每个班级成绩最高的一名学生....)
最近在做一个消息中心功能,其中有个私信功能用了MongoDB做分表存储,要解决的问题是“获取与每个人聊天的最后一条消息”,也就是像聊天软件的会话列表一样
2022-01-04 15:16:29 2611 1
原创 MySQL创建存储过程批量插入百万条测试数据
有时候为了分析SQL,不得不插入大量数据进行测试,以验证是否利用索引,这时我们就可以利用MYSQL的存储过程来批量插入
2021-12-29 12:07:16 893
原创 go 编译包
编译当前目录下的所有目录(不会产生输出)go build ./...编译当前目录下的所有目录(输入到GOPATH下)go install ./...
2021-11-02 08:45:36 992
原创 golang slice 切片
slice本身不存储值,只是对低层array的viewpackage mainimport "fmt"func main() { arr := [...]int{0,1,2,3,4,5,6,7} s1 := arr[2:6] // 2 3 4 5 s2 := s1[3:5] // 5 6 这里用到了slice的向后扩容特性,只要没超过底层数组长度都可以,但不能向前扩容 fmt.Println(s1) fmt.Println(s2) }修改切片的值会直接修改底层的数组.
2021-10-28 14:43:55 84
原创 golang 声明数组
package mainimport "fmt"func main() { var arr [4]int arr1 := [3]int{1, 2, 3} arr2 := [...]int{5, 6} // 个数不确定 arr3 := [3][5]int{ // 3和5分别代表行,列 {1, 3, 4, 4, 4}, {1, 3, 4, 4, 4}, {1, 3, 4, 4, 4}, } fmt.Println(arr, arr1, arr2, arr3) // [0 0
2021-10-28 13:59:02 790
原创 golang 接收闭包函数
func sum(a, b int) int { return a + b}func apply(f func(a, b int) int, x, y int) int { return f(x, y)}func main() { val := apply(sum, 5, 6) val2 := apply(func(a, b int) int { return a -b }, 8, 6) fmt.Println(val, val2) // 11 2}
2021-10-28 12:53:02 63
原创 golang 函数返回 error
func getNum() (v int, err error) { return 0, fmt.Errorf("err %s", "haha")}func main() { if v, err := getNum(); err != nil { fmt.Println(err) // err haha } else { fmt.Println(v) }}
2021-10-28 12:18:27 1274
原创 golang 通过NewScanner读取文件内容
func printFile(filename string) { file, err := os.Open(filename) if err != nil { panic(err) } scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) }}func main() { printFile("users.txt")}
2021-10-28 12:03:36 343
原创 go int 转 string
package mainimport ( "fmt" "strconv")func main() { i := 1 fmt.Println(strconv.Itoa(i))}
2021-10-28 11:54:15 677
原创 golang switch
func main() { status := 2 var msg string switch status { case 1: msg = "success" // go会自动break,不需要手动break case 2: msg = "warning" } fmt.Println(msg)}可以在switch内写条件func main() { status := 2 var msg string switch { case status == 1
2021-10-28 11:44:12 63
原创 go const iota
const ( aa = iota // iota是系统常量,值为0,使用iota时,后面的常量自动递增 bb _ dd ) fmt.Println(aa, bb, dd) // 0 1 3同时iota也可以参与运算 const ( b = 1 << (10 * iota) kb mb ) fmt.Println(b, kb, mb)...
2021-10-28 11:36:03 3405
原创 MYSQL索的三种方式 hash btree
MYSQL索的三种方式HASH有序数组BTREEHASHkey => value 的存储方式,有点类似NoSQL,适合查询等值的数据,比如 ID=2。但如果要查询ID > 100 且 ID < 200这种范围的数据时,就会非常慢,因为内部是无序排列,必须要全部扫描BTREE主键索引存的是该行数据,非主键索引(二级索引,比如index、unique)存的是主键的值假设name是二级索引,where name=‘A’ 时,得到ID=100,再到ID索引树查询一次,这一步
2021-08-03 17:14:16 130
原创 Mysql事务之隔离性
Mysql事务事务是基于存储层,而不是Server层,例如Innodb支持事务而MyISAM不支持事务的四大特性(ACID):原子性一致性隔离性持久性原子性一个事务包含多个操作,这些操作要么全部执行,要么全都不执行一致性一致性是指事务使得系统从一个一致的状态转换到另一个一致状态隔离性当多个事务同时执行的时候,就需要考虑到隔离级别概念读未提交:一个事务还没提交时,它做的变更就能被别的事务看到读提交:一个事务提交之后,它做的变更才会被其他事务看到可重复读:简单来说,该事务在没提交
2021-08-03 16:06:02 88
原创 mysql redo log与binlog
redo logredo log是innodb独有的日志,用来记录“在哪个数据页上做了什么修改”。在innodb引擎里面,更新数据时,并不是直接把写入磁盘(因为这样效率会较低),而是先将记录记录到redo log里面,到一定的时机(空闲)才更新到磁盘。redo log如果满了的话,会将其中部份数据写入到磁盘,腾出空间binlogbinlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用建议innodb_flush_log_at_trx_commit = 1sync_binl
2021-08-02 18:10:41 87
php开发客服系统(持久连接+轮询+反向ajax) - php严程序
2014-08-19
(PHP完整项目)ThinkPHP3.0仿家具网整站源码
2012-12-04
ThinkPHP仿家具网 整站成品源码+数据库
2012-12-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人