我在应用程序中使用 redigo,我想知道我的服务应该如何与 Redis 交互。
维基百科对线程安全有这样的说法:
线程安全是适用于多线程代码的计算机编程概念。线程安全代码仅以确保所有线程正常运行并满足其设计规范而没有意外交互的方式操作共享数据结构。
我对此的解释是,如果一个数据结构需要被多个客户端访问(在当今的微服务世界中,数百、数千甚至数百万)线程安全是我们确保正确保存状态的方式系统无论何时何地访问数据。这意味着解决访问优先级(哪个客户端首先到达那里),确保锁定突变(一次只有一个客户端可以写入)同时促进并发性(如果没有更改,许多客户端可以读取数据)。
从我收集到的信息来看,一个 redigo 客户端可以被多个“goroutines”(或线程)同时使用。这让我相信像我熟悉的 Java 中的单例实现就足够了。
我看到了示例,例如,here和here,其中 Redis 连接(pool
s)只是在main
方法中创建并传递给各种 redigo 函数。这似乎不是完成工作的最可靠方法,尽管它们似乎确实遵循单例模式。(可以理解的是,第二篇文章实际上只是一个快速的 n'dirty API。)
我会这样做:
在返回 redigo的
main
函数调用中。init
pool
创建接受 a
pool
作为参数的处理函数(控制器)(一种“脏”依赖注入)。
这将(我认为)确保只pool
创建一个。
pool
或者,每次我想访问数据存储时,是否有任何理由无法创建(客户端)?pool
如果客户端在事务完成后被杀死,那么每次处理程序收到请求时启动一个新的有什么问题吗?