组件工程问题

explain

这个文件存在的意义是记录工程问题以及所可能的目前的解决方案。

redis

大key问题和热key问题

https://help.aliyun.com/document_detail/353223.html

名词解释
大Key通常以Key的大小和Key中成员的数量来综合判定,例如:Key本身的数据量过大:一个String类型的Key,它的值为5 MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。
热Key通常以其接收到的Key被请求频率来判定,例如:QPS集中在特定的Key:Redis实例的总QPS(每秒查询率)为10,000,而其中一个Key的每秒访问量达到了7,000。带宽使用率集中在特定的Key:对一个拥有上千个成员且总大小为1 MB的HASH Key每秒发送大量的HGETALL操作请求。CPU使用时间占比集中在特定的Key:对一个拥有数万个成员的Key(ZSET类型)每秒发送大量的ZRANGE操作请求。

大key危害

看上面连接

大key解决方案

通俗来说大key说白是value太大了,所以需要优化是大value问题。

主要分为2种情况

  1. 可删除,可以删除的就需要进行删除处理。
  2. 不可删除。许多的value不可以删除,所以操作上来说就需要进行大key拆分了。

热key危害

负载不均衡,旱的旱死,劳的劳死。可能总警报,但还是不够用。

热key解决方案

将key加一个随机hash值,分发到不同的节点上。

关键点

怎么发现大key和热key

看上面连接

秒杀场景下超访问问题

https://crossoverjie.top/2018/04/28/sbc/sbc7-Distributed-Limit/

我100的库存,有100000人请求,其中大部分请求没必要走到后面的步骤,直接在前处理干掉。

关键代码

--lua 下标从 1 开始
-- 限流 key
local key = KEYS[1]
-- 限流大小
local limit = tonumber(ARGV[1])

-- 获取当前流量大小
local curentLimit = tonumber(redis.call('get', key) or "0")

if curentLimit + 1 > limit then
    -- 达到限流大小 返回
    return 0;
else
    -- 没有达到阈值 value + 1
    redis.call("INCRBY", key, 1)
    redis.call("EXPIRE", key, 2)
    return curentLimit + 1
end

lua脚本,给关键key设置访问次数,以及过期事件,将访问压力按时间切分限制,例如

public boolean limit() {
    String key = String.valueOf(System.currentTimeMillis() / 1000);
    Object result = null;
    if (jedis instanceof Jedis) {
        result = ((Jedis) this.jedis).eval(script, Collections.singletonList(key), Collections.singletonList(String.valueOf(limit)));
    } else if (jedis instanceof JedisCluster) {
        result = ((JedisCluster) this.jedis).eval(script, Collections.singletonList(key), Collections.singletonList(String.valueOf(limit)));
    } else {
        //throw new RuntimeException("instance is error") ;
        return false;
    }

    if (FAIL_CODE != (Long) result) {
        return true;
    } else {
        return false;
    }
}

就是设置为1s内超过多少次访问不予访问。这个需要与过期时间进行交互,自己想想具体过程吧。和tm的消费卷系统差不多妈的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Catia组件工程图是指在Catia软件中创建的一个包含多个部件的组成结构图,用于展示和管理不同部件之间的装配关系和连接方式。而零件明细表是指对于一个组件工程图来说,列出其中包含的所有零部件的详细清单,包括每个零部件的名称、标识、数量、尺寸等信息。 在Catia中创建组件工程图时,首先需要将各个零部件逐个导入到工程图中。在导入过程中,可以对每个部件进行相应的属性设定,包括部件的材料、质量等信息。导入完成后,通过Catia的装配功能,可以选择不同的连接方式来连接各个部件,包括常用的螺栓连接、焊接连接等。在连接的过程中,可以通过调整零部件的相对位置和角度来精确控制组件的装配状态。 当组件工程图创建完成后,可以生成一个零件明细表。该表可以根据组件工程图中的部件信息自动生成,列出所有零部件的详细清单。表格中每一行对应一个零部件,每一列则代表零部件的一个属性,例如名称、标识、数量、尺寸等。通过查看零件明细表,可以直观地了解到组件工程图中涉及的所有零部件的基本信息和配置。 总之,Catia的组件工程图零件明细表是在Catia软件中创建的一个包含多个零部件的组成结构图,并通过生成明细表,列出其中包含的所有零部件的详细信息,方便用户了解和管理组件的装配关系和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值