Submitted by admin on 2018, July 23, 3:08 PM
XML/HTML代码
- type SafeMap struct {
- sync.RWMutex
- Map map[int64]string
- }
-
- func NewSafeMap(size int) *SafeMap {
- sm := new(SafeMap)
- sm.Map = make(map[int64]string, size)
- return sm
- }
-
- func (sm *SafeMap) ReadMap(key int64) string {
- sm.RLock()
- value := sm.Map[key]
- sm.RUnlock()
- return value
- }
-
- func (sm *SafeMap) WriteMap(key int64, value string) {
- sm.Lock()
- sm.Map[key] = value
- sm.Unlock()
- }
-
- // 用于for k,_ := range m.Keys(){v := m.ReadMap(k) ....}
- func (sm *SafeMap) Keys() []int64 {
- sm.RLock()
- value := make([]int64, 0)
- for k, _ := range sm.Map {
- value = append(value, k)
- }
- sm.RUnlock()
- return value
- }
https://blog.csdn.net/qq_17612199/article/details/79601222
golang | 评论:0
| Trackbacks:0
| 阅读:852
Submitted by admin on 2018, July 6, 4:35 PM
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
golang | 评论:0
| Trackbacks:0
| 阅读:868
Submitted by admin on 2018, July 4, 12:36 AM
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/db | 评论:0
| Trackbacks:0
| 阅读:833
Submitted by admin on 2018, July 4, 12:35 AM
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。
mysql/db | 评论:0
| Trackbacks:0
| 阅读:922
Submitted by admin on 2018, June 30, 3:49 PM
配置场景
再来看下主要参数
- MaxIdle
- 表示连接池空闲连接列表的长度限制
- 空闲列表是一个栈式的结构,先进后出
- MaxActive
- 表示连接池中最大连接数限制
- 主要考虑到服务端支持的连接数上限,以及应用之间”瓜分”连接数
- IdleTimeout
- 空闲连接的超时设置,一旦超时,将会从空闲列表中摘除
- 该超时时间时间应该小于服务端的连接超时设置
区分两种使用场景:
- 高频调用的场景,需要尽量压榨redis的性能:
- 调高MaxIdle的大小,该数目小于maxActive,由于作为一个缓冲区一样的存在,扩大缓冲区自然没有问题
- 调高MaxActive,考虑到服务端的支持上限,尽量调高
- IdleTimeout由于是高频使用场景,设置短一点也无所谓,需要注意的一点是MaxIdle设置的长了,队列中的过期连接可能会增多,这个时候IdleTimeout也要相应变化
- 低频调用的场景,调用量远未达到redis的负载,稳定性为重:
- MaxIdle可以设置的小一些
- IdleTimeout相应地设置小一些
- MaxActive随意,够用就好,容易检测到异常
- https://blog.csdn.net/xiaohu50/article/details/51606349
redis | 评论:0
| Trackbacks:0
| 阅读:1125
Submitted by admin on 2018, June 30, 12:42 PM
从上面访问的结果发现。我们这边的< 之类的符号已经被转义成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
golang | 评论:0
| Trackbacks:0
| 阅读:868
Submitted by admin on 2018, June 30, 10:25 AM
https://blog.csdn.net/easternunbeaten/article/details/72456240
https://beego.me/docs/mvc/model/transaction.md
golang | 评论:0
| Trackbacks:0
| 阅读:857
Submitted by admin on 2018, June 30, 10:23 AM
https://www.cnblogs.com/mingtianct/p/6291593.html
https://www.cnblogs.com/youxin/p/3833817.html
redis | 评论:0
| Trackbacks:0
| 阅读:992