acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.84k stars 937 forks source link

acl::redis_client_cluster线程安全的问题 #264

Closed liuyx-baller closed 2 years ago

liuyx-baller commented 2 years ago

您好,我的使用方法如下:

  1. 服务初始化阶段创建一个redis_client_cluster实例m_pRedisClientConn。
  2. 服务初始化阶段基于m_pRedisClientConn创建一批acl::redis_hash的实例,形成一个acl::redis_hash实例池。
  3. 服务运行过程有多个线程会同时去acl::redis_hash的实例池中取实例,业务会保证每个线程取到不同的实例,同时也可以保证一个实例仅在一个线程中工作。

请问这样使用是否可行? 另外我看https://github.com/acl-dev/acl/blob/master/lib_acl_cpp/samples/redis/README.md中的介绍是在工作线程中去创建的acl::redis_hash实例,正确的(或者说建议的)使用方法是初始化阶段创建一个实例池还是需要执行时再去创建?

zhengshuxin commented 2 years ago

你这样用也是没有问题的,你创建的 redis_hash 实例会被反复使用,因为每次使用时内部都会创建一些临时内存(虽然 redis_hadh 对象析构时会自动清理掉这些内存),所以在每次用完应该调用 clear() 方法清理掉这些临时内存,以避免运行时的内存膨胀。

liuyx-baller commented 2 years ago

多谢