• RedisBigKey闭坑指南


    目录

    引子

    什么是Big Key

    Big Key导致的问题

    产生BigKey的原因

    优化BigKey


    引子

    目前我们项目中,涉及到计数和关联关系,会在redis中存储我们都是作为单key去保存的,  

    用户 :博主 :关注状态 这样的字段会独立保存,但是在有的项目中可能会有人把所有的key,都

    作为一个list或者hash对象去保存那么如此一来  这个key会非常大占用的内存空间也会很

     一旦修改或新增属性,那么会很卡  甚至带来性能引发的风险问题。

    什么是Big Key

    Redis  一个字符串最大为512MB  一个二级数据结构 (比如hashlist  setzset  

    以存储大约40亿个元素 ,但实际上中 如果下面两种情况 我可以称之为BigKey

    字符串类型: 单个value值很大 超过10KB可以认为就是BigKey

    非字符串类型  hash  list  set  zset 它们的big体现在元素个数太多  比如一个list中有

    10万条记录 。  一个hash对象中有1个属性

    Big Key导致的问

      BigKey会导致内存空间不均匀  不利于集群对内存的统一管理  可能存在数据丢失的风险

     此外  BigKey也可能导致请求超时或阻塞   因为操作BigKey的时间比较耗时  那么redis基于

    数据的一致性  那么会阻塞,  如此请求容易超时,  导致触发故障。

     BigKey越大,  那么每次get请求要产生的网络流量就会更  假设一个BigKey1MB  客户端

    每秒访问量为1000  那么每秒产生1000MB的流量,  对于普通云服务器来说,  可能就悲剧

    了,  如果你采用单机集群的方式来部署,  那么一个BigKey能会对其他单实例造成惨烈影

      风险很

    BigKey很大  那么迁移就会很烦很恶心人  比如集群hash slot  会容易导致失败

    产生BigKey的原因

    像我们现在类似社交类的应用  或者以前的自媒体涉及到粉丝的  那么很容易出现

    bigkey。  比如我们把粉丝关联存 redis  hash去存  那么一个流量明星的粉丝  肯定是一个

    BigKey

    优化BigKey

    我们在平时开发过程中  一定要注意BigKey的产生  key的命名一定要规范  减少hash

    list  setzset的使用 如果要使用  那要做拆分  或者求模拆分   比如把一个list哈希为10

      那么存取的时候根据用户id求模存取到不同的list中就行  如此一个大key就被拆为10

    份,  可以减少大体积   同时也分散了请求到10key中进行查询

    此外,  如果你要删除bigkey进行重新优化  建议半夜凌晨去处理  因为用户请求会比白天少 

    而且尽量采用批量删除的方式会更好。

  • 相关阅读:
    2022年Spring Cloud Alibaba快速上手教程
    阿里云增强版实人认证--银行卡要素核验
    超越想象!高效快速的大规模相似性搜索引擎与卓越GPU加速分析,助力您的数据发现新纪元
    零时科技 || Tornado Cash中merkleTree和zk-snarks
    域名解析异常如何解决?快解析轻松实现动态域名解析
    Deep Reinforcement Learning with Double Q-learning(double DQN)
    SpringMVC程序开发
    Revit中幕墙嵌入墙中不显示问题-【图纸生成墙】
    ECharts 数据可视化简介与基本使用
    Map获取其键和值
  • 原文地址:https://blog.csdn.net/m0_64005381/article/details/127546931