美文网首页
Redis 之使用的注意事项

Redis 之使用的注意事项

作者: 杭州_mina | 来源:发表于2017-06-02 12:13 被阅读0次

1.redis使用中的深坑monitor命令

    事情的原由开启redis的monitor命令,为然后把日志出入到磁盘中,方便查询系统bug。到了第二天下午2点左右,整个平台开始出现大面积的崩溃,通过报警发现redis的cpu占用达到99%,但是不知道由什么引起的,随后开始google 发现网上已经有人遇到相同的问题。他说的原因就是monitor,随后我们感觉关闭了monitor命令 cpu一下子恢复正常 从99%降到33%,以下是monitor命令的截图正常的情况cpu占用39%

image.png

当开启monitor命令,如下图

image.png

    redis的cpu占用瞬间从39%变成85%。为什么说redis的cpu占用达到99%平台就会卡住,因为redis是单核所有系统操作redis都被阻塞了,导致一系列的雪崩。

2.redis使用中的深坑keys命令

    系统有个业务场景是这样的,需要推送通知给所有的在线客服,我们一个程序员写了这样的代码

Jedis jedis = CacheUtils.getJedis();
try{
   List list =  jedis.keys("online.kf.*");
   .......循环list 执行推送业务.....
}finally{
  CacheUtils.returnJedis(jedis);
}

    看上去代码没有毛病,但是发布到了线上系统开始崩溃,又是一连串的雪崩。。。 o(︶︿︶)o唉 大家不要笑话我们的系统架构,没办法系统还在改造中。通过redis的执行slowlog get 10 分析执行查询时间发行keys命令执行长达1秒钟,也就是说1秒钟内所有操作redis的系统将被阻塞。。。。 好可怕啊有木有⊙♂⊙。。。

image.png

    上图是我们生产环境执行的keys时间将近2秒钟,keys是时间复杂度是O(N), N 为数据库中 key 的数量,redis的官方给出了使用keys的一个警告。

image.png

3.redis周期性的抛出Could not get a resource from the pool

    原由是客户度去jedispool获取jedis的时候发现jedis已经被其他线程全部取走,然后当前线程会进入等待,等待时间超过maxActive将会抛出Could not get a resource from the pool,造成这点的原因我遇到了两种。
    1.由于系统的并发量增加导致的瓶颈,解决方案 调整maxActive的大小、调整MaxTotal的大小、testOnBorrow为false testOnReturn为false 。
    testOnBorrow、testOnReturn这两个参数的作用是从jedispool获取jedis 和释放jedis的会ping一下redis,如果ping不通则抛出异常,所以这里造成了资源的两次浪费。╮(╯_╰)╭

 @Override
  public boolean validateObject(PooledObject<Jedis> pooledJedis) {
    final BinaryJedis jedis = pooledJedis.getObject();
    try {
      HostAndPort hostAndPort = this.hostAndPort.get();

      String connectionHost = jedis.getClient().getHost();
      int connectionPort = jedis.getClient().getPort();

      return hostAndPort.getHost().equals(connectionHost)
          && hostAndPort.getPort() == connectionPort && jedis.isConnected()
          && jedis.ping().equals("PONG");
    } catch (final Exception e) {
      return false;
    }
  }

    2.内网带宽满被占用满。解决方案 网卡把千兆网卡换成万兆完美解决。
    内网服务之间消息大量的传输沾满了整个带宽导致应用程序向redis发送请求的时候卡了,所以导致异常╮(╯_╰)╭

相关文章

  • redis 发布订阅及key过期通知

    注意事项 redis 发布订阅支持redis cluster集群使用,key过期通知不支持集群使用,目前也没查到集...

  • 好的文章

    Redis基础、高级特性与性能调优Redis 5种数据结构使用及注意事项

  • Redis 之使用的注意事项

    1.redis使用中的深坑monitor命令 事情的原由开启redis的monitor命令,为然后把日志出入到磁盘...

  • REDIS

    Linux(Centos)之安装Redis及注意事项 阅读目录 1.redis简单说明 2.准备工作 3.gcc的...

  • Redis使用注意事项

    Redis使用注意事项 Redis作为单线程应用,如何保证高可用?基本上,通过lua和Pipeline机制保证re...

  • 后端存储11(Redis缓存)

    Redis使用的注意事项 Redis 是一个使用内存保存数据的高性能 KV 数据库,它的高性能主要来自于: 1.简...

  • Redis:Redis使用注意事项

    修改 redis.conf 前先做备份 修改之前先备份一份默认的初始化配置文件,以备不时之需。 Redis 字符串...

  • Redis高并发下使用及注意事项

    Redis高并发下使用及注意事项 Redis 数据失效导致的雪崩 因为 缓存失效,从而导致大量请求 操作数据库:1...

  • 2020-03-24

    Redis学习记录(一)之Redis的简介及安装使用 Redis作为NoSql较为流行使用的数据库之一,个人觉得还...

  • redis笔记

    redis使用项目经验 验证码 热点数据 使用场景 事务执行流程 事务注意事项 watch 分布式锁(解决超卖问题...

网友评论

      本文标题:Redis 之使用的注意事项

      本文链接:https://www.haomeiwen.com/subject/otxufxtx.html