Redis平台使用案例分析_第1页
Redis平台使用案例分析_第2页
Redis平台使用案例分析_第3页
Redis平台使用案例分析_第4页
Redis平台使用案例分析_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Redis平台使用案例分析123R e d i s 相关介绍红包案例分析分布式锁分析4F e e d 流案例作业目录1Redis 相关介绍基本命令持久化集群方案Redis相关介绍使用场景使用场景高并发解决经验:拦拦拦,拦不住了缓存来抗!1、热点数据缓存 2、数据库二级缓存3、分布式session4、排行榜5、计数器6、分布式锁7、秒杀&红包系统8、社区动态Feed流9、消息队列使用场景持久化集群方案Redis相关介绍基本命令一、字符串类型DEL key key .1、介绍:字符串类型是Redis的最基本类型,它可以存储任何形式的字符串。 其它的四种类型都是字符串类型的不同形式,最大能存储 51

2、2MB。基本命令2、常用命令:SET key value EX seconds PX milliseconds NX|XXGET keyMSET key value key value .MGET key key . INCR keyINCRBY key incrementDECR keyDECRBY key decrementSETEX key seconds value使用场景持久化集群方案Redis相关介绍基本命令二、散列类型1、介绍:Hash是一个string类型的field和value的映射表,hash特别 适合用于存储对象。基本命令2、常用命令:HSET key field val

3、ueHGET key fieldHMSET key field value field value .HMGET key field field .HGETALL keyHEXISTS key fieldHDEL key field field .HINCRBY key field incrementHKEYS keyHVALS key使用场景持久化集群方案Redis相关介绍基本命令三、列表类型 1、介绍:List是简单的字符串列表,按照插入顺序排序,可以在头部或者尾 部添加元素。它内部使用双向链表实现,所以获取越接近两端的元素速度越快。基本命令2、常用命令:LPUSH key value v

4、alue .RPUSH key value value .LPOP keyRPOP keyLSET key index valueLINDEX key indexLRANGE key start stopLLEN keyLTRIM key start stopBLPOP key key . timeoutBRPOP key key . timeout使用场景持久化集群方案Redis相关介绍基本命令四、集合类型1、介绍:Set是string类型的无序集合,内部通过哈希表实现,所以 添加、删除、查找的时间复杂度都是O(1)。基本命令2、常用命令:SADD key member member .SM

5、EMBERS keySISMEMBER key memberSCARD keySRANDMEMBER key countSPOP keySDIFF key key .SINTER key key .SUNION key key .使用场景持久化集群方案Redis相关介绍基本命令基本命令五、有序集合类型 1、介绍:SortedSet和Set一样也是string类型元素的集合,但不允许重复。不 同的是每个元素都会关联一个double类型的分数,redis正是通过分数为集合中的 成员进行从小到大的排序。虽然SortedSet的成员是唯一的,但分数却可以重复。2、常用命令:ZADD key score

6、 member score member score member .ZCARD keyZCOUNT key min maxZRANGE key start stop WITHSCORESZRANGEBYSCORE key min max WITHSCORES LIMIT offset countZRANK key memberZREM key member member .ZREVRANGE key start stop WITHSCORESZREVRANGEBYSCORE key max min WITHSCORES LIMIT offset countZREVRANK key membe

7、rZSCORE key member使用场景持久化集群方案Redis相关介绍基本命令基本命令六、发布与订阅1、介绍:发布订阅(pub/sub)是一种消息通信模式,其中发送者(pub) 发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的 频道。2、常用命令:SUBSCRIBE channel channel .PUBLISH channel messageUNSUBSCRIBE channel channel .使用场景持久化集群方案Redis相关介绍基本命令基本命令2、常用命令:EVAL script numkeys key key . arg arg .SCRIPT LO

8、AD scriptEVALSHA sha1 numkeys key key . arg arg .SCRIPT EXISTSSCRIPT FLUSH七、Lua脚本 1、介绍:Redis2.6以后允许开发者使用Lua语言编写脚本传到Redis中 执行,在Lua脚本中可以调用大部分的Redis命令。使用脚本的优点:减少网络开销原子操作 复用使用场景持久化集群方案Redis相关介绍基本命令基本命令八、其它1、排序命令:SORT key BY pattern LIMIT offset count GET pattern GET pattern . ASC | DESC ALPHA STORE dest

9、ination2、过期命令:EXPIRE key secondsEXPIREAT key timestampPERSIST keyTTL key 3、事物命令:MULTIEXECDISCARDWATCH key key .UNWATCH使用场景基本命令集群方案Redis相关介绍持久化持久化RDB方式:根据配置规则进行自动快照用户执行SAVE或BGSAVE命令执行FLUSHALL命令执行复制(replication)时AOF方式:默认未开启,需要手动配置开启参数启用:appendonly yes默认文件名为:appendonly.aof使用场景基本命令持久化Redis相关介绍集群方案集群方案一、

10、复制方式图片来自网络使用场景基本命令持久化Redis相关介绍集群方案集群方案二、哨兵方式图片来自网络使用场景基本命令持久化Redis相关介绍集群方案集群方案三、集群方式2分布式锁案例分析分布式锁Redis方案深层思考分布式锁案例分析同一个JVM进程同进程锁注:Java中可以使用synchronized关键字或lock类实现同步锁分布式锁案例分析不同的jvm进程同进程锁分布式锁Redis方案深层思考注:1、基于数据实现;2、基于Redis实现;3、基于Zookeeper实现同进程锁分布式锁深层思考分布式锁案例分析Redis实现分布式锁Redis方案一、实现原理利用Redis的setnx命令。此命

11、令是原子性操作,只有在key不存在的情况下,才能set成功。二、涉及命令加锁命令:SETNX key value解锁命令:DEL key锁超时命令: EXPIRE key seconds同进程锁分布式锁深层思考分布式锁案例分析Redis实现分布式锁Redis方案三、分布式锁实现伪代码注:setIfAbsent 方法封装了 Redis 原生的 SETNX 原子操作同进程锁分布式锁Redis方案分布式锁案例分析思考问题一深层思考一、当成功,失败情况这样一来,这把锁就没有设置过期时间,变得“长生不老”,别的线程再也无法 获得锁了。解决方案:使用SET指令增加可选参数来代替SETNX,set(key,

12、1,30,NX)。同进程锁分布式锁Redis方案分布式锁案例分析思考问题二深层思考二、当导致误删情况假如某线程成功得到了锁,并且设置的超时时间是20秒。如果某些原因导致线程A执行 的很慢,过了20秒都没执行完,这时候锁过期自动释放,线程B得到了锁。随后,线程A执行完了任务接着执行del指令来释放锁。但这时候线程B还没执行完,线程A实际上删除的是线程B加的锁。解决方法:可以在加锁的时候把当前的线程ID当做value,并在删除之前验证key对应的value是不是自己线程的ID。加锁时伪代码:String threadId = Thread.currentThread().getId(); set(

13、key,threadId,30,NX);解 锁 时 伪 代 码 : if(threadId.equals(redisClient.get(key)del(key);3红包案例分析业务难点技术设计深层思考红包案例分析业务介绍业务介绍注:像微信的群红包,可以任意设置红包份数,金额随机产生,但要求最少金额0.01元,如果红包超过24小时还没有抢完,则退回剩余金额。业务介绍技术设计深层思考红包案例分析业务难点业务难点一、安全级别高,不能出现超发或少发二、海量高并发资源抢夺严重红包案例分析技术设计业务介绍业务难点技术设计深层思考一、基础组件概念1、List结构存放预先生成的红包金额2、Hash结构存放红

14、包领取记录3、List结构存放红包异步发放队列红包案例分析技术设计业务介绍业务难点技术设计深层思考二、红包拆分方案1、实时拆分实时拆分,是指在抢红包时,实时计算每个红包的金额,以实现红包拆 分的过程。过程对系统性能,和拆分算法要求较高,例如拆分过程需要 保证后续拆分红包的金额不为空,不容易做到拆分红包的金额服从正态 分布。2、预先拆分预先生成,指的是红包在开抢之前已经完成了红包的拆分工作,抢红包 的过程实际上是依次取出拆分好的红包金额,对拆分算法要求较低,可 以拆分出随机性较好的红包金额,通常需要结合队列来进行使用。红包案例分析技术设计业务介绍业务难点技术设计深层思考三、拆分算法二倍均值算法1

15、、二倍均值算法二倍均值拆分算法:假设拆分金额为M , 拆分红包个数为N ,任何一次抢到的金额都不会超过人均金额的两倍,并金额有一定趋势的正态分布。2、算法公式伪代码公式:m=rand(0,M/N2);解释:rand(min,max)表示从(min,max)区间随机一个值,M/N*2 标识剩余平均 金额的两倍,因为N 1,所以M/N*2 M,表示一定能保证后续的红包拆分到 金额。红包案例分析技术设计业务介绍业务难点技术设计深层思考三、拆分算法线段切割算法1、线段切割法算法把红包总金额想象成一条很长的线段,而每个人抢到的金额,则是这条主线段所拆分出的若干子线段。2、算法当N个人一起抢红包的时候,需

16、要确定N-1个切割点,随机的范围区间是(1,M),当所有切割点确定以后,子线段的长度也随之确定。这样每个人来抢 红包的时候,只需要顺次领取与子线段长度等价的红包金额即可。红包案例分析技术设计业务介绍业务难点技术设计深层思考二、发红包红包案例分析技术设计业务介绍业务难点技术设计深层思考三、抢红包红包案例分析技术设计业务介绍业务难点技术设计深层思考三、过期退红包业务介绍业务难点技术设计红包案例分析深层思考深层思考一、抢红包过程中如何更高效的进行事物操作;三、如何快速扩容,如何实现Set化;二、如果更新帐户余额失败怎么办,如何做最终一致性;4F e e d 流案例作业业务难点技术设计深层思考Feed

17、流案例分析业务介绍业务介绍概念:Feed是喂养的意思,你想吃什么,就喂给你什么; 典型的例子就是 微博、知乎的首页,以及各个聚合类资讯app的订阅号,这些信息的共同点 就是给你喂你想看的,而不是将所有的东西全部给你(瀑布流);示例:有这样一个Feed系统,我可以关注别人,别人也可以关注我,另外有一个自己的首页,以时间轴的形式显示关注人和自己的动态信息。业务介绍技术设计深层思考Feed流案例分析业务难点业务难点一、如何解决大V问题二、如何解决内存消耗问题Feed流案例分析技术设计业务介绍业务难点技术设计深层思考一、技术方案 1、推模式。即写扩散。每当用户发帖,对所有粉丝推送一条该用户 的动态消息记录。优点是查看动态的读取场景下效率最高;缺点是对 于粉丝较多时写入相当耗时。2、拉模式。即读扩散。每次拉取用户所有关注者的最近动态,然后 汇总排序。优点是对关注者的状态变化能及时地获取;缺点是拉取 所有关注者的数据做汇总排序和分页的代价较大。3、推拉模式。即读写扩散。它是上面两种模式的结合,是对推模式 的补充扩展,即在粉丝较多时写扩散时间开销较大的情况下,可以 采用拉模式在用户主动请求时才拉取关注者动态信息并进行汇总操 作。业务介绍业务难点技术设计Feed流案例分析深层思考深层思考二、深层思考 1、合并操作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论