美文网首页
【输入输出】32周[0805-0811]

【输入输出】32周[0805-0811]

作者: 言十年 | 来源:发表于2019-08-11 20:35 被阅读0次

输入

其实这周没什么计划,一方面忙着写需求。空闲了。看几篇容易看的文章。

《黄勇的OKR实战笔记》阅读了4篇,我们用OKR。但我对这玩意儿不了解,故随便看看。

其他的不记了。

输出

暂无,我的算法okr,算是打脸了。

收获

代码

1.php代码中,操作redis使用lua代码。

写一条数据

$redis->set('name_list', json_encode(['name'=>'xiaoming']));

用lua读一条数据。

$lua = <<<'LUA'
    return redis.call('get','name_list');
LUA;
return $redis->eval($lua);

结果

'{"name":"xiaoming"}'

2.Code Review一段代码

代码稍微处理了下

public static function isNewUser($deviceId, $clientId):bool
{
    $res = 0;
    if (empty($deviceId)) {
        return (bool)$res;
    }

    $key   = sprintf(CacheKey::IS_NEW_USER, $deviceId);
    $redis = Redis::getInstance('xxx');
    $ret   = $redis->get($key);
    if (is_string($ret) && in_array($ret, ['1', '0'])) {
        return (bool)$ret;
    }

    $deviceCreateTime = UserService::getDeviceCreateTime($deviceId, $clientId);
    $expireTime       = 604800;// 缓存 7天
    if (((time() - $deviceCreateTime) <= 24 * 3600) ) {
        $res = 1;
        $expireTime = ($deviceCreateTime + 86400) - time();
    }

    $redis->setex($key, $expireTime,  $res);
    return (bool)$res;
}

开始....

槽点

  1. empty($deviceId) 之后,直接return false。

2.is_string($ret) && in_array($ret, ['1', '0']),既然返回值只有'1'跟'0'。直接两个"==="判断即可。避免两次函数调用。减少开销。

  1. 24 * 3600,直接写计算后的值。

4.time(),调用一次赋值给变量,下面就可以不用。 time()会造成系统调用(内核态到用户态)。

5.($deviceCreateTime + 86400) - time(),相当于(86400-(time() - $deviceCreateTime)),故跟((time() - $deviceCreateTime) <= 24 * 3600)。可以复用。

鸣谢大佬帮忙review代码,蛮有收获。

一个优化点

1.是否可以不用time()。因为代码经过服务执行。能否直接用服务器的时间(或者统一的入口网关时间)。

示例代码:

public static function requestTime()
{
    if (!isset(self::$server['REQUEST_TIME'])) {
        self::$server['REQUEST_TIME'] = time();
    }
    return self::$server['REQUEST_TIME'];
}

一个隐藏的点

  1. UserService::getDeviceCreateTime($deviceId, $clientId); 是否需要catch?实际上,该代码里面做了catch。但异常的时候,返回的是0。问题是:如果是0,新用户被误认为老用户,那么24小时内(这台机器这辈子不能使用)就无法使用新用户能使用的功能。所以,这是一个隐藏的逻辑问题。如果异常不能够缓存。

命令与工具

1.MongoDB 可视化工具

https://www.cnblogs.com/tugenhua0707/p/9250673.html

2.文档查看 https://devdocs.io/

3.画图工具edrawmax(我用的是OmiGraffle)

方式方法

本周做一个小需求,要求比较紧,故把前三天的想法与做法总结成下文。

1.【思考】忙有忙的好处--任务分解、做事反馈、ER图https://www.jianshu.com/p/3e2067da128d

参考资料:

相关文章

  • 【输入输出】32周[0805-0811]

    输入 其实这周没什么计划,一方面忙着写需求。空闲了。看几篇容易看的文章。 《黄勇的OKR实战笔记》阅读了4篇,我们...

  • 0805-0811

    这一篇没什么价值,就是自己和自己对话,随便评论就可以~~ 复盘: 上一周总体来看,70%满意率。效率还是没有达到预...

  • A【周检视】N09C施梅丹第20周0805-0811/2019

    周计划 0805-0811的周目标检视 5、眼睛20190802已完成、耳朵复查预约20190809在人民医院已复...

  • 0805-0811/2019

    本周完成情况 健康: 1、本周睡眠严重不足,基本都在零点后入睡,晚睡造成睡眠质量严重下降,白天的午休是补不回来的,...

  • Shell | 标准输入输出重定向

    一、Linux 标准输入输出 二、标准输入输出重定向 1. 标准输入输出重定向是什么? 2. 标准输入输出重定向的...

  • numpy -- 数组文件的输入输出

    数组文件的输入输出 数组的输入输出 压缩存取

  • IO流之 数据输入输出流【待补充※】

    数据输入输出流 1.什么是数据输入输出流 DataOutputStream(FuileOutputStream()...

  • 【2019周检视】0805-0811

    没有记录就没有发生,没有反思的人生不值得过。 一、健康 1.本周身体原因,暂停运动,静养为主。 2.每天做营养早餐...

  • Java IO

    面向字符的输入输出流 面向字节的输入输出流 小测试 压缩

  • Java_IO_基础

    字节输入输出流InputStream/OutputStream、与字符输入输出流Reader/Write Inpu...

网友评论

      本文标题:【输入输出】32周[0805-0811]

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