这是一篇博客程序的测试文章

杂记 2023年3月28日 阅读人数:34

上的发大水发大水

Redis异步客户端选型及落地实践

可视化服务编排系统是能够通过线上可视化拖拽、配置的方式完成对接口的编排,可在线完成服务的调试、测试,实现业务需求的交付,详细内容可参考:https://mp.weixin.qq.com/s/5oN9JqWN7n-4Zv6B9K8kWQ。

为了支持更加广泛的业务场景,可视化编排系统近期需要支持对缓存的操作功能,为保证编排系统的性能,服务的执行过程采用了异步的方式,因此我们考虑使用Redis的异步客户端来完成对缓存的操作。

Redis客户端

Jedis/Lettuce

Redis官方推荐的Redis客户端有Jedis、Lettuce等等,其中Jedis 是老牌的 Redis 的 Java 实现客户端,提供了比较全面的 Redis 命令的支持,在spring-boot 1.x 默认使用Jedis。

但是Jedis使用阻塞的 IO,且其方法调用都是同步的,程序流需要等到 sockets 处理完 IO 才能执行,不支持异步,在并发场景下,使用Jedis客户端会耗费较多的资源。

此外,Jedis 客户端实例不是线程安全的,要想保证线程安全,必须要使用连接池,每个线程需要时从连接池取出连接实例,完成操作后或者遇到异常归还实例。当连接数随着业务不断上升时,对物理连接的消耗也会成为性能和稳定性的潜在风险点。因此在spring-boot 2.x中,redis客户端默认改用了Lettuce。

我们可以看下 Spring Data Redis 帮助文档给出的对比表格,里面详细地记录了两个主流Redis客户端之间的差异。