[Docker应用系列·1] 浅析Jedis Pool

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: >本文环境: jedis 2.1.0 redis 2.8.13 ###Redis无响应 我们的各个子系统均使用Jedis作为Redis的Java Client读写数据。 Jedis底层使用Apache的Common Pool,每个Jedis对象在底层都视为一个Object。 当释放连接失败后,我们的做法只是输出错误日志,这会导致该连接无法回收再利用,最终服务器的连接池会被拖

本文环境:
jedis 2.1.0

redis 2.8.13

Redis无响应

我们的各个子系统均使用Jedis作为Redis的Java Client读写数据。

Jedis底层使用Apache的Common Pool,每个Jedis对象在底层都视为一个Object。

当释放连接失败后,我们的做法只是输出错误日志,这会导致该连接无法回收再利用,最终服务器的连接池会被拖垮,现象就是我们遇到的无响应、重启就好。

此前我们分析过,现在得出的结论是:这不是服务器操作系统连接数的问题,也不是数据频繁读写的问题,而是释放资源时遇到异常时,我们没有将该连接直接断掉、丢弃。

如下是AEnv代码的相关变更情况,仅做参考:

高效读写调研

常用的Jedis读写方式包括:set/get、hset/hget和mset/mget,分别用作基本读写、hash读写和批量读写。

对此,我进行了一次性能测试(见下图)。
jedis_release_connection

从结果上看,批量读写的优势是非常明显的,如果子系统有类似业务逻辑,希望考虑这种形式。对于hash读写,在数据量聚集在某个特殊范围内时,其效率是比基本读写要高的。

另外,Jedis的单点是线程不安全的,通过Apache的Common Pool获取的Jedis实例是线程安全的,因此不建议子系统使用new一个实例的方式。
jedis_rw

Master-Slave调研

Redis的主从环境,我已经使用Docker搭建好,参见[[Docker系列·10] 搭建Redis服务器](http://www.atatech.org/articles/21551)

本次调研的目的是:观察主从复制、读写分离是否可以提高读写效率(虽然主从模式会提供高可用性,但目前子系统更关注的是速度)。

测试采用两个Jedis线程池一主一辅,主写、辅读。

单线程的测试结果如读写性能并不高。

100个线程的测试情况如下。从图中可以看出,数据量增到10000条的时候是个拐点,读写分离在此处开始呈现优势。不管是否读写分离,单次SET永远不是高效的写入方式。
HSET在5万条数据的单机读写时出现过读超时,怀疑在做rehash(表中红色条目)。
jedis_rw2

附:

Docker Redis示意图:

![2014_08_27_redis_master_slave]
(http://img1.tbcdn.cn/L1/461/1/519d6d0663bda5dbd512829b3da221f1e0872743)

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
135 5
|
14天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
81 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
13天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
13天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
15天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
1月前
|
JSON JavaScript 测试技术
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
【10月更文挑战第9天】使用Docker部署PPTist在线演示文稿应用
42 1
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
|
21天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
55 1
|
1月前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
【10月更文挑战第4天】使用Docker部署Radicale日历和联系人应用
139 2
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
|
7天前
|
运维 Kubernetes 持续交付
深入理解Docker容器化技术及其在生产环境中的应用
深入理解Docker容器化技术及其在生产环境中的应用
22 0
|
8天前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
下一篇
无影云桌面