0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis实战的常见问题和解决方法

汽车玩家 来源:今日头条 作者:今日头条 2020-05-03 18:22 次阅读

一、前言

小伙伴们对Redis应该不陌生,Redis是系统必备的分布式缓存中间件,主要用来解决高并发下分担DB资源的负载,从而提升系统吞吐量。

Redis支持多种数据类型,String(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合),不同的类型可以应用到不同的业务需求中。

Redis的集群部署也增强了Redis的高可用性,以及对数据的易扩容。

上面都是Redis知识掌握的重点,这些知识点也是我们工作的时候,经常用到的,网上介绍的也挺多,老顾就不介绍了。

今天老顾分享Redis企业应用,从业务实战的纬度,看看我们平时使用Redis出现了什么问题?如何去解决?

二、Redis集群划分

现在我们企业中,做的项目产品肯定不止一个;或者一个大的平台中,会有很多业务线。不同的项目和业务线肯定是不同的团队进行开发的。那大家都会用到Redis,那怎么去划分?

独立Redis集群

这种方案就是不同的业务用不同的Redis集群,这种方案针对一些小项目或业务线不复杂,以及用到Redis缓存范围不大的话,是对服务器资源的浪费,而且增加了运维的工作量。

当然也有好处,就是Redis资源的独立性,不干扰;一般会用在大项目中。

公共Redis集群

这种方案就是一些业务共用一个Redis集群,增强了对Redis资源的利用率。

三、问题

在一般企业中,不同的业务线一般我们采用的是公共Redis集群,因为业务线都不大,独立集群没有必要。这样虽然对Redis资源充分利用了,但会出现一些问题。

四、如何区分业务

多业务间用Redis,会出现很多缓存Key,根本没法知道哪些key是属于哪个业务的,如:

KEY: user:1000、user:book、book、user:like:book、book:user;甚至会出现key冲突。

Redis的key在开发的使用是要合理进行设计规划的,但两个不同的团队,技术和管理都不一样,即使有规范文档,但不同的业务团队间,规范的执行就不得而知。

五、如何优雅扩容

我们在开发web服务时,会用类似jedis客户端连接Redis服务器,会在配置文件中加入Redis集群地址。不过当系统遇到Redis负载太高,或者redis的数据需要扩容,就需要增加Redis服务器。这时就需要重新把配置文件中的Redis集群更改,再重启应用。

上面的方式是否太low了,都需要重新启动应用,那么多的应用都需要重启,是不是很麻烦,而且如果在无法区分业务的情况下,还不知道重启哪些业务应用。

六、如何发现异常

因为不同的业务,不同的团队,不同的开发人员在真实业务场景中,我们管理者是无法避免bug存在的,也无法预测线上会发生什么样的问题?如:发现Redis集群有不稳定情况,cpu负载非常高,那我们怎么知道是哪个业务导致的呢?

这个是非常重要的,因为这个是公共的Redis集群,一旦这个集群挂了,会影响整个业务。

七、如何截断异常

当我们在生产环境中,发现异常是由哪个业务产生时,或者是哪个应用服务器产生的,那如何很快速截断的让有问题的业务和应用服务器,先不让他们访问我们公共Redis集群,等排查出原因在恢复他们的访问权限。

八、解决方案

小伙伴看到这里,感觉怎么样?是不是工作中,没有想过这些问题,工作中就直接按照网上的介绍先拿来用了。

现在是不是心里在想,怎么去解决上面的问题?

老顾这里介绍一下解决思路,具体整个代码等老顾的开源项目rb-cache上线后,会分享给大家。

九、区分业务

这个问题解决相对比较简单,就是对我们现有的客户端工具,进行二次封装,

Redis实战的常见问题和解决方法

上图就是定义一个二次封装接口

Redis实战的常见问题和解决方法

其实原理就是强制在方法中,要开发人员赋予业务区分,每个业务都是在开发前,管理人员定下来的,这个管理就比较简单了。

如果项目管理中,对业务的划分比较合理的话,可以在外面再封装一个简单的方法,把business业务放在配置文件中,这样就不需要每次都要传business这个参数了。

十、优雅扩容

解决这个问题,其实原理比较简单,就是程序如果能够知道Redis集群地址产生了变化,重新设置一下jedis客户端的连接配置。现在的问题就是如何知道Redis集群地址发生了改变?

我们可以采用把Redis的集群地址配置在zookeeper中,应用在启动的时候,获取zk上的集群地址的值,进行初始化。如果想要改变集群地址,要在zk上面进行设置。

zk重要的特性就是监听特性,节点发生变化,就会立刻把变化发送给应用,从而应用获取到值,重新设置jedis客户端连接

Redis实战的常见问题和解决方法

十一、发现异常

发现异常这个问题,其实就是一个监控的问题,我们需要把各个客户端使用Redis的情况进行监控。怎么监控?

需要一个监控工具,这个监控工具网上有几个,推荐使用小米的open-falcon,自行搭建改监控系统,搭建比较复杂,但功能比较强大,很多公司都在使用。

当然小伙伴们可以用别的监控工具,只要数据上报协议,和监控报表输出功能即可,当然也要有报警的功能,及时给运维人员报告

再使用Aop拦截Redis操作类,拦截Redis操作,把相关数据进行封装。每隔1分钟把这些数据上报到open-falcon平台中。具体监控什么数据,由业务决定,一般要把设置的key,业务,操作时长,哪个客户端IP发起的,都需要监控。

在可以设置相关的报警规则,如:某个key一直被调用,在一段时间内操作次数太高。这样就可以方便排查哪些key导致cpu负载太高,就可以去看一下设置这个key的代码,有没有什么问题?是不是死循环等问题?

十二、截断异常

在上面的发现异常的基础上面,如果发现某些业务应用,不正常,就可以立即发起截断该客户端的请求,这样可以保证其他业务不受影响。这里我们使用客户端方式去实现截断。原理也很简单,在Redis二次封装的类中,我们需要判断本机是否在黑名单中,如果存在,则无法操作方法,或报异常。

Redis实战的常见问题和解决方法

如何知道黑名单的变化,跟优雅扩容那个Redis集群地址的改变,方案一样。

十三、总结

在企业应用中,小伙伴们要经常去思考,业务进行中,如何方便管理,及时发现问题,是非常重要的。这也是很多管理者经常忽略的,都只是先把功能完成了,而不顾管理和监控。希望这篇文章能够帮助大家,从另一个纬度发现问题。谢谢!!!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20508
  • Redis
    +关注

    关注

    0

    文章

    374

    浏览量

    10871
收藏 人收藏

    评论

    相关推荐

    mac的常见问题解决方法

    Mac常见问题解决方法 1. 系统启动缓慢 问题描述: 启动Mac时,系统启动缓慢,甚至出现卡顿现象。 解决方法: 检查启动项目: 打开系统偏好设置中的“用户与群组”,点击“登录项”,移除不必要
    的头像 发表于 12-19 15:02 152次阅读

    Ubuntu系统常见问题解决方法

    Ubuntu是一个基于Linux的开源操作系统,以其稳定性和易用性而受到许多用户的喜爱。然而,在使用过程中,用户可能会遇到各种问题。以下是一些Ubuntu系统中常见的问题及其解决方法。 1. 无法
    的头像 发表于 12-12 14:32 244次阅读

    multisi的常见问题解决方法

    遇到各种问题。 1. 启动顺序问题 问题描述: 用户在安装多系统后,发现默认启动顺序不符合预期,导致无法正常进入某个操作系统。 解决方法: 修改启动顺序: 进入BIOS设置,找到启动顺序(Boot Order)选项,调整各个操作系统的启动顺序。
    的头像 发表于 12-09 11:07 159次阅读

    VLAN 配置中的常见问题解决

    VLAN(虚拟局域网)配置中的常见问题涉及多个方面,包括配置错误、网络互通问题、设备连接故障等。以下是对这些问题的分析和解决方法: 一、配置错误 管理VLAN配置错误 问题描述 :配置了错误的管理
    的头像 发表于 11-19 09:22 1310次阅读

    Mobaxterm 常见问题解决方法

    强大,但用户在使用过程中可能会遇到一些问题。以下是一些常见问题及其解决方法: 1. 连接问题 问题: 无法连接到远程服务器。 解决方法: 确认服务器地址和端口号是否正确。 检查网络连接是否正常。 确认服务器是否允许SSH/Tel
    的头像 发表于 11-10 15:35 2441次阅读

    UCD90xxx系列常见问题和解

    电子发烧友网站提供《UCD90xxx系列常见问题和解答.pdf》资料免费下载
    发表于 10-15 11:29 0次下载
    UCD90xxx系列<b class='flag-5'>常见问题</b><b class='flag-5'>和解</b>答

    HSHA驱动器报警的常见问题解决方法

    HSHA驱动器报警的常见问题解决方法可以归纳如下: 常见问题 电机过载 : 原因 :电机长时间超负荷运行或短时间负载过重。 表现 :驱动器可能显示Err 03等错误代码。 伺服驱动过载 : 原因
    的头像 发表于 09-19 09:20 837次阅读

    常见的CAN总线故障及原因和解决方法

    总线也可能遇到一些故障。以下是一些常见的CAN总线故障及其原因和解决方法。 物理层故障 物理层故障通常是由于电缆损坏、连接器故障或接地不良等原因引起的。以下是一些具体的故障类型: 1.1 电缆损坏 电缆损坏可能是由于磨损、老化或外部环境因素导致的。损坏的电缆
    的头像 发表于 06-16 10:34 6210次阅读

    常见的锡珠形成的原因和解决方法

    及时进行处理的话可能会影响到板子的使用寿命和使用可靠性,下面深圳佳金源锡膏厂家给大家简单介绍一下常见的锡珠形成的原因和解决方法:一、形成原因1、感应熔敷在焊接加热
    的头像 发表于 06-01 11:02 834次阅读
    <b class='flag-5'>常见</b>的锡珠形成的原因<b class='flag-5'>和解决方法</b>

    连接器的常见故障和解决方法

    在电子设备和系统中,连接器作为关键部件,其性能的稳定性和可靠性直接影响着整个系统的运行效率。然而,由于各种因素的影响,连接器在使用过程中难免会出现各种故障。本文将对连接器的常见故障进行详细分析,并提供相应的解决方法,以供参考。
    的头像 发表于 05-29 16:07 2595次阅读

    鸿蒙OpenHarmony:【常见编译问题和解决方法

    常见编译问题和解决方法
    的头像 发表于 05-11 16:09 2148次阅读

    Ubuntu系统常见问题及解答

    今天小编为大家总结了Ubuntu系统常见问题解决方法,便于收藏和查阅,大家快快码住哦~
    的头像 发表于 04-19 12:29 1203次阅读
    Ubuntu系统<b class='flag-5'>常见问题</b>及解答

    家用路由器常见问题解决方法

    家用路由器已成为我们家庭中不可或缺的一部分。然而,由于各种原因,家用路由器可能会遇到各种各样的问题。本文将介绍一些常见的家用路由器问题及相应的解决方法,以帮助读者更好地维护和管理自己的网络环境。
    的头像 发表于 04-18 17:42 1098次阅读

    编码器7种常见故障及解决方法是什么?

    常见故障及相应的解决方法,以帮助读者更好地应对和解决编码器故障。 一、轴承故障 轴承是编码器的重要组成部分,负责支撑旋转轴和传感元件,如果轴承出现故障,将会影响编码器的正常运行。常见
    的头像 发表于 01-26 14:56 1.4w次阅读

    PCB金手指设计的常见问题和解决方案

    PCB金手指设计的常见问题和解决方案
    的头像 发表于 12-25 10:09 2302次阅读