北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

一口气说出 9种 分布式ID生成方式,面试官有点懵了

以下文章来源于程序员内点事 ,作者程序员内点事

一、为什么要用分布式ID?

在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?

1、什么是分布式ID?

拿MySQL数据库举个栗子:

在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。

对不起,你在网上找的Redis分布式锁都有漏洞

基于 Redis 的分布式锁对大家来说并不陌生,可是你的分布式锁有失败的时候吗?在失败的时候可曾怀疑过你在用的分布式锁真的靠谱吗?以下是结合自己的踩坑经验总结的一些经验之谈。

你真的需要分布式锁吗?

用到分布式锁说明遇到了多个进程共同访问同一个资源的问题。一般是在两个场景下会防止对同一个资源的重复访问:

  • 提高效率。

sqlserver删除重复数据只保留一条,使用ROW_NUMER()与Partition By

1.使用场景: 公司的小程序需要实现一个功能:在原有小程序上,有一个优惠券活动表。 存储着活动产品数据,但因为之前没有做约束,导致数据的不唯一,这会使打开产品详情页时,可能会出现随机显示任意活动问题。 因此需要把它删除掉。

2.那么如何删除呢? 通过翻阅资料发现我们可以通过使用Row_Number()与Partition By 来实现这个功能,我们先看看Row_Number()如何使用,它的语法是:

你必须懂的Redis十大应用场景

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。


都说PHP性能差,但PHP性能真的差吗?

今天本能是想测试一个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());
}

每次有人找我合影,都会想起一段青葱岁月

这2天,连续在上海影城做了2场分享。实在太多话想说,以至于原定6个小时,每次都拖到将近8小时。拖到下午6点多才结束。

不过分享结束后,我还有一件重要的事:和在场每一位观众合影,哪怕要额外再花半小时,甚至一小时。

我的同事们很心疼我,他们担心我的身体,经常想能否省掉这个环节。我很感谢他们。但只要场合允许,我还是固执的想当一个合影机器。

因为,每次有人问我“能和你合个影吗?”,我都会想起我的年少时光,想起一个至今没能满足的遗憾。

我在微软14年,有无数欢乐、无数收获。但如果要说遗憾,还真有一个:我至今都没有一张和比尔·盖茨的合影。

为什么微信消息只能在2分钟之内撤回?网友:不能更多或更少吗?

古人有云,“一言既出,驷马难追。”可见,对说出口的话是多么重视。可是,人总有说错话的时候啊~为了解决这个问题,微信就有了“撤回”的功能,对于发出2分钟以内的信息提供撤回选项:

用户长按发出的消息(包括图片),在菜单中选择撤回。

那么问题来了……为什么发出去的消息可以轻松撤回?微信是如何同时从双方手机上实现信息撤回的呢?


以MobleA给MobileB发送消息与消息撤回为例:

别再用雪花算法生成ID了!试试这个吧

今天聊聊服务器中唯一ID生成。唯一ID生成中雪花算法大家都比较熟,那如果加一个要求呢:

不连续的自增id

约定

  • 操作系统:CentOS release 6.8(64位)
  • 数据库版本:5.7.44

Python标准库中的七个“小众但神奇”的实用函数

如果你一直在使用Python,想必已经非常熟悉它极其丰富的标准库,这让开发变得高效且直接。虽然像json、datetime、re这样的热门模块经常被关注,但其实还有一批鲜为人知的函数常常被忽视。

<< < 53 54 55 56 57 58 59 60 61 62 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言