美文网首页
redisgo# 多个 goroutine 使用同一个 redi

redisgo# 多个 goroutine 使用同一个 redi

作者: 风亡小窝 | 来源:发表于2019-05-05 00:47 被阅读0次

问题描述

当用多个goroutine使用一个共享的 redis conn 时并发读写redis时,此时便会出现错误:

  • use of closed network connection
  • 或者 short write

错误原因

在使用同一个连接对redis进行写操作时,只能对一个hash表有一个写操作,不能同时多个写操作。有并发问题。

解决办法

解决并发问题最简单的就是加锁,但是还有更便利的方式:使用相关库提供的 连接池,如 redisgo:

var  redisPool = & redis.Pool{
    MaxIdle:30,
    MaxActive:1000,
    IdleTimeout: 30 * time.Second,
    Dial: func() (conn redis.Conn, err error) {
        return redis.Dial("tcp", "127.0.0.1:6379")
    },
}

每次使用时都使用Get()方法从连接池获取连接,连接使用结束后使用Close()方法将连接返回给连接池。

conn := redisPool.Get()
defer conn.Close()

相关文章

  • redisgo# 多个 goroutine 使用同一个 redi

    问题描述 当用多个goroutine使用一个共享的 redis conn 时并发读写redis时,此时便会出现错误...

  • golang sync.Pool

    临时对象池   当多个goroutine都需要创建同一个对象的时候,如果goroutine过多,可能导致对象的创建...

  • 解析Golang sync.Cond 条件变量源码

    使用场景 一个goroutine G1拿到锁,操作,其它多个goroutine等待G1 完事,需要通知其它多个go...

  • golang中defer的执行过程是怎样的?

    在同一个goroutine中: 多个defer的调用栈原理是什么?defer函数是如何调用的? 为了探究其中的奥秘...

  • Golang 之channel

    1.channel 的特性 goroutine-safe,多个 goroutine 可以同时访问一个 channe...

  • 通道channel

    channel特点 chan类型的值本身的并发安全的,因此可用于多个goroutine之间通信 chan使用mak...

  • 问题汇总

    常见的问题,声明了map,但是没有初始化就使用,编译会报nil map error 多个goroutine同时读写...

  • golang context上下文信息

    当需要在多个 goroutine 中传递上下文信息时,可以使用 Context 实现。Context 除了用来传递...

  • redis集群

    redis的集群只需要设置多个配置文件在不同的端口 redis-server conf文件 全部启动 使用redi...

  • goalng1.14不同场景下sync.Map、Mutex、RW

    因为使用go过程中会经常使用map存储,多个goroutine会出现资源竞争的问题,所以写个demo测试一下不同方...

网友评论

      本文标题:redisgo# 多个 goroutine 使用同一个 redi

      本文链接:https://www.haomeiwen.com/subject/sfuqoqtx.html