Hello,大家好,我是小黑哥~ 上次我们分享 Redis 字符串的底层原理,今天我们再来看下 Redis List 列表的底层原理。 Redis List 命令 Redis List 列表支持的相关指令比较多,比如单个元素增加、删除操作,也支持多个元素范围操作。 Redis List 列表支持列表表头元素插入/弹出**(LPUSH/LPOP**),也支持表尾元素插入/弹出(RPUSH/RPOP)。 另外 Redis List 列表还支持根据下标(LINDEX )获取元素,也支持根据根据下标覆盖相应的元素(LSET )。 除此之外,Redis List 列表还支持的范围操作,比如获取指定范围内全部元素(LRANGE ),移除指定范围内的全部元素(LTRIM )。 了解完的 Redis 相关指令,我们来看下 Redis List 列表底层实现方式,使用两种数据结构: 压缩列表(ziplist) 双向列表(linkedlist) ps:本篇文章基于 Redis 3.2 开始进行讲解 双向列表(linkedlist) 上面我们知道了List 列表支持表头/表尾元素的插入/弹出,这类.... 文带你了解 Redis 列表底层的实现方式 Redis
Hello,大家好,我是楼下小黑哥~ 如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作? 上面的问题其实是小黑哥前端时间接到一个真实的业务需求,将一个老系统历史数据通过线下文件的方式迁移到新的生产系统。 由于老板们已经敲定了新系统上线时间,所以只留给小黑哥一周的时间将历史数据导入生产系统。 由于时间紧,而数据量又超大,所以小黑哥设计的过程想到一下解决办法: 拆分文件 多线程导入 拆分文件 首先我们可以写个小程序,或者使用拆分命令 split 将这个超大文件拆分一个个小文件。 -- 将一个大文件拆分成若干个小文件,每个文件 100000 行 split -l 100000 largeFile.txt -d -a 4 smallFile_ 这里之所以选择先将大文件拆分,主要考虑到两个原因: 第一如果程序直接读取这个大文件,假设读取一半的时候,程序突然宕机,这样就会直接丢失文件读取的进度,又需要重新开头读取。 而文件拆分之后,一旦小文件读取结束,我们可以将小文件移动一个指定文件夹。 这样即使应用程序宕机重启,我们重新读取时,只需要读取剩余的文件.... 30G 上亿数据的超大文件,如何快速导入生产环境? 并发编程
Hello,大家好,我是小黑哥~ 前端时间小黑哥在公司接手了一个支付项目,这个项目接入了微信、支付宝。这个项目开发下来,小黑哥可是完完整整体验了一下微信、支付宝开发流程,也踩了一些坑。 最近正好看到有些小伙伴想接入微信、支付宝,但是不知道如何开发,所以小黑哥就给大家总结一下微信支付、支付宝接入开发流程。 总体流程 明确使用支付方式 首先我们需要明确我们需要使用的支付方式。 因为微信支付、支付宝中存在很多支付方式,不同支付方式对应的不同的业务场景,开发对接复杂度也不太一样。 以微信支付举例,其总共提供如下几种的支付方式。 这几种支付方式对应的不同的业务场景,比如说: 付款码支付:商家使用扫码枪或其他扫码机具扫描用户出示的付款码,适合于线下商超收款 Native支付:商家在系统中按微信支付协议生成支付二维码,用户扫码拉起微信收银台,确认并完成付款 JSAPI 支付:用户在商家公众号内下单,输入密码支付,完成支付,适合于在线购物的场景 APP 支付:用户在商家的APP中下单,跳转到微信中完成支付,支付完后跳回到商家APP内,展示支付结果 H5 支付:用户在手机浏览器中下单,然后跳转到微信.... 不知道怎么接入微信支付、支付宝?可以看看这篇 支付系统
Hello,各位小伙伴们,早上好~ 上周文章年轻人不讲武德,竟然重构出这么优雅后台 API 接口我们使用 @ControllerAdvice与 ResponseBodyAdvice 重构后端的 API 接口,降低了复杂度,减少了重复代码,后续接口开发非常简洁优雅。 知其然而知其所以然,今天这篇文章来聊聊这个注解背后的原理,让我们彻底掌握这个注解,避免后续踩坑。 另外,有个小伙伴看完上篇文章,觉得这个注解的跟 Spring Interceptor 功能很类似,再加上之前还学习了 Servlet 体系 Filter 功能,不知道这几个有什么区别,感觉很混乱。 所以今天这篇文章下面两个部分出发,详细解释一下。 @ControllerAdvice与 ResponseBodyAdvice 注解原理 Filter,Interceptor,ResponseBodyAdvice 区别 从源码解析背后的原理 上篇文章中我们看到 ResponseBodyAdvice的子类使用 @ControllerAdvice注解,大家有没有好奇,如果我将@ControllerAdvice换成 @Controller.... 写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理 Spring
Hello,大家好,我是楼下小黑哥~ 今天继续分享支付系统相关的内容,这次分享一下如何支付路由系统实现方式。 其实这个话题去年也写过,不过当时没啥阅读量,这次就再次翻出来加工一下,炒下冷饭。 支付路由系统 提到路由,不免会想到网络通信过程中起到数据包转发的路由器。 而我们今天讲到支付路由系统,也是起到类似的作用。路由系统本身并不处理具体业务,它的作用就是将支付请求转发底层支付通道。 如上图所示,支付系统接入层,接收到支付请求之后,经过内部运算,最后将会通过路由系统转发给具体底层的支付通道。 另外,除了路由转发功能以外,路由器一般还会有一些额外的功能,比如防火墙等。 那我们其实也可以在支付路由系统加入额外功能,比如实时计算底层支付渠道的成功率,若低于一定的阈值,进行报警并且将该渠道下线。 这里需要说明一点,这里的路由系统可以是一个应用中子模块,也可以是一个单独子系统。 为什么需要路由系统 看到这里,可能会有一些小伙伴会思考,一定需要这个路由系统吗?直接将请求发给支付通道不好吗? 答案当然是可以的,如果当前只对接一两个支付渠道,这么做没问题,并且也推荐这么做。 这个阶段由于业务量不大,.... 从无到有,支付路由系统升级打怪之路 支付系统
Hello,大家早上好,我是小黑哥! 双十一已经过去好几天了,不知道大家战果如何? 今年双十一小黑哥倒是没买很多东西,唯一买的东西,竟然还被骗了,城市套路深啊~ 哎,给大家分享一下这次被骗经历,希望看到小伙伴都提高警惕。 事情是这样的,双十一之前小黑哥的朋友推荐一个商品链接,说是可以低价购买美团外卖年度会员。 原价 100 多,现在为了冲双十一的销量,商家放出很多优惠券,满 100 就可以 50 ,相当于 58 就可以购买美团年度的会员。 而美团外卖 APP 上,一个月会员 15 ,一年等于需要 180,四舍五入相当于省了 100 多元钱。 起初,小黑哥还是有点怀疑这个真实性的,真的会这么便宜? 朋友看我不相信,甩给我一个购买的订单截图,以及美团外卖 app 会员截图。 这么有理有据,小黑哥开始相信这个了,于是也购买了一个。 购买之后,商户发送一个兑换码,需要跳到一个网站上兑换。 在这个网站,输入兑换码以及手机号之后,美团外卖 APP 上就绑定一个月的美团的会员。 起初,小黑哥比较纳闷,明明买的是年度会员,你给我个一个月会员什么意思。 跑去跟客服沟通,客服回复这个他们这个年度会员.... 美团会员只需 58 一年!还买一送一?分享一次上当经历! 小黑黑的碎碎念
Hello,大家好,我是小黑哥~ 前端时间小黑哥在公司接手了一个支付项目,这个项目接入了微信、支付宝。这个项目开发下来,小黑哥可是完完整整体验了一下微信、支付宝开发流程,也踩了一些坑。 最近正好看到有些小伙伴想接入微信、支付宝,但是不知道如何开发,所以小黑哥就给大家总结一下微信支付、支付宝接入开发流程。 总体流程 明确使用支付方式 首先我们需要明确我们需要使用的支付方式。 因为微信支付、支付宝中存在很多支付方式,不同支付方式对应的不同的业务场景,开发对接复杂度也不太一样。 以微信支付举例,其总共提供如下几种的支付方式。 这几种支付方式对应的不同的业务场景,比如说: 付款码支付:商家使用扫码枪或其他扫码机具扫描用户出示的付款码,适合于线下商超收款 Native支付:商家在系统中按微信支付协议生成支付二维码,用户扫码拉起微信收银台,确认并完成付款 JSAPI 支付:用户在商家公众号内下单,输入密码支付,完成支付,适合于在线购物的场景 APP 支付:用户在商家的APP中下单,跳转到微信中完成支付,支付完后跳回到商家APP内,展示支付结果 H5 支付:用户在手机浏览器中下单,然后跳转到微信.... 微信支付、支付宝最全接入指引,看完立刻就可以上手! 支付系统