工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

Golang同步:条件变量和锁组合使用

 https://studygolang.com/articles/5776

golang 1.8 并发安全Map简单实现

XML/HTML代码
  1. type SafeMap struct {  
  2.     sync.RWMutex  
  3.     Map map[int64]string  
  4. }  
  5.   
  6. func NewSafeMap(size int) *SafeMap {  
  7.     sm :new(SafeMap)  
  8.     sm.Map = make(map[int64]string, size)  
  9.     return sm  
  10. }  
  11.   
  12. func (sm *SafeMap) ReadMap(key int64) string {  
  13.     sm.RLock()  
  14.     value :sm.Map[key]  
  15.     sm.RUnlock()  
  16.     return value  
  17. }  
  18.   
  19. func (sm *SafeMap) WriteMap(key int64, value string) {  
  20.     sm.Lock()  
  21.     sm.Map[key] = value  
  22.     sm.Unlock()  
  23. }  
  24.   
  25. // 用于for k,_ :range m.Keys(){v :m.ReadMap(k) ....}  
  26. func (sm *SafeMap) Keys() []int64 {  
  27.     sm.RLock()  
  28.     value :make([]int64, 0)  
  29.     for k, _ :range sm.Map {  
  30.         value = append(value, k)  
  31.     }  
  32.     sm.RUnlock()  
  33.     return value  
  34. }  

https://blog.csdn.net/qq_17612199/article/details/79601222

golang:An operation on a socket could not be performed because the system lacked sufficient buffer s

 1、问题 

conn, err := net.Dial(“tcp”, ‘127.0.0.1:50001’)

执行此语句报错详细报错信息 
dial tcp 127.0.0.1:50001: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

此报错的原因一般是系统端口已用尽,无法再建立新的Socket连接

https://blog.csdn.net/xia_xing/article/details/53352658

服务器 TIME_WAIT和CLOSE_WAIT

https://blog.csdn.net/xia_xing/article/details/53352486

常见SOCKET错误参数

https://blog.csdn.net/macky0668/article/details/4257721

 

 

MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded

 

MySQL 5.5 -- innodb_lock_wait 锁 等待

记得以前,当出现:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction,
要解决是一件麻烦的事情 ;
特别是当一个SQL执行完了,但未COMMIT,后面的SQL想要执行就是被锁,超时结束;
DBA光从数据库无法着手找出源头是哪个SQL锁住了;
有时候看看show engine innodb status , 并结合 show full processlist; 能暂时解决问题;但一直不能精确定位;

在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎);
innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系

看到这个就非常激动 ; 这可是解决了一个大麻烦,先来看一下表结构

https://blog.csdn.net/mangmang2012/article/details/9207007

mysql中set autocommit=0与start transaction区别

 set autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务。

 

 

1、不管autocommit 是1还是0 
     START TRANSACTION 后,只有当commit数据才会生效,ROLLBACK后就会回滚。

 

2、当autocommit 为 0 时
    不管有没有START TRANSACTION。
    只有当commit数据才会生效,ROLLBACK后就会回滚。

 

3、如果autocommit 为1 ,并且没有START TRANSACTION 。
    调用ROLLBACK是没有用的。即便设置了SAVEPOINT。

redigo的redis.Pool 配置参数调优

 

配置场景

再来看下主要参数

  • MaxIdle 
    • 表示连接池空闲连接列表的长度限制
    • 空闲列表是一个栈式的结构,先进后出
  • MaxActive 
    • 表示连接池中最大连接数限制
    • 主要考虑到服务端支持的连接数上限,以及应用之间”瓜分”连接数
  • IdleTimeout 
    • 空闲连接的超时设置,一旦超时,将会从空闲列表中摘除
    • 该超时时间时间应该小于服务端的连接超时设置

区分两种使用场景:

  1. 高频调用的场景,需要尽量压榨redis的性能: 
    • 调高MaxIdle的大小,该数目小于maxActive,由于作为一个缓冲区一样的存在,扩大缓冲区自然没有问题
    • 调高MaxActive,考虑到服务端的支持上限,尽量调高
    • IdleTimeout由于是高频使用场景,设置短一点也无所谓,需要注意的一点是MaxIdle设置的长了,队列中的过期连接可能会增多,这个时候IdleTimeout也要相应变化
  2. 低频调用的场景,调用量远未达到redis的负载,稳定性为重: 
    • MaxIdle可以设置的小一些
    • IdleTimeout相应地设置小一些
    • MaxActive随意,够用就好,容易检测到异常
  3. https://blog.csdn.net/xiaohu50/article/details/51606349

golang web xss攻击预防

 从上面访问的结果发现。我们这边的< 之类的符号已经被转义成html 特殊符

上面的方法也是可以进行简化的

 

package main  import ( 	"fmt" 	"html/template" 	"log" 	"net/http" )  func main() { 	//绑定路由 讲访问 / 绑定给  Handler 方法进行处理 	http.HandleFunc("/", Handler) 	http.ListenAndServe(":8080", nil) }  func Handler(w http.ResponseWriter, req *http.Request) { 	err := req.ParseForm() 	//如果解析失败 直接退出 输出对应的错误原因 	if err != nil { 		log.Fatal(nil) 	} 	//获取 传递的name 参数 	user_pro := req.FormValue("name") 	fmt.Fprintf(w, "%s", xss_hander(user_pro))  } func xss_hander(s string) string { 	return template.HTMLEscapeString(s) }https://blog.csdn.net/liangguangchuan/article/details/54617685

beego orm 调用多次sql的事物同步

 https://blog.csdn.net/easternunbeaten/article/details/72456240

 
https://beego.me/docs/mvc/model/transaction.md
Records:107512345678910»