redis分布式锁

Redis

筅森魡賤 提交于 2019-12-04 20:39:07
1. 为啥在项目里要用缓存呢 用缓存,主要是俩用途,高性能和高并发 高性能 image.png 高并发 image.png 2.介绍 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库(关系型数据库)遵循 ACID 规则。而 Nosql(非关系型数据库)(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式,而分布式一般遵循 CAP 定理。 CAP理论 C:consistency(一致性) A:avalibility(可用性) P:Partition(分区)-tolerence to partition(分区容忍度) 分区:一个分布式系统,网络不通讯,导致连接不通,系统被分割成几个数据区域 原因:数据不连通了,产生数据分区 影响: 查还好一点 数据修改时,必须要求数据一致--加锁,实现数据一致性【需求要求数据一致性】 数据修改时,可以数据不一致--不用加锁【需求不要求数据一致性】 分区容忍度 数据的一致性要求高,容忍度高,加锁 数据的一致性要求低,容忍度低,可以不加锁 预期结果,保持数据的一致 可用性 请求在一定时间段内都应该有响应 为了解决锁一直加着 CP理论:【一致性+分区

redis分布式锁(一)———springboot 整合 redisson

给你一囗甜甜゛ 提交于 2019-12-04 15:23:24
   前段时间项目中大量用到了redis的分布式锁,近期总结一下,先从springboot整合redisson说起。    Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括( BitSet , Set , Multimap , SortedSet , Map , List , Queue , BlockingQueue , Deque , BlockingDeque , Semaphore , Lock , AtomicLong , CountDownLatch , Publish / Subscribe , Bloom filter , Remote service , Spring cache , Executor service , Live Object service , Scheduler service ) Redisson提供了使用Redis的最简单和最便捷的方法。 一、添加maven依赖 在pom.xml加入如下配置 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId>

2019 梆梆安全java面试笔试题 (含面试题解析)

自闭症网瘾萝莉.ら 提交于 2019-12-04 11:20:50
本人3年开发经验、18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、梆梆安全等公司offer,岗位是Java后端开发,最终选择去了梆梆安全。 面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在梆梆安全也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角 面试流程   先说下面试流程,一般大公司都有3-4轮技术面,1轮的HR面。就梆梆安全而言,我共经历了4轮技术面,前两轮主要是问基础和项目实现,第3轮是交叉面,两个面试官,主要是问项目实现和拓展。第4轮是部门老大面,主要就问一些架构、技术和业务的理解、个人发展比较抽象的东西了。 要注意的点 简历一到两页为最佳,将项目经历写2-3个左右就差不多了,一定要写最有亮点的项目 工作经历的起始时间要写清楚,另外大公司都有背调,不要合并或省略一些比较短的工作经历,影响的可能不只是这次面试,而是之后可能都无法进这家公司 博客没什么好文章,github没好项目就不要写在简历中了 对于面试官的问题,想清楚再回答,如果觉得需要的时间可能比较长,可以跟面试官说我思考下、我整理下思路之类的 面试的过程中注意语速和吐字,本人在做面试官后,发现很多人说话语速很快,或吐字不清

2019 苏州朗动java面试笔试题 (含面试题解析)

谁都会走 提交于 2019-12-04 11:18:19
本人3年开发经验、18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、苏州朗动等公司offer,岗位是Java后端开发,最终选择去了苏州朗动。 面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在苏州朗动也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角 面试流程   先说下面试流程,一般大公司都有3-4轮技术面,1轮的HR面。就苏州朗动而言,我共经历了4轮技术面,前两轮主要是问基础和项目实现,第3轮是交叉面,两个面试官,主要是问项目实现和拓展。第4轮是部门老大面,主要就问一些架构、技术和业务的理解、个人发展比较抽象的东西了。 要注意的点 简历一到两页为最佳,将项目经历写2-3个左右就差不多了,一定要写最有亮点的项目 工作经历的起始时间要写清楚,另外大公司都有背调,不要合并或省略一些比较短的工作经历,影响的可能不只是这次面试,而是之后可能都无法进这家公司 博客没什么好文章,github没好项目就不要写在简历中了 对于面试官的问题,想清楚再回答,如果觉得需要的时间可能比较长,可以跟面试官说我思考下、我整理下思路之类的 面试的过程中注意语速和吐字,本人在做面试官后,发现很多人说话语速很快,或吐字不清

Redis 分布式锁的正确实现方式(Java版)[转]

▼魔方 西西 提交于 2019-12-04 11:07:53
本文来源: https://www.cnblogs.com/linjiqin/p/8003838.html 前言 分布式锁一般有三种实现方式: 数据库乐观锁; 基于Redis的分布式锁; 基于ZooKeeper的分布式锁 本篇博客将介绍第二种方式,基于Redis实现分布式锁。 虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性 。在任意时刻,只有一个客户端能持有锁。 不会发生死锁 。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性 。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人 。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们要通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码: < dependency> < groupId>redis.clientsgroupId> < artifactId>jedisartifactId> < version>2.9.0version> > 加锁代码 正确姿势 Talk is cheap, show me

2019 中钢网java面试笔试题 (含面试题解析)

前提是你 提交于 2019-12-04 10:45:47
本人3年开发经验、18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、中钢网等公司offer,岗位是Java后端开发,最终选择去了中钢网。 面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在中钢网也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角 面试流程   先说下面试流程,一般大公司都有3-4轮技术面,1轮的HR面。就中钢网而言,我共经历了4轮技术面,前两轮主要是问基础和项目实现,第3轮是交叉面,两个面试官,主要是问项目实现和拓展。第4轮是部门老大面,主要就问一些架构、技术和业务的理解、个人发展比较抽象的东西了。 要注意的点 简历一到两页为最佳,将项目经历写2-3个左右就差不多了,一定要写最有亮点的项目 工作经历的起始时间要写清楚,另外大公司都有背调,不要合并或省略一些比较短的工作经历,影响的可能不只是这次面试,而是之后可能都无法进这家公司 博客没什么好文章,github没好项目就不要写在简历中了 对于面试官的问题,想清楚再回答,如果觉得需要的时间可能比较长,可以跟面试官说我思考下、我整理下思路之类的 面试的过程中注意语速和吐字,本人在做面试官后,发现很多人说话语速很快,或吐字不清

《吊打面试官》系列-Redis常见面试题(带答案)

限于喜欢 提交于 2019-12-04 09:11:21
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub 上已经开源 https://github.com/Java… ,有面试点思维导图,欢迎 Star 和 完善 前言 Redis 在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 Redis 的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚( 请允许我使用一下夸张的修辞手法 )。 于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写 《吊打面试官》 系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! 絮叨 上一期因为是在双十一一直在熬夜的大环境下完成的,所以我自己觉得质量明显没之前的好,我这不一睡好就加班加点准备补偿大家,来点干货。(熬夜太容易感冒了,这次 点个赞 别白嫖了!) 顺带提一嘴,我把我准备写啥画了一个思维导图,以后总不能每篇都放个贼大的图吧,就开源到了我的 GitHub ,大家有兴趣可以去完善和 Star 。 这篇我就先放出来大家看看,感觉还是差点意思,等大家完善了。 回望过去 上一期吊打系列我们提到了 Redis 相关的一些知识,还没看的小伙伴可以回顾一下 《吊打面试官》系列-Redis基础

redis原理及应用

大兔子大兔子 提交于 2019-12-04 07:01:19
一、redis来源 二、数据类型 三、主流的应用场景 四、特性 五、补充 一、 redis来源 redis作者:Salvatore Sanfilippo (antirez),男,意大利人. 需求:一个访客信息追踪网站,网站可以通过JavaScript脚本,将访客的IP地址、所属国家、阅览器信息、被访问页面的地址等数据传送给LLOOGG. com。然后LLOOGG.com会将这些浏览数据通过web页面实时地展示给用户,并储存起最新的5至10,000条浏览记录以便进行查阅。 redis解决方案 每当某个被追踪的网站新增一条浏览记录时,LLOOGG.com就会将这条新的浏览记录推入(push)到与该网站相对应的列表里面,当列表的长度超过用户指定的最大长度时,程序每向列表推入一条新的记录,就需要从列表中弹出(pop)一条最旧的记录。 现在已经被广泛使用: Twitter使用Redis来储存用户时间线(user timeline)。 StackOverflow使用Redis来进行缓存和消息分发。 Pinterest使用Redis来构建关注模型(follow model)和兴趣图谱(interest graph)。 Flickr使用Redis来构建队列。 Github使用Redis作为持久化的键值对数据库,并使用Resque来实现消息队列。 新浪微博使用Redis来实现计数器、反向索引、排行榜

《吊打面试官》系列-Redis终章_凛冬将至、FPX_新王登基

和自甴很熟 提交于 2019-12-04 06:06:18
你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis 在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 Redis 的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸( 请允许我使用一下夸张的修辞手法 ),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写 《吊打面试官》 系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂offer! 絮叨 男儿何不带吴钩,收取关山五十州 FPX 🐂B,LPL两年连冠🏆 🐂B! 看着金色的雨落下,我到窗边,发现天有点蓝,风有点绵,我的眼角又湿了! 最近双十一讲道理有点忙的说,直接肝爆,就是这样作为 暖男 的我,还是给你们挤出时间搞出终章,忍不住给自己 点赞 👍 放个双十一照片证明真的忙,希望别取关!!! 现在你们在看的时候,我应该还在睡觉哈哈。困🛌 之前跟你们说的, 限流 , 降级 ,是不是在双十一又应验了,下单接口其实没挂,牺牲部分用户体验,保住服务器,你多点几下是可以成功的,等流量高峰过去了,所有的用户全部都恢复正常访问,服务器也没啥事。 去年退款接口被打崩了,今年阿里明显也聪明了很多。 正文

Redis 作为分布式锁(一):SpringBoot集成Redisson分布式锁

試著忘記壹切 提交于 2019-12-04 05:48:26
文章目录 一、项目Demo 1.1 项目依赖 1.2 项目配置-redis 1.3 Redisson的配置类RedissonConfig 1.4 定义一个Loker接口,用于分布式锁的一些操作 1.5 基于Redisson的实现类RedissonLocker 1.6 定义一个分布式锁工具类LockUtil 1.7 单元测试 1.8 源码 二、Redisson 之 Redlock 2.1 基于Redis命令的分布式锁 2.2 Redlock实现 2.3 Redlock源码 2.3.1 唯一ID 2.3.2 获取锁 2.3.2 释放锁 Redisson实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。 一、项目Demo 1.1 项目依赖 <!-- 单元测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- redis --> <dependency>