redis分布式锁

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 发送变化),此时要执行全量复制,应该配合哨兵和集群解决. 主从复制挤压缓冲区不足产生的问题(网络中断,部分复制无法满足)

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

redis基础一

早过忘川 提交于 2020-02-16 18:25:20
1、redis是什么? Redis是一个高性能的key/value 非关系型的 内存 数据库,基于C语言编写。 1)、单进程、线程的工作机制; 2)、采用Reactor模式,基于事件驱动(文件事件和时间事件),使用I/O的多路复用程序来同时监听多个套接字; 3)、支持主从复制 or 集群; 4)、满足CPA(C:强一致性、P:分区容错、A:高可用)理论中的 CP理论。像zk也是满足CAP中的CP(分布式系统中A和C几乎不能共存)。 2、redis功能 1)、Redis支持数据的持久化,可以把数据保存到磁盘上,重启的时候可以再次加载数据进行使用,也可以数据缓存下来并设置缓存的时间; 2)、支持多种数据类型,String,List,Set,hash,Zset 3)、支持发布/订阅模式(不建议使用,建议使用rabbitMQ、RocketMQ); 4)、服务注册中心(dubbo ,不建议使用,建议使用zk); 5)、支持分布式锁。 3、 linux环境下如何启动redis呢? 启动服务端: 1)、修改配置文件redis.conf; 2)、进入redis安装目录下的bin目录下; 3)、 ./redis-server /path/redis.conf (path为自定义redis.conf文件存放目录); 启动对应的客户端: 1)、进入redis安装目录下的bin目录下; 2)、redis

Redis面试

二次信任 提交于 2020-02-15 05:19:41
原理 Redis数据类型及实现 过期时间实现 跳表 Redis直接操作是什么??? 持久化 事务 Redis为什么这么快 直接操作内存 底层使用C语言并重写了一些C语言数据结构,如String,使得一些API比原生的C要快,如获得String长度 https://www.cnblogs.com/AshOfTime/p/10616044.html 单线程,避免了线程切换的代价 单线程,没有并发问题,避免了锁带来的性能开销 IO多路复用,单线程可以监控多个IO https://zhuanlan.zhihu.com/p/24252862 应用 保证Redis缓存和数据库一致性 路由 单线程 集群 (哈希槽,主从复制,节点选举,MOVE和ASK等等) 主从复制 2.8之前,断线出发全量复制 2.8后,命令传播阶段增量复制 主从节点 从从节点 异步性 如何保证高可用性 分布式锁 来源: https://www.cnblogs.com/AshOfTime/p/10779478.html

Redis使用

僤鯓⒐⒋嵵緔 提交于 2020-02-14 05:53:05
存储用户信息时 方案一:key-value形式存储,key为用户id,value为用户结构信息序列化后的字符串内容 方案二:hash存储,子key为用户id,value为用户结构信息,无需序列化 方案一在存取时需要序列化与反序列化;且key可不唯一,用户id存储可能重复;并发操作时需要将整个对象取回并对修改操作作并发保护。 方案二可防重,且不存在序列化开销,没有并发修改控制问题 TODO 这里有个问题,网上说hash可以避免cas问题,怎么体现的 分布式锁 用于控制并发流程,如多个线程需要频繁对某个数据进行读取和修改引起的并发问题,使用分布式锁可保证原子操作即执行某一过程不会因线程切换而打断。 实现:setnx(set if not exits)一个时间只允许设置一个锁,用完了del指令释放 setnx lockKey true del lockKey 问题一:如果在获得锁后发生事故导致del指令没能执行,那么会引起死锁问题,锁不能被释放,下一个线程永远拿不到 解决一:在获取锁的同时设置一个过期时间expire lockKey seconds,保证发生异常不能主动释放锁也能自动释放 问题二:虽然设置了过期时间保证自动释放锁,但如果在exprie前服务进程挂了,也是会引起死锁的,因为expire和setnx指令不是原子指令不能一起执行 (TODO 不使用Redis事务的原因) 解决二

java详细面试题

时间秒杀一切 提交于 2020-02-13 06:00:23
struts和springMVC区别? stringbuffer和stringbuilder区别? mybatis原理? soa原理? dubbo的原理? solr怎么搭建,倒序索引? MQ消息队列? SQL语句? maven以及本地仓库? final关键字? 为什么使用ssm而不用ssh? struts2和springmvc区别? 开发工具,jvm,gc,设计模式,平时开发工程是你自己搭建吗? 项目中用到的技术dubbo,zookeeper,solr等? 这三年工作中你统计过自己的代码量大概有多少? redis是多例的还是单例的,在多线程时怎么使用? hashmap线程冲突怎么解决? 介绍一下spring,mybatis。aop用的是静态代理还是动态代理? 介绍电商项目,开发周期多长?技术人员有多少?任务怎么分配什么时候上线?项目模块? 说说你负责的模块的具体代码? 数据库表熟悉吗?有哪些字段? 为什么不使用HttpApi进行项目通信而使用dubbo? TCP和UDP的区别? http,https,ftp,sftp分别使用哪个协议? 给你一个mysql数据库,不使用硬件也不使用软件如何优化? SQL语句的执行顺序? 给你两个表写出笛卡尔积的结果? redis的list数据类型是双向队列,完全可替代MQ,为何还要使用MQ,dubbo的底层原理和实现?

Redisson

放肆的年华 提交于 2020-02-12 18:48:01
Redisson 是一种操作redis的框架,类似于jedis,是一个redis客户端,支持分布式锁等,底层用lua脚本实现 Redisson 分布式锁原理: 分布式是锁? 是将同步请求转换为了串行执行,队列里面 redis 主从架构,由于同步问题导致锁失效问题? redis 会将多个节点加锁,比如有5个节点加锁,一般有一半加锁成功才算成功,redis采用RedisLock算法 来源: https://www.cnblogs.com/fanBlog/p/12291248.html

缓存技术-Redis

时光毁灭记忆、已成空白 提交于 2020-02-12 12:29:58
1. Redis的了解 1.1 NoSQL 答:NoSQL(Not Only SQL),泛指非关系型的数据库,目的是解决高并发、高拓展和大数据储存问题。细分为:键值型(Redis),列存储(HBase),文档型(MongoDB),图形(Neo4j)。 1.2 Redis 答:Redis(Remote Dictionary Server远程字典服务)是一款 高性能、高并发 的key-value型分布式内存数据库,基于内存运行且支持 持久化 的NoSQL数据库。常被用于缓存和消息队列。 高性能:用户第一次访问数据后,数据存储在缓存中,之后再访问直接从缓存中获得,相当于直接操作内存。数据库数据改变后,同步改变缓存数据。 高并发:直接操作缓存能承受的请求远大于直接访问数据库,将部分数据放在33 redis中,让用户请求直接到缓存中寻找,不用访问数据库。 1.3 Redis和map区别 答:缓存分为本地缓存和分布式缓存。map是本地缓存,优点是轻量快速,缺点是多实例情况下,每个实例都有一个缓存。Redis是分布式缓存,多实例情况下,每个实例共用一个缓存,具有一致性,缺点是架构复杂。 1.4 Redis和memcached区别 答:主要是四点: Redis有更丰富的类型,memcached只支持String类型; Redis支持数据持久化,将内存数据保存到磁盘,memcached全部存在内存;