阿里云redis有些key无法写入_跬步千里 —— 阿里云Redis bitfield命令加速记

阿里云数据库开发工程师凡澈分享了一篇关于阿里云Redis读写分离实例遇到的问题及解决方案。当使用bitfield命令时,由于其包含写属性,导致master节点CPU高而slave空闲。为解决这一问题,阿里云引入了bitfield_ro命令,使其只支持GET选项,从而在slave节点上加速执行。同时,proxy也进行了兼容性调整,使得只有GET选项的bitfield命令能在slave上执行,无需用户代码改造。此外,这一改进已贡献回Redis社区。
摘要由CSDN通过智能技术生成
题记:在一次阿里云客户问题解决中,通过给Redis添加bitfield_ro命令,解决了Redis官方bitfield命令无法加速执行的问题,实现高性能访问并向客户交付了满意的答卷。本文详细描述了阿里云是怎么通过挖掘产品中每一点细小的功能改进和使用体验,并持续地反馈社区的全过程的记录。

本文作者:凡澈,阿里云数据库开发工程师

1. 问题


阿里云某客户发现自己使用读写分离实例,master的cpu特别高,而读写分离中承担读流量的slave节点却相对空闲。用户CPU打满后,访问到主节点的的线上服务受到了较大影响。1.1 读写分离原理


Redis读写分离实例的原理是:key统一写入到master,然后通过主从复制同步到slave,用户的请求通过proxy做判断,如果是写请求,转发到master;如果是读请求,分散转发到slave,这种架构适合读请求数量远大于写请求数量的业务,读写分离架构示意图如下所示。

fd724d33d5d4c72d2c0d995bd98b49ac.png
图1. 阿里云Redis读写分离版读写命令转发示例

1.2 bitfield命令
经过和客户沟通查看后,客户使用了大量的bitfield做读取,首先介绍一下这个命令的用法和场景,bitfield 是针对bitmap数据类型操作的命令,bitmap通常被用来在极小空间消耗下通过位的运算(AND/OR/XOR/NOT)实现对状态的判断,常见的使用场景例如:

  • 通过bitmap来记录用户每天应用登录状态,即如果$ID用户登录,就SETBIT logins:20200404 $ID 1,表示用户$ID在20200404这一天登录了,通过BITCOUNT logins:20200404可以得到这一天所有登录过的用户数量;通过对两天的记录求AND,可以判断哪个用户连续两天登录了,即BITOP AND logins:20200404-05 logins:20200404 logins:20200404。
  • 判断用户是否阅读了共同的文章,观看了共同的视频等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值