沈超琦的博客

STAY HUNGRY,STAY FOOLISH

文章

分布式锁之Redis实现

在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以 synchronized 、Lock来使用它。 但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢? 一、分布式锁 分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的: 加锁 在沙滩上踩一脚,留下自己的脚印,就对应了加锁操作。其他进程或者线程,看到沙滩上已经有脚印,证明锁已被别人持有,则等待。 解锁 把脚印从沙滩上抹去,就是解锁的过程。 锁超时 为了避免死锁,我们可以设置一阵风,在单位时间后刮起,将脚印自动抹去。 分布式锁的实现有很多,比如基于数据库、memcached、Redis、系统文件、zookeeper等。它们的核心的理念跟上面的过程大致相同。 二、redis 我们先来看如何通过单节点Redis实现一个简单的分布式锁。 1、加锁 加锁实际上就是在redis中,给Key键设置一个值,为避免死锁,并给定一个过期时间。 SET lock_key random_value NX ....

我在 GitHub 上的开源项目

LinkCloudDisk Java 🤩1  ⭐️12  🖖3 基于springcloud开发的分布式美剧订阅系统(含爬虫) 2. linkjb Vue 🤩2  ⭐️5  🖖1  🏠http://www.linkjb.com 基于spring,vue开发的在线实时交友网站 3. LinkDisk Java 🤩1  ⭐️1  🖖0 基于分布式的在线云盘 balabala 4. linkblog CSS 🤩1  ⭐️0  🖖0 linkblog init commit 5. python3-study Python 🤩0  ⭐️0  🖖1 request,selenium,scrapy等库和框架的学习

记录第一次交通事故(真的看不惯加塞🐶)

前因后果 今天和往常一样开开心心开车上班敲代码,昨天有个SQL问题一直困扰着我,准备今天到了公司一口气写完然后能划划水轻松轻松, 但是没想到在高架上的时候,一共三个车道,我一直在中间车道开着(我是红色小车),然后我的右方出现了一辆白色的小车,转向灯也不打,直挺挺向我的车道变向过来,我减速不及,直挺挺撞了上去,砰!~~~!😳 我车倒没什么事,只是后视镜被剐蹭了一下,本来也没怎么气,这场事故的责任很明显,我正常行驶,他变到剐蹭到我.想着这是我妈的老车(杭州限行我自己的车和我妈的车轮换来开的),也开了有12年了,本想着下车去看看如果不严重我也就走掉了.结果我一下车,他劈头盖脸一句 "你怎么开的车?!!",瞬间我火一下子就上来了. 这可还行,我惯着你? 直接打交警电话,交警来了一看就说他全责,他还不认,说他没有变道,是我加塞到他前面去的(我真是服了一些中年人颠倒黑白的能力了).最后叫来了一个交通民警,民警一看事故现场照片也说了他全责, 他这才灰溜溜得认了全责. 总结 开车还是要稳一点,虽然真的很看不惯加塞🐶,但是能让还是让吧,像我这种老车倒没什么事,要是自己的新车,那真是既心疼又碍事,....

[报错本]File createNewFile 空指针问题

现在公司是混合开发平台的,开发环境中代码需要上传到运维平台(docker+jenkins)进行服务的部署,今天遇到了个问题,在本地开发环境没有问题,一到云平台部署就报错,后来定位到了 File的createNewFile方法,才发现路径没有定位好,父路径没有创建 例子: if(!file.exists()){ try { file.getParentFile().mkdirs(); file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } }

RabbitMQ消息队列监控API

最近有一个项目,需要编写一个监听rabbitMQ集群状态的项目,需要通过rabbit提供的API来获取相应数据并组装,所以需要学习一下rabbit的API HTTP API URLHTTP请求类型接口含义 /api/connectionsGET获取当前RabbitMQ集群下所有打开的连接 /api/nodesGET获取当前RabbitMQ集群下所有节点实例的状态信息 /api/vhosts/{vhost}/connectionsGET获取某一个虚拟机主机下的所有打开的connection连接 /api/connections/{name}/channelsGET获取某一个连接下所有的管道信息 /api/consumers/{vhost}GET获取某一个虚拟机主机下的所有消费者信息 /api/exchanges/{vhost}GET获取某一个虚拟机主机下面的所有交换器信息 /api/queues/{vhost}GET获取某一个虚拟机主机下的所有队列信息 /api/usersGET获取集群中所有的用户信息 /api/users/{name}get/put/delete获取/更新/....

STAY HUNGRY,STAY FOOLISH

© 2021 沈超琦的博客

Powered by Bolo
Theme self-bolo-sakura by Mashiro
浏览 31165 文章 31 评论 5
浙ICP备18010929号

主题 | Theme