Low Gravity

在这里,我们用算法解决问题,用代码表达思想

这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。

Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢?

因为我发现网上 99% 的文章,并没有把这个问题真正讲清楚。导致很多读者看了很多文章,依旧云里雾里。例如下面这些问题,你能清晰地回答上来吗?

  • 基于 Redis 如何实现一个分布式锁?
  • Redis 分布式锁真的安全吗?
  • Redis 的 Redlock 有什么问题?一定安全吗?
  • 业界争论 Redlock,到底在争论什么?哪种观点是对的?
  • 分布式锁到底用 Redis 还是 Zookeeper?
  • 实现一个有「容错性」的分布式锁,都需要考虑哪些问题?

这篇文章,我就来把这些问题彻底讲清楚。

读完这篇文章,你不仅可以彻底了解分布式锁,还会对「分布式系统」有更加深刻的理解。

阅读全文 »

在早期的 Web 应用中,主要以静态文档浏览为主,这种无状态性并未带来明显问题。但随着互联网的演进,交互式 Web 应用逐渐成为主流。用户不再仅仅满足于浏览网页,而是期望能够进行登录、发表评论、购物、在线协作等丰富多样的操作。这些交互式功能的实现依赖于服务器能够识别用户身份,并跟踪用户在不同页面和操作之间的状态信息,以提供个性化的服务和准确的交互响应。例如,在购物网站中,用户需要将商品加入购物车,服务器必须清楚知道这些商品属于哪个用户,以便在结算时准确计算总价并处理订单;在社交平台上,用户的登录状态决定了其能够查看和操作的内容,以及与其他用户的交互权限。

为了克服 HTTP 协议无状态性带来的挑战,满足 Web 应用对用户身份识别和状态跟踪的需求,Cookie、Session 和 Token 等技术应运而生。它们在 Web 开发领域中扮演着至关重要的角色,共同构建了现代 Web 应用中用户认证和状态管理的基础架构,为实现安全、高效、个性化的 Web 服务提供了不可或缺的支持,推动了 Web 应用向更加复杂和功能强大的方向发展。

阅读全文 »

“>>>” 表示无符号右移,正数情况下, a >>> b 等价于 a / Math.pow(2,b)

以 -16 >>> 2 为例子 负16右移2位

  1. 将-16转为2进制 (用补码表示负数)
    • 16 = 00000000 00000000 00000000 00010000
    • 取反并补码 = 11111111 11111111 11111111 11101111 + 1 = 11111111 11111111 11111111 11110000
    • 右移2位 = 00111111 11111111 11111111 11111100 = 10进制 1073741820
0%