go中利用hmset替换hset来提高redis的存取效率及并发goroutine可能遇到的问题
来源:互联网 发布:阿里吧最新软件 编辑:程序博客网 时间:2024/06/07 06:53
go 中直接利用hset向redis存入数据效率较低,当要存入的数据已知时,可以利用hmset 来替换hset进行存储。
var args []interface{}{"myhash"}for key,value := range fvs { args = append(args, key, value)}_, err := conn.Do("HMSET", args...)
注:fvs为对应的key,value的map映射,将该映射关系存入到redis中名字为myhash的域中, args...表示args slice中的顺序的所有元素。
hmset存储速度相对hset已经很快,但是利用go中goroutine并发hmset能取得更好的存储效果吗?答案是否定的。
当利用多个(10个)goroutine进行并发hmset时,如
for i:=0;i<10;i++{ go func(){ ...... _, err = conn.Do("hmset", args...) if err != nil { fmt.Println(err) } ...... }}
此时便会出现错误:use of closed network connection
错误原因:hmset对redis进行写操作时,只能对一个hash表有一个写操作,不能同时多个写操作。
解决办法:
在执行hmset命令之前加锁,执行完之后解锁即可。本例解决方案如下:
import "sync"var l sync.Mutexfor i:=0;i<10;i++{ go func(){ ...... l.Lock() _, err = conn.Do("hmset", args...) if err != nil { fmt.Println(err) } l.Unlock() ...... }}
利用加锁方法变能够确保每次只有一个进行hmset对redis进行写操作。
0 0
- go中利用hmset替换hset来提高redis的存取效率及并发goroutine可能遇到的问题
- go的goroutine问题
- go的并发机制goroutine
- go的并发编程goroutine
- 论go语言中goroutine的使用
- 论go语言中goroutine的使用
- Go语言的goroutine
- Redis Primer(1)基于JedisPool的Redis hset并发性能测试
- Redis Primer(1)基于JedisPool的Redis hset并发性能测试
- 文本编辑器中利用正则来提高查找和替换效率
- 理解 goroutine 的并发
- minicom使用中可能遇到的问题及解决办法
- 利用GDI+的双缓冲技术来提高绘图效率
- 利用GDI+的双缓冲技术来提高绘图效率
- 利用GDI+的双缓冲技术来提高绘图效率
- 利用GDI+的双缓冲技术来提高绘图效率
- 利用render事件来提高程序的运行效率。
- 利用render事件来提高as3程序的运行效率
- Codeforces Round #271 (Div. 2)
- struts2中<s:select>标签的使用
- 【UML】关联、依赖、泛化、实现等关系说明
- ORACLE笔记
- 六类UML图
- go中利用hmset替换hset来提高redis的存取效率及并发goroutine可能遇到的问题
- hdu 4405 Aeroplane chess (概率dp)
- CentOS启动后直接进入命令行模式
- 当你输入一个网址的时候,实际会发生什么?
- 单链表运算
- 百度是如何给每个人免费提供2TB存储空间的?
- There is no Action mapped for namespace [/] and action name [viewLogAction] associated with context
- C函数调用与堆栈的变化
- hibernate注解大全