博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日推笔记
阅读量:6458 次
发布时间:2019-06-23

本文共 830 字,大约阅读时间需要 2 分钟。

==记录每天看的推文,记录笔记,防止遗忘,持续更新,只写出要点,不贴外链,详细百度==

# 3、redis-分布式锁

环境

单机或者集群环境redis集群、多个服务实现同步锁

思考

  • 1、setnx 如果key不存在,保存value并返回1。如果key存在,不保存value,返回0

加锁: set test1 123 nx 解锁: del

问题:如果获取到锁后死机,锁将无法释放复制代码
  • 2、加上过期时间

SET lockKey value NX EX 30

问题:A获取到锁后,处理时间过长超过过期时间,B获取到锁,A处理结束,释放了B的锁复制代码
  • 3、value 标识属于当前线程的UUID,若非当前线程的value不删除
问题:1、操作,判断是否属于当前线程,之后删除并不是原子操作,写lua脚本,jedis.eval() 执行脚本。    2、过期时间大于业务处理时间复制代码

总结

1、setnx判断,设置过期时间,判断当前线程

集群redis的分布式锁

RedLock算法

其他

Zookeeper 分布式锁


# 2、一致性Hash

怎么使用hash

  • 集群分布式存储,直接读取对应数据的服务器
  • 例如redis集群,计算hash值保存对应的服务器,之后根据hash计算读取,算法:hash%(服务器个数)

什么是一致性执行性hash

  • 服务器移除或新增,普通hsah算法不准确,内存雪崩
  • 将服务器计算hash值映射2^32环形hash值上,hash(str)%(2^32-1) 得到距离计算值最近的服务器hash编号
  • 可能会出现HASH环数据倾斜,可以计算服务器多个hash值

# 1、高性能队列Disruptor

高性能的原因

  • 环形数组数据结构
  • 消除计算机层面上的伪共享
  • 使用CAS无锁同步

实例使用

  • 创建生产者
  • 创建消费者
  • 注意点:防止消息堆积,内存消耗

应用场景

  • netty和Disruptor配合做定位
  • 单线程最大600W订单处理
  • 延时队列任务

转载地址:http://qnizo.baihongyu.com/

你可能感兴趣的文章
IIS 7.5版本中一些诡异问题的解决方案
查看>>
java - JDBC
查看>>
Python学习-01-初始Python
查看>>
3Sum Closest
查看>>
Idea使用Mybatis Generator 自动生成代码
查看>>
ping通网关 ping不能外网 DNS无法解析
查看>>
HDU - 1233 还是畅通工程(Kruskal - MST)
查看>>
ASP.NET Core MVC 配置全局路由前缀
查看>>
Hash Table构建
查看>>
DNS添加/修改/查询/删除A记录
查看>>
HTML5 <input>添加多张图片,可点击弹窗放大。限定4张,可删除。
查看>>
Python isinstance() 函数
查看>>
用Telnet测试服务器的端口是否开通
查看>>
hashmap和hashtable
查看>>
全球第一开源ERP Odoo操作手册 启用多核来提升Odoo性能
查看>>
不同版本(2.3,2.4,2.5)的Servlet web.xml 头信息
查看>>
HTTP/TCP
查看>>
餐巾计划问题 费用流
查看>>
2016-11-18笔记
查看>>
JVM 默认Xss
查看>>