黑马点评redis分布式锁
时间: 2023-10-28 18:07:17 浏览: 178
黑马点评中使用了Redisson可重入锁来实现分布式锁,这种锁可以在多个Redis节点上同时进行setnx操作,只有所有节点都成功时才能获取锁。该分布式锁实现了ILock接口,其中tryLock方法尝试获取锁并设置锁的超时时间,unlock方法用于释放锁。使用Redis分布式锁可以实现多进程可见并且互斥的锁,保证了在分布式系统或集群模式下的数据一致性和并发控制。
相关问题
redis分布式锁和redisson分布式锁 黑马点评
### Redis 分布式锁与 Redisson 分布式锁的实现及优劣
#### 1. 实现原理
Redis 的分布式锁通常通过 `SETNX` 命令来实现。该命令会在键不存在的情况下设置一个键值对,并返回成功标志。为了防止死锁,还需要配合 `EXPIRE` 设置超时时间[^1]。
而 Redisson 提供了一种更高级别的抽象,它基于 Redis 并封装了许多复杂的功能。Redisson 的分布式锁支持多种特性,比如可重入、公平锁以及联锁等。其核心机制是利用 Lua 脚本原子性地执行加锁和解锁操作,同时维护了一个内部计数器用于处理可重入的需求[^2]。
#### 2. 性能对比
在性能方面,原生 Redis 分布式锁由于直接调用了 Redis 原始命令 (`SETNX`, `GET`, `DEL`) ,因此具有较低的延迟开销。然而这种简单的方式缺乏灵活性,在面对复杂的业务需求时显得力不从心[^3]。
相比之下,Redisson 将更多的功能集成到了库本身之中,虽然增加了少量额外计算成本,但它提供了更为丰富的接口和服务质量保障措施(如自动续期)。对于大多数实际应用场景来说,这些附加价值往往超过了微小的性能损失所带来的影响[^4]。
#### 3. 使用场景
当项目追求极致效率且仅需基本锁定功能时,可以选择自行实现基于 Redis 的分布锁;但如果希望减少开发工作量并享受更多内置优化,则推荐采用 Redisson 库作为解决方案之一。
另外需要注意的是,在某些特殊情况下,例如需要跨数据中心部署或者容忍一定程度的数据不一致时,还可以考虑其他类型的协调工具或算法替代传统意义上的全局互斥锁设计思路。
#### 4. 黑马程序员评价
黑马程序员可能会强调两者各有侧重:Redis 自带的基础指令适合轻量化定制化程度较高的环境;而对于那些期望快速搭建起稳定可靠的并发控制系统的企业级应用而言,Redisson 凭借其全面的功能覆盖范围成为更好的选项。
```python
import redis
from redis.exceptions import WatchError
# Example of using SETNX to implement a simple distributed lock with plain Redis.
def acquire_lock(conn, lockname, identifier, timeout=10):
end = time.time() + timeout
while time.time() < end:
if conn.setnx(lockname, identifier):
conn.expire(lockname, int(timeout))
return True
elif not conn.ttl(lockname):
conn.expire(lockname, int(timeout))
time.sleep(.001)
return False
# Using Redisson's RLock API for more advanced features like reentrant locks.
from redisson import RedissonClient
client = RedissonClient()
lock = client.get_lock('my-lock')
try:
lock.acquire(10, unit='SECONDS') # Timeout after specified duration.
finally:
lock.release()
```
黑马Redis分布式缓存教程
### 黑马程序员 Redis 分布式缓存教程概述
Redis 是一种高性能的键值存储数据库,广泛应用于分布式缓存场景。对于分布式环境下的高并发需求,构建 Redis 主从集群以及分片集群成为常见的解决方案[^2]。
#### 一、Redis 分布式集群模式介绍
Redis 的分布式集群主要分为三种模式:主从复制模式、哨兵模式和 Cluster 模式。这些模式分别适用于不同的业务场景和技术需求[^1]:
- **主从复制模式**
主从复制模式通过设置多个从节点来分担负载压力,从而实现读写分离。这种架构能够显著提升系统的读取性能,因为大多数情况下对 Redis 的访问是以读为主[^3]。
- **哨兵模式**
哨兵模式是在主从复制的基础上增加了 Sentinel 组件,用于监控主节点的状态并自动完成故障转移。当主节点发生宕机时,Sentinel 可以选举一个新的主节点继续服务。
- **Cluster 模式**
Redis Cluster 提供了一种原生的支持多主节点的方式,可以将数据分布在多个节点上,并具备内置的数据分片功能。这种方式适合大规模分布式应用的需求[^5]。
以下是创建 Redis Cluster 的基本命令示例:
```bash
cd /tmp/redis-6.2.4/src
./redis-trib.rb create --replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003
```
#### 二、学习资源推荐
如果想深入学习 Redis 分布式缓存技术,特别是由黑马程序员提供的相关视频和资料,可以从以下几个方面入手:
1. **官方文档与书籍**
- 官方文档是最权威的学习材料之一,涵盖了 Redis 各项特性的详细说明。
- 推荐阅读《Redis 设计与实现》这本书籍,它全面解析了 Redis 的底层原理及其应用场景。
2. **在线课程平台**
- 马程序员官网提供了完整的 Redis 入门到实战系列课程,覆盖基础概念、高级特性及实际项目案例分析。
- Bilibili 和 YouTube 上也有许多免费的教学视频可供参考。
3. **实践演练**
- 结合理论知识,在本地环境中搭建 Redis 单机版和集群版本进行实验操作。
- 使用工具如 Jedis 或 Lettuce 来编写 Java 应用程序连接 Redis 并执行增删改查等指令。
#### 三、注意事项
为了优化 Redis 的使用效果,请注意以下几点事项:
- 如果某些特定类型的 Key 数据需要固定存储在同一台实例中,则可以通过哈希槽机制或者指定相同的命名空间前缀(例如 `{typeId}`)来达成目标[^4]。
- 在设计主从结构时要充分考虑网络延迟因素的影响;同时也要定期检查日志文件以便及时发现潜在问题所在之处。
---
阅读全文
相关推荐












