赞
踩
目录
一般设置状态的生命周期的目的无非就是减少服务器的资源占用,在生成环境中,对状态设置生命周期,例如设置1天后自动清除状态(为null)
一般用来求当天的独立用户数等指标,例如求页面浏览的独立用户数,也就是uv,我们可以设置一个状态来标记该用户当天是否已经访问该页面,如果状态为null,加1,不为null,就需要判断该状态(一般存储的是用户浏览的日期)是否等于当天,不等,加1并更新状态,否则,不做处理。
这里就涉及一个问题,状态假如不为null,那么用户如果5天不访问,状态也跟着保存5天,显然,在数据量大的时候,无疑很占用资源。
这时我们可以给状态设置一个生命周期,设置为1天并且当状态更新时,生命周期也重新刷新,假如一个用户上一次浏览的日期为2023-03-04 8:00:00,其中状态没有更新,那么状态将会在2023-03-05 8:00:00过期(为null),就算此时用户在2023-03-05 7:00:00或者2023-03-05 9:00:00浏览,同样加1,同样符合我们求日活uv。
- private ValueState<String> valueState;
-
- @Override
- public void open(Configuration parameters) throws Exception {
- // 设置状态生命周期
- StateTtlConfig stateTtlConfig = new StateTtlConfig
- .Builder(Time.days(1)) // 周期为1天
- .setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite) // 创建或者更新状态时重新刷新生命周期
- .build();
- ValueStateDescriptor<String> valueStateDs = new ValueStateDescriptor<>("last_order_state", String.class);
- valueStateDs.enableTimeToLive(stateTtlConfig);
- valueState = getRuntimeContext().getState(valueStateDs);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。