基于 Redis 的分布式锁对大家来说并不陌生,可是你的分布式锁有失败的时候吗?在失败的时候可曾怀疑过你在用的分布式锁真的靠谱吗?以下是结合自己的踩坑经验总结的一些经验之谈。
你真的需要分布式锁吗?
用到分布式锁说明遇到了多个进程共同访问同一个资源的问题。一般是在两个场景下会防止对同一个资源的重复访问:
- 提高效率。
2025年06月24日
基于 Redis 的分布式锁对大家来说并不陌生,可是你的分布式锁有失败的时候吗?在失败的时候可曾怀疑过你在用的分布式锁真的靠谱吗?以下是结合自己的踩坑经验总结的一些经验之谈。
用到分布式锁说明遇到了多个进程共同访问同一个资源的问题。一般是在两个场景下会防止对同一个资源的重复访问:
2025年06月24日
1.使用场景: 公司的小程序需要实现一个功能:在原有小程序上,有一个优惠券活动表。 存储着活动产品数据,但因为之前没有做约束,导致数据的不唯一,这会使打开产品详情页时,可能会出现随机显示任意活动问题。 因此需要把它删除掉。
2.那么如何删除呢? 通过翻阅资料发现我们可以通过使用Row_Number()与Partition By 来实现这个功能,我们先看看Row_Number()如何使用,它的语法是:
2025年06月24日
Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。
2025年06月24日
古人有云,“一言既出,驷马难追。”可见,对说出口的话是多么重视。可是,人总有说错话的时候啊。
为了解决这个问题,微信就有了“撤回”的功能,对于发出2分钟以内的信息提供撤回选项:
用户长按发出的消息(包括图片),在菜单中选择撤回。
那么问题来了……
为什么发出去的消息可以轻松撤回?
微信是如何同时从双方手机上实现信息撤回的呢?
以MobleA给MobileB发送消息与消息撤回为例:
A.MobileA发送消息时,会在自己的微信客户端上生成全球唯一的UniqueMsgID,并将该UniqueMsgID附带在即将发送的消息体中。
2025年06月24日
今天本能是想测试一个PDO持久化,会不会带来会话混乱的问题 先贴一下PHP代码, 代码丑了点,但是坚持能run就行,反正就是做个测试。
<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root';
$password = 'root';
// 设置 PDO 选项,启用持久化连接
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
// 创建持久化连接
$pdo = new PDO($dsn, $user, $password, $options);
$stmt = $pdo->prepare("INSERT INTO test_last_insert_id (uni) VALUES (:uni);");
$uni = uniqid('', true);
$stmt->bindValue(':uni', $uni);
$aff = $stmt->execute(); //
if ($aff === false) {
throw new Exception("insert fail:");
}
$id = $pdo->lastInsertId();
function getExecutedSql($stmt, $params)
{
$sql = $stmt->queryString;
$keys = array();
$values = array();
// 替换命名占位符 :key with ?
$sql = preg_replace('/\:(\w+)/', '?', $sql);
// 绑定的参数可能包括命名占位符,我们需要将它们转换为匿名占位符
foreach ($params as $key => $value) {
$keys[] = '/\?/';
$values[] = is_string($value) ? "'$value'" : $value;
}
// 替换占位符为实际参数
$sql = preg_replace($keys, $values, $sql, 1, $count);
return $sql;
}
$stmt = $pdo->query("SELECT id FROM test_last_insert_id WHERE uni = '{$uni}'", PDO::FETCH_NUM);
$row = $stmt->fetch();
$value = $row[0];
if ($value != $id) {
throw new Exception("id is diff");
}
echo "success" . PHP_EOL;
} catch (PDOException $e) {
header('HTTP/1.1 500 Internal Server Error');
file_put_contents('pdo_perisistent.log', $e->getMessage() . PHP_EOL);
die('Database connection failed: ' . $e->getMessage());
} catch (Exception $e) {
header('HTTP/1.1 500 Internal Server Error');
file_put_contents('pdo_perisistent.log', $e->getMessage() . PHP_EOL);
die('Exception: ' . $e->getMessage());
}
2025年06月24日
Xingyu Cheno4分钟前
Audience Network是 Facebook 新发布的一个跨应用移动广告服务,以用户在社交网络上留下的信息作为基础,内容提供方可以在不同软件中识别用户并根据他们的资料有针对性地发放推广内容。
举例来说,你在 Facebook 上赞了某品牌的商品,那么当你在使用有关的第三方应用时就有可能看见该品牌向你投放的广告内容,与 Facebook 的其它移动广告服务一样,这些内容可能以横幅、弹窗或者原生的形式出现。
了解用户 - 识别用户 - 在第三方应用中投放广告,从表面上看,这无疑将移动端广告投放的个人定位精准度提高到了一个新高度。
2025年06月24日
这2天,连续在上海影城做了2场分享。实在太多话想说,以至于原定6个小时,每次都拖到将近8小时。拖到下午6点多才结束。
不过分享结束后,我还有一件重要的事:和在场每一位观众合影,哪怕要额外再花半小时,甚至一小时。
我的同事们很心疼我,他们担心我的身体,经常想能否省掉这个环节。我很感谢他们。但只要场合允许,我还是固执的想当一个合影机器。
因为,每次有人问我“能和你合个影吗?”,我都会想起我的年少时光,想起一个至今没能满足的遗憾。
我在微软14年,有无数欢乐、无数收获。但如果要说遗憾,还真有一个:我至今都没有一张和比尔·盖茨的合影。
2025年06月24日
古人有云,“一言既出,驷马难追。”可见,对说出口的话是多么重视。可是,人总有说错话的时候啊~为了解决这个问题,微信就有了“撤回”的功能,对于发出2分钟以内的信息提供撤回选项:
用户长按发出的消息(包括图片),在菜单中选择撤回。
那么问题来了……为什么发出去的消息可以轻松撤回?微信是如何同时从双方手机上实现信息撤回的呢?
以MobleA给MobileB发送消息与消息撤回为例: