Redis实现分布式锁

在分布式环境中,为了控制对共享数据的并发访问,可以使用分布式锁。本文聚焦于通过Redis实现分布式锁,重点阐述其原子性、防止死锁及互斥性的关键点,并提供了使用Jedis的Java代码示例。
摘要由CSDN通过智能技术生成

分布式锁

 

  • 当在分布式模型下,数据只有一份(或有限制),此时需要利用锁的技术控制某一时刻修改数据的进程数。
  • 与单机模式下的锁不仅需要保证进程可见,还需要考虑进程与锁之间的网络问题。(我觉得分布式情况下之所以问题变得复杂,主要就是需要考虑到网络的延时和不可靠。。。一个大坑)

  • 分布式锁还是可以将标记存在内存,只是该内存不是某个进程分配的内存而是公共内存如Redis、Memcache。至于利用数据库、文件等做锁与单机的实现是一样的,只要保证标记能互斥就行。

实现方式

  • 基于数据库实现
  • 基于缓存实现(redis)
  • zookeeper实现

本篇基于redis实现分布式锁

实现的三个关键点

  • 原子性:加锁和解锁原子操作不可打断
  • 避免死锁:锁不会被某个进程一直占有或者在占有锁进程无法解锁(宕机)情况下能够解锁
  • 互斥性:同一时刻只能有一个进程获得锁
  • 正确解锁:锁的占有者只能解除自己的锁

代码实现(jedis)

redis配置

host=127.0.0.1
port=6379
password=123456

redis配置类

package com.zyl.redis.config;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Configuration
@PropertySource(value = {"classpath:redis-conf.properties"})
public class RedisConfig
{
    @Value("${host}")
    private Stri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值