分布式锁

Jedis客户端以及redis中的pipeline批量操作

眉间皱痕 提交于 2020-02-24 21:37:18
关注公众号:CoderBuff,回复“redis”获取《Redis5.x入门教程》完整版PDF。 《Redis5.x入门教程》目录 第一章 · 准备工作 第二章 · 数据类型 第三章 · ​命令 第四章 ​· 配置 第五章 · Java客户端(上) 第六章 · 事务 第七章 · 分布式锁 第八章 · Java客户端(下) 第五章 · Java客户端(上) 有关本章的源码: https://github.com/yu-linfeng/redis5.x_tutorial/tree/master/code/jedis 前面的章节介绍了redis的安装、还有命令配置等内容,我们在实际使用时大部分情况都是利用现成的Java客户端对redis进行操作。当然命令并不是没用,它极有可能在你排查问题时排上用场,因为你有可能会直接连入redis服务端通过命令行来排查是否是redis缓存的问题。 redis的Java客户端最常用的是 jedis 开源库,本章我们也将围绕jedis的对redis进行一些简单的操作,jedis的GitHub地址: https://github.com/xetorthio/jedis 。 package com.coderbuff.jedis.simple; import redis.clients.jedis.Jedis; /** * @author okevin *

Redis 集群以及应用

那年仲夏 提交于 2020-02-24 04:25:54
相关阅读: 史上最全Redis高可用技术解决方案大全 Raft协议实战之Redis Sentinel的选举Leader源码解析 目录: Redis 集群以及应用 集群 主从复制 主从链(拓扑结构) 复制模式 问题点 哨兵机制 拓扑图 节点下线 Leader选举 故障转移 读写分离 定时任务 分布式集群(Cluster) 拓扑图 通讯 集中式 Gossip 寻址分片 hash取模 一致性hash hash槽 使用场景 热点数据 会话维持 Session 分布式锁 SETNX 表缓存 消息队列 list 计数器 string 缓存设计 更新策略 更新一致性 缓存粒度 缓存穿透 解决方案 缓存雪崩 出现后应对 请求过程 Redis 集群以及应用 集群 主从复制 主从链(拓扑结构) 复制模式 全量复制:Master 全部同步到 Slave 部分复制:Slave 数据丢失进行备份 问题点 同步故障 复制数据延迟(不一致) 读取过期数据(Slave 不能删除数据) 从节点故障 主节点故障 配置不一致 maxmemory 不一致:丢失数据 优化参数不一致:内存不一致. 避免全量复制 选择小主节点(分片)、低峰期间操作. 如果节点运行 id 不匹配(如主节点重启、运行 id 发送变化),此时要执行全量复制,应该配合哨兵和集群解决. 主从复制挤压缓冲区不足产生的问题(网络中断,部分复制无法满足)

分布式锁原理

微笑、不失礼 提交于 2020-02-23 10:54:29
分布式锁原理 单体服务中,使用jvm内的Synchronized和Lock即可,分布式环境下,多台机器,对应多个jvm,多个进程,因此需要使用统一的分布式锁进行同步操作 ZK实现分布式锁的核心是:临时有序节点 临时可以防止死锁,有序可以保证同步(InterProcessMutex) 来源: CSDN 作者: 414丶小哥 链接: https://blog.csdn.net/u010838785/article/details/104455352

ZK实现分布式锁步骤

北城余情 提交于 2020-02-23 10:52:17
ZK实现分布式锁步骤 a:所有需要竞争资源的进程,都在ZK一个持久化节点创建一个临时的有序的子节点 b:每个子节点阻塞并监听自己上一个子节点,如果上一个删除的时候,说明自己可以获取锁进行操作(上一个删除后还要判断下自己是不是最小的节点,如果不是,再去监听自己前一个节点) c:如果当前获取锁的节点由于网络原因或者系统故障不可用了,因为是临时节点,连接不可用的时候会自动删除节点,可以有效防止死锁的情况 来源: CSDN 作者: 414丶小哥 链接: https://blog.csdn.net/u010838785/article/details/104455358

Redis面试的17个高水平问题

╄→гoц情女王★ 提交于 2020-02-23 04:57:06
一、为什么使用Redis 笔者认为,在项目中使用Redis,主要是从两个角度去考虑:性能和并发。当然,Redis还具备可做分布式锁等功能的其它功能,但如果只是为了分布式锁这些其它功能,完全还有其它中间件(如Zookpeer等)可以代替,并不是非要使用Redis。 因此,这个问题主要从性能和并发两个角度去答: 1、性能 如下图所示,我们在碰到需要执行耗时特别久、且结果不频繁变动的SQL时,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。 题外话:忽然想聊一下这个迅速响应的标准——其实根据交互效果的不同,这个响应时间没有固定标准。不过曾经有人这么告诉我:“在理想状态下,我们的页面跳转需要在瞬间解决,对于页内操作则需要在刹那间解决。另外,超过一弹指的耗时操作要有进度提示,并且可以随时中止或取消,这样才能给用户最好的体验。” 那么瞬间、刹那、一弹指具体是多少时间呢? 根据《摩诃僧祗律》记载:一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾。 那么,经过周密的计算,一瞬间为0.36秒,一刹那有0.018秒,一弹指长达7.2秒。 2、并发 如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用Redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问数据库

redis面试题

我的梦境 提交于 2020-02-20 17:53:56
文章正文 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性能问题和解决方案: 10、redis 过期键的删除策略? 11、Redis 的回收策略(淘汰策略)? 12、为什么 edis 需要把所有数据放到内存中? 13、Redis 的同步机制了解么? 14、Pipeline 有什么好处,为什么要用 pipeline? 15、是否使用过 Redis 集群,集群的原理是什么? 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis 哈希槽的概念? 21、Redis 集群的主从复制模型是怎样的? 22、Redis 集群会有写操作丢失吗?为什么? 23、Redis 集群之间是如何复制的? 24、Redis 集群最大节点个数是多少? 25、Redis 集群如何选择数据库? 26、怎么测试

07: redis分布式锁解决超卖问题

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-18 22:21:15
1.1 redis事物   1、redis事物介绍       1. redis事物是可以一次执行多个命令,本质是一组命令的集合。       2. 一个事务中的所有命令都会序列化,按顺序串行化的执行而不会被其他命令插入        作用: 一个队列中,一次性、顺序性、排他性的执行一系列命令   2、使用Multi指令演示 redis 事物       1. 下面指令演示了一个完整的事物过程,所有指令在exec前不执行,而是缓存在服务器的一个事物队列中       2. 服务器一旦收到exec指令才开始执行事物队列,执行完毕后一次性返回所有结果       3. 因为redis是单线程的,所以不必担心自己在执行队列是被打断,可以保证这样的“原子性”       注:redis事物在遇到指令失败后,后面的指令会继续执行 # Multi 命令用于标记一个事务块的开始事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性( atomic )地执行 > multi(开始一个redis事物) incr books incr books > exec (执行事物) > discard (丢弃事物) [root@redis ~]# redis-cli 127.0.0.1:6379> multi OK 127.0.0.1:6379> set test 123

分布式锁机制原理以及三种实现方式介绍

我们两清 提交于 2020-02-18 05:32:40
很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的东西也是一样的和Java多线程相关的!做好准备,马上开车! 学过Java多线程的应该都知道什么是锁,没学过的也不用担心,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制。 在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等。 一、为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间! 后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象,例如:UserController控制器中的一个整形类型的成员变量),如果不加任何控制的话

基于zookeeper集群实现分布式锁的工程实践

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-18 04:35:35
上一篇实现了基于zookeeper集群实现的分布式配置中心的工程样例,并进行了总结,本篇进行基于zookeeper集群实现的分布式锁工程案例,当然也借鉴和参考了其他博客,这里先给出引用:https://blog.csdn.net/hongtaolong/article/details/88898875 一、定义上下文锁的抽象对象 package com . coderman . zookeeper . clusterdemo . distributelockdemo ; /** * @description: * @author: Fanchunshuai * @time: 2020/2/15 16:04 * 定义一个bean对象表示需要用锁的场景的上下文数据模型 * 分布式锁可能需要定义持久化节点和临时节点,以及临时顺序节点 * 这里假定持久化节点为:/group/appName * 临时节点为:/group/appName/lockPath * 临时顺序节点:/group/appName/lockPath0000000000001 */ public class LockConfigBean { /** * 集群节点目录一级分组 */ private String group ; /** * 集群中的应用名称 */ private String appName ; /** *

接口幂等性的解决方案

余生长醉 提交于 2020-02-17 09:00:55
接口幂等性的解决方案 在编程中,幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数指的是那些使用相同参数重复执行也能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。比如说getIdCard()函数和setTrue()函数就是幂等函数。 幂等在我的理解里就是,一个操作不论被执行多少次,产生的效果和返回的结果都是一样的。 一个幂等的操作典型如:把编号为5的记录的A字段设置为0这种操作不管执行多少次都是幂等的。 一个非幂等的操作典型如:把编号为5的记录的A字段增加1这种操作显然就不是幂等的。 幂等的方案 1.查询操作:Select是天然的幂等操作。 查询一次和查询多次,在数据不变的情况下,查询的结果都是一样的。 2.删除操作:删除操作也是幂等的,删除一次和删除多次都是把数据删除。 因为删除操作通常是定向的,比如通过id去删除数据,如果该id在数据库中存在对应记录,则删除该记录;如果该id在数据库中不存在对应记录,也是执行的删除记录操作,只是没有实质性地删除到记录而已,却也不会有其他的副作用。 但是如果删除操作具有返回值的话,可能返回的结果会不一样,比如删除一条记录之后返回这条记录中的某个值,如果删除的数据不存在(已经在第一次的删除请求中被删除了),返回的就是空值了。 3.唯一索引