- 博客(6)
- 收藏
- 关注
原创 抢红包设计
简单设计:redis+lua。红包池list+抢红包用户hash。是否有红包?用户是否抢过?中级设计:1.拆红包:预拆包和实时拆包。2.高并发读:缓存。3.并发写:串行化和乐观锁。4.网络流量峰值:大量用户同时抢红包是否会造成网络拥塞,发红包和抢红包最好在同一个IDC。5.对账:考虑到拆红包凭证和入账是异步的2套系统,以及出现故障的可能,需要定时对账保证数据的一致性。6.降级:在cache故障时有限流的使用DB进行服务,在资源紧张的时候关闭掉非核心流程,在实时入账请求量过大时,延迟批量入账.
2020-06-04 08:41:30
268
原创 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?
使用keys指令可以扫出指定模式的key列表。对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?这个时候你要回答redis关键的一个特性:redis的单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。...
2020-06-01 10:09:28
1323
原创 主从数据库不一致如何解决?
场景描述,对于主从库,读写分离,如果主从库更新同步有时差,就会导致主从库数据的不一致。1、忽略这个数据不一致,在数据一致性要求不高的业务下,未必需要时时一致性。2、强制读主库,使用一个高可用的主库,数据库读写都在主库,添加一个缓存,提升数据读取的性能。3、选择性读主库,添加一个缓存,用来记录必须读主库的数据,将哪个库,哪个表,哪个主键,作为缓存的key,设置缓存失效的时间为主从库同步的时间,如果缓存当中有这个数据,直接读取主库,如果缓存当中没有这个主键,就到对应的从库中读取。...
2020-06-01 10:08:55
553
原创 redis怎么保证高可用,高可用模式有哪些?对比下优缺点?
Redis高可用架构如下:1.RedisSentinel集群+内网DNS+自定义脚本。2.RedisSentinel集群+VIP+自定义脚本。3.封装客户端直连RedisSentinel端口。4.JedisSentinelPool,适合Java。5.PHP基于phpredis自行封装。6.RedisSentinel集群+Keepalived/Haproxy。7.RedisM/S+Keepalived。8.RedisCluster。9...
2020-06-01 10:08:19
546
原创 SpringCloud用了那些组件?分布式追踪链怎么做的?熔断器工作原理?
SpringCloud分布式开发五大组件详解服务发现——NetflixEureka客服端负载均衡——NetflixRibbon断路器——NetflixHystrix服务网关——NetflixZuul分布式配置——SpringCloudConfig分布式追踪链系统图:Hystrix执行时内部原理:...
2020-05-29 09:24:33
138
原创 公平锁和非公平锁有什么区别?
公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。非公平锁:多个线程去获取锁的时候,会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到,就直接获取到锁。优点:可以减少CPU唤醒线程的开销,整体的吞吐效率会高点,CPU也不必取唤醒所有线程,会减少唤起线程的数量。缺点:你们可能也发现了,这样可能导致队列中
2020-05-29 09:22:36
1071
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人