redis分布式锁

CentOs中Redis数据库的安装与Redis常用数据类型操作

别说谁变了你拦得住时间么 提交于 2019-11-29 04:07:25
redis 是一个开源的、使用 C 语言编写的、支持网络交互的、可基于内存也可持久 化的 Key-Value 数据库。redis 数据结构:redis 是一种高级的 key:value 存储系统,其中 value 支持五种数据类型:   1.字符串(strings)   2.字符串列表(lists)   3.字符串集合(sets)   4.有序字符串集合(sorted sets)   5.哈希(hashes) Redis 适用场景:   1.缓存——热数据:热点数据(经常会被查询,但是不经常被修改或者删除的数据), 首选是使用 redis 缓存。   2.计数器:诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且 100%毫秒级性能!    3.排行榜:谁得分高谁排名往上。命令:ZADD(有续集,sorted set)   4.最新列表:例如新闻列表最新页面,总数量很大的情况下,尝试 redis 的 LPUSH 命令构建 List,一个个顺序都塞进去就可以   5.分布式锁与单线程机制:秒杀系统,基于 redis 是单线程特征,防止出现数据库 “爆破”   6.位操作(大数据处理):用于数据量上亿的场景下,例如几亿用户系统的签到, 去重登录次数统计,某用户是否在线等等。   7.队列:由于 redis 把数据添加到队列是返回添加元素在队列的第几位,所以可以做判

Redis常见的应用场景解析

☆樱花仙子☆ 提交于 2019-11-29 00:53:25
Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景。 Redis特性 一个产品的使用场景肯定是需要根据产品的特性,先列举一下Redis的特点: 读写性能优异 持久化 数据类型丰富 单线程 数据自动过期 发布订阅 分布式 这里我们通过几个场景,不同维度说下Redis的应用。 高性能适合当做缓存 缓存是Redis最常见的应用场景,之所有这么使用,主要是因为Redis读写性能优异。而且逐渐有取代memcached,成为首选服务端缓存的组件。而且,Redis内部是支持事务的,在使用时候能有效保证数据的一致性。 作为缓存使用时,一般有两种方式保存数据: 1、读取前,先去读Redis,如果没有数据,读取数据库,将数据拉入Redis。 2、插入数据时,同时写入Redis。 方案一:实施起来简单,但是有两个需要注意的地方: 1、避免缓存击穿。(数据库没有就需要命中的数据,导致Redis一直没有数据,而一直命中数据库。) 2、数据的实时性相对会差一点。 方案二:数据实时性强,但是开发时不便于统一处理。 当然,两种方式根据实际情况来适用。如:方案一适用于对于数据实时性要求不是特别高的场景。方案二适用于字典表、数据量不大的数据存储。 丰富的数据格式性能更高,应用场景丰富

安排:《蚂蚁花呗1234面:Redis+分布式架构+MySQL+linux+红黑树》

让人想犯罪 __ 提交于 2019-11-29 00:24:10
前言: 大厂面试机会难得,为了提高面试通关率,建议朋友们在面试前先复盘自己的知识栈,依据掌握程度划分重要、优先级,系统地去学习!如果不准备充分就去参加面试,既会失去进入大厂的机会,更是对自己的不负责。 蚂蚁花呗一面(一个小时): 1、Java容器有哪些?哪些是同步容器,哪些是并发容器? 2、ArrayList和LinkedList的插入和访问的时间复杂度? 3、java反射原理, 注解原理? 4、说说一致性 Hash 原理 5、新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算法? 6、HashMap在什么情况下会扩容,或者有哪些操作会导致扩容? 7、HashMap push方法的执行过程? 8、HashMap检测到hash冲突后,将元素插入在链表的末尾还是开头? 9、1.8还采用了红黑树,讲讲红黑树的特性,为什么人家一定要用红黑树而不是AVL、B树之类的? 10、https和http区别,有没有用过其他安全传输手段? 11、线程池的工作原理,几个重要参数,然后给了具体几个参数分析线程池会怎么做,最后问阻塞队列的作用是什么? 12、linux怎么查看系统负载情况? 13、请详细描述springmvc处理请求全流程? 14、spring 一个bean装配的过程? 15、项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理 蚂蚁花呗二面:

《吊打面试官》系列-Redis基础

拟墨画扇 提交于 2019-11-28 20:31:30
你知道的越多,你不知道的越多 点赞在看,养成习惯 https://github.com/java… 已经开源,有面试脑图 前言 Redis 在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 Redis 的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸( 请允许我使用一下夸张的修辞手法 ),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写 吊打面试官系列 ,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,吊打一同面试的同僚( 好像不太好 ),疯狂收割大厂offer! 面试开始 一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 小伙子您好,看你简历上写了你项目里面用到了Redis,你们为啥用Redis? 心里忍不住暗骂,这叫啥问题,大家不都是用的这个嘛,但是你不能说出来。 认真回答道: 帅气迷人的面试官您好 ,因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis 和

缓存系列-Redis入门教程

情到浓时终转凉″ 提交于 2019-11-28 18:59:25
Redis是什么? Redis (REmote DIctionary Server)是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列,是一个高性能的key-value数据库。 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 为什么要用Redis 性能极高 – Redis读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。 原子 – Redis的所有操作都是原子性的,即要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。 丰富的特性 – Redis还支持publish/subscribe, key过期等特性。 Redis的数据类型及使用场景 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合

Redis常见的面试题

对着背影说爱祢 提交于 2019-11-28 18:17:32
转自: https://www.cnblogs.com/jasontec/p/9699242.html 介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理。 Github 源码:https://github.com/antirez/redis Redis 官网:https://redis.io/ Redis支持的数据类型? String字符串: 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。 Hash(哈希) 格式: hmset name key1 value1 key2 value2 Redis hash 是一个键值(key=>value)对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表) Redis

redis

萝らか妹 提交于 2019-11-28 17:30:22
Redis 缓存中间件 — Memcache 和Redis 的区别 Memcache :代码层次类似Hash → 支持简单数据类型 → 不支持数据持久化存储 → 不支持主从同步(类似mysql的数据主从同步) → 不支持分片 Redis → 数据类型丰富(set、list) → 支持数据磁盘持久化存储 → 支持主从同步 → 支持分片 为什么redis能这么快? 100000+QPS (QPS 即query per second ,每秒内查询次数) 1、完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高 2、数据结构简单,对数据操作也简单 3、采用单线程,单线程也能处理高并发请求,想多核也可启动多实例 4、使用多路I/O复用模型,非阻塞IO 5、 Redis的数据类型 1、 String :最基本的数据类型,二进制安全 set键值(set name “zhangsan”) get 键(get name) 2、 Hash :String元素组成的字典,适用于存储对象。 hmset 对象 属性1 “1” 属性2 “2”(存对象) hget 对象 属性(获取对象属性值) hset 对象 属性 值(修改对象的属性值) 3、 List :列表,按照String元素插入顺序排序。 lpush list1 aaa (向list1中插入aaa) lrange list1 0 10

分布式锁-redis实现

风格不统一 提交于 2019-11-28 17:27:40
用一web应用集群,负载均衡部署实现: 在上图可以看到,变量A在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象),如果我们不加任何控制的话,变量A同进都会在JVM分配一块内存,三个请求发过来同时对这个变量进行操作,显然结果不是我们想要的。 如果我们业务中存在这样的场景的话,就需要找到一种方法来解决。 为了保证一个方法或属性在高并发的情况下同一时间只能被同一个线程执行,在传统单机部署的情况下,可以使用Java并发处理相关的API(如 ReentrantLock 或 Synchronized )进行互斥控制。但是,随之业务发展的需要,原单机部署的系统演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同的机器上,这将原来的单机部署情况下的并发控制锁策略失效,单纯的Java API并不能提供分布式锁的能力。 为了解决这个问题,就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题! 分布式锁应该具备哪些条件 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行; 高可用、高性能的获取锁与释放锁; 具备可重入特性; 具备锁失效机制、防止死锁; 具备非阻塞锁特性,即没有获取到锁直接返回获取锁失败; 分布式锁的实现方式 目前几乎所有大型网站及应用都是分布式部署

SpringBoot整合Redis分布式锁Redisson(单机)

吃可爱长大的小学妹 提交于 2019-11-28 16:21:29
环境:SpringBoot2.x maven增加配置 <!-- redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--springboot2.0的redis整合包多出lettuce连接池,需要增加commons-pool2包1.5的版本默认采用的连接池技术是jedis 2.0以上版本默认连接池是lettucespring boot 2.0 的操作手册有标注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle--><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version></dependency><dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.6.5<

记录自己面试中的面试题

安稳与你 提交于 2019-11-28 16:15:02
最近在找工作,感觉自己太菜了,记录一下面试官出的题,当然有些记不住了。 1、值传递与引用传递 值传递就是有一个变量a,给一个函数传入a的时候,是复制了a的值传入到函数里,所以在函数内部对于此参数的操作是不会反应在函数外面的那个a上的,引用传递则相反,传入的时候是将对象的地址传进去,在函数内操作的和外面的a是同一个对象。 基本类型都是值传递,对象类型都是引用传递。 2、final final 修饰的变量是引用不可变,不是指向的对象不可变,比如声明final A a = new A();是变量a不能再指向其他对象,但是对象本身还是可以变的。 3、 引用类型 可参考以下文章: java的四种引用类型 Java引用类型分类以及详解 4、GC 参考: Java垃圾回收(GC)机制详解 5、门票购买的并发问题 锁和队列,一般用队列,JDK自带了一个ConcurrentLinkedQueue,add添加,poll取出,可以将门票编号存到队列中。 这个问题是面试官看我写的项目经验问的,然而那个项目并没有考虑并发的问题。。。。 6、springboot和strus2优劣 这个也是看我的简历问的。首先这完全是两个东西,springboot是一个用于简化配置,快速启动的工具,可以集成各种 组件。 而strus2是一个基于MVC理念的框架,通常和springmvc对比。 Struts2