面试题:分布式锁用了 Redis 的什么数据结构

在使用 Redis 实现分布式锁时,通常使用 Redis 的字符串(String)。Redis 的字符串是最基本的数据类型,一个键对应一个值,它能够存储任何形式的字符串,包括二进制数据。字符串类型的值最多可以是 512MB。

Redis 实现分布式锁的本质,就是在 Redis 里面占一个"茅坑",当别的进程也来占坑时,发现已经有进程蹲在那里了,就只好放弃或者稍后再试。

  • set 命令加锁
    • lockname:锁的名字 (键)
    • true:是锁的状态(值)
    • EX 5:设置这个键的过期时间为5秒。这意味着如果锁的持有者没有在5秒内释放锁(比如因为崩溃或其他原因),锁会自动被释放,以防止死锁
    • NX(Not Exist):保证只有当 lockname 不存在时,即锁未被其他客户端持有时,当前操作才会成功设置键,从而实现加锁。如果锁已经存在,则命令不会执行任何操作。
java 复制代码
SET lockname true EX 5 NX 
  • 释放锁
java 复制代码
DEL lockname


图片来源于悟空聊架构

相关推荐
qq_189807031 分钟前
如何让导航栏的下落动画效果更慢?
jvm·数据库·python
梦无矶1 分钟前
快速设置uv默认源为国内镜像
数据库·redis·后端·python·uv
m0_515098423 分钟前
HTML函数在低分辨率屏幕能正常编写吗_显示硬件最低适配说明【方法】
jvm·数据库·python
沪漂阿龙在努力5 分钟前
别再被SQL的连表查询搞疯了!一文带你吃透Neo4j图数据库,从零搭建“关系网”
数据库
m0_748920367 分钟前
如何利用宝塔面板设置网站限流策略_防止恶意高并发请求
jvm·数据库·python
正在走向自律7 分钟前
KingbaseES 基础 SQL 语法与日常运维实操手册
运维·数据库·sql·kingbasees
m0_7349497914 分钟前
C#怎么操作Redis缓存 C#如何用StackExchange.Redis连接和操作Redis数据【数据库】
jvm·数据库·python
2301_8148098615 分钟前
PHP源码开发推荐使用哪种机箱_散热与扩展平衡选择【教程】
jvm·数据库·python
Absurd58715 分钟前
SQL分组统计时如何处理文本类型聚合_GROUP_CONCAT的用法
jvm·数据库·python
解救女汉子16 分钟前
如何通过C#读取Oracle数据库中的图片显示到WinForm_BLOB转Byte[]与流处理
jvm·数据库·python