输入
其实这周没什么计划,一方面忙着写需求。空闲了。看几篇容易看的文章。
《黄勇的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;
}
开始....
槽点
- empty($deviceId) 之后,直接return false。
2.is_string($ret) && in_array($ret, ['1', '0'])
,既然返回值只有'1'跟'0'。直接两个"==="判断即可。避免两次函数调用。减少开销。
- 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'];
}
一个隐藏的点
-
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
参考资料:
- 《php+redis+lua实现分布式锁》https://blog.csdn.net/love_yu_er/article/details/77153936
- 《Redis的Lua脚本编程的实现和应用》https://www.jianshu.com/p/9e7b5c5c9b7b
网友评论