本文是一个demo,利用多进程,来模拟使用redis分布式锁的使用场景。本机需要安装redis,python3.7下运行代码。分布式锁用redlock这个包实现,实现步骤分三步:

实例化锁:rlock = RedLock('test',[{'host': 'localhost','port': 6379,'db': 0,}])

获取锁:rlock.acquire(),获取锁之后才能执行程序。

释放锁:rlock.release(),程序执行完之后,要释放锁,否者其他程序就阻塞,一直执行不了。

完整代码如下:

# -*- coding: utf-8 -*-

import os

import arrow

import redis

from multiprocessing import Pool

from redlock.lock import RedLock

HOT_KEY = 'count'

r = redis.Redis(host='localhost', port=6379)

def seckilling():

name = os.getpid()

v = r.get(HOT_KEY)

if int(v) > 0:

print (name, ' decr redis.')

r.decr(HOT_KEY)

else:

print (name, ' can not set redis.', v)

#

def run_without_lock(name):

while True:

if arrow.now().second % 5 == 0:

seckilling()

return

rlock = RedLock('test',[{'host': 'localhost','port': 6379,'db': 0,}])

def run_with_redis_lock(name):

while True:

if arrow.now().second % 5 == 0:

# 二,获取锁

if rlock.acquire():

seckilling()

# 释放锁

rlock.release()

return

if __name__ == '__main__':

p = Pool(80)

r.set(HOT_KEY, 1)

for i in range(80):

# p.apply_async(run_without_lock, args=(i,))

p.apply_async(run_with_redis_lock, args=(i,))

print ('now 16 processes are going to get lock!')

p.close()

p.join()

print('All subprocesses done.')

使用锁的代码,主要是:

rlock = RedLock('test',[{'host': 'localhost','port': 6379,'db': 0,}])defrun_with_redis_lock(name):whileTrue:if arrow.now().second % 5 ==0:#二,获取锁

ifrlock.acquire():

seckilling()#释放锁

rlock.release()return

使用redlock得步骤很简单,总结出来,一共四步:

#一,实例化一把锁 rlock

from redlock.lock import RedLock

rlock = RedLock('test',[{'host': 'localhost','port': 6379,'db': 0,}])

#二,获取锁

ifrlock.acquire():#三,需要锁住形成阻塞得程序

seckilling()#四,释放锁

rlock.release()

总结,我们使用锁的原因,就是让并发的程序形成阻塞,并发可以引起的问题是数据不一致的情况,使用锁,形成阻塞,排队使用数据,就不会造成数据不一致的问题了,当然了,阻塞肯定会降低效率了,速度要慢很多。

redlock java_用redlock实现redis的分布式锁相关推荐

  1. 基于Redis的分布式锁和Redlock算法

    来自:后端技术指南针 1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手 ...

  2. Redis构建分布式锁——Redlock

    本文来自:http://ifeve.com/redis-lock/ 简介 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁 ...

  3. Redlock 算法:Redis 实现分布式锁(译)

    先介绍两个概念 Safety Properties, 在程序运行中不会进入非预期的状态(如非法调用参数, 数组下标越界等运行错误) Liveness Properties, 在程序运行中预期状态一定会 ...

  4. redis setnx java_一步步实现单机redis的分布式锁(setnx)

    # 一步步实现单机redis的分布式锁(setnx) # 1. 准备工作 # 1.1 定义常量 public class LockConstants { public static final Str ...

  5. Redis实现分布式锁的深入探究

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.分布式锁简介 锁 是一种用来解决多个执行线程 访问共享资源 错 ...

  6. nx set 怎么实现的原子性_基于Redis的分布式锁实现

    前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...

  7. Zookeeper和Redis实现分布式锁,附我的可靠性分析

    作者:今天你敲代码了吗 链接:https://www.jianshu.com/p/b6953745e341 在分布式系统中,为保证同一时间只有一个客户端可以对共享资源进行操作,需要对共享资源加锁来实现 ...

  8. Redis——由分布式锁造成的重大事故

    作者:浪漫先生 原文:juejin.im/post/6854573212831842311 前言 基于Redis使用分布式锁在当今已经不是什么新鲜事了.本篇文章主要是基于我们实际项目中因为redis分 ...

  9. 《Redis官方文档》用Redis构建分布式锁

    <Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...

  10. 《Redis官方文档》用Redis构建分布式锁(悲观锁)

    2019独角兽企业重金招聘Python工程师标准>>> **用Redis构建分布式锁 ** 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章 ...

最新文章

  1. Nature-2012-拟南芥根系微生物组的结构
  2. vi/vim使用入门: vimrc在哪儿?
  3. C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)...
  4. Spark K-Means
  5. c#进阶(7)—— 异步编程基础(async 和 await 关键字)
  6. NumPy Beginner's Guide 2e 带注释源码 四、NumPy 便利的函数
  7. 一道PHP面试题,求两个文件的相对路径
  8. Postgresql 9.3外部数据封装的新功能
  9. 【个人笔记】OpenCV4 C++ 图像处理与视频分析 04课
  10. 程序员必备75道逻辑思维题(附答案)之二
  11. 机器人理论简介—— 台湾交通大学机器人学公开课(一)
  12. day11_rabbitmq和redis
  13. D 语言编写CGI程序
  14. 30个很棒的jQuery幻灯片放映插件
  15. 技术探秘:华为云瑶光何以定方向
  16. P2-前端基础-网页中的实体(转义字符)
  17. 2019最值得收藏的24个日语学习网站
  18. python并发编程_《Python》并发编程
  19. 携程、艺龙、酷讯演绎在线旅游三国志
  20. HackTheBox-baby CachedView

热门文章

  1. USES_CONVERSION W2A
  2. 使用 artTemplate 渲染数组
  3. 第三章 Docker 入门
  4. asp.net 获取当月的第一天和最后一天示例
  5. ProE/Creo免费插件 MCADEx Tools 4.2
  6. 39页第6题 求贷款的金额
  7. IOS开发之把 Array 和 Dictionaries 序列化成 JSON 对象
  8. Linq to sql(六):探究特性(四)
  9. 小品: 关于C++引用
  10. java流意外结束_java – POI – null之后的文件意外结束