拼多多商城,Redis这个新特性,背面的架构思维值得学习,程序员面试常问-优德88手机中文版

admin3周前170浏览量

咱们常说Redis是单线程的服务,单线程的优点十分显着,首先是代码逻辑愈加简略,服务愈加安稳,但一起,单线程也引来一些问题,例如做一些十分重的操作的时分,其他的使命就会受到影响,有一些十分重要的操作,其实能够多线程来做,例如进行数据的备份,或许删去一个十分大的字典的时分,同步做的含义并不是很大。

为了处理这个问题,Redis还有一些异步线程进行作业,让Redis愈加高效,咱们称之为Lazyfree机制。



Redis懒散删去Unlink指令

在Redis指令中,供给了一个新的删去指令,Unlink。其实在现实生活中,这种懒散删去在现实生活中十分的常见,例如饭馆晚上要打烊的时分,并不会立马赶开店里的客人,打扫卫生,而是现在门口挂出打烊的标识,然后再在里边渐渐地拾掇,Redis的Unlink指令也是如此。例如咱们对一个字典履行Unlink指令的履行过程如下:

  • 先从字典的条目中把这个key拿下
  • 获取字典总共有多少个值
  • 假如个数较少,值履行同步删去,不然原子添加待慵懒删去的条目
  • 将字典提交给慵懒删去行列
  • 回来删去成功



Redis清空数据库异步化

咱们都知道,假如咱们要把整个Redis里边一切的数据删去的话,也是十分需求时刻的,同理,Redis的删去指令也能够进行异步化。当履行删去指令的时分,Redis会把数据库的字典指向新的字典,然后把旧的数据提交到异步的线程进行处理。

Redis其他异步删去

在此之前,咱们介绍过Redis的一些内存筛选与过期的战略。例如Redis的过期战略有自动删去跟被迫删去两种不同的战略,Redis4.0为咱们供给新的装备项,能够在在删去的时分敞开异步删去。这儿需求留意的是,并不是敞开一个线程去不断扫描那些key过期。



总结

Redis的异步删去,其实在咱们日常的开发中,也能够进行学习。例如电商体系中,商家要给一切买过自己产品的用户派发一张优惠券,这个逻辑,十分地重,需求读取用户体系(例如需求读取用户的基本信息)、订单体系(查询用户的订单)、优惠体系(检查优惠券的数量跟优惠券的概况)、Push体系(推送用户领到新的优惠券了,能够检查了)等多个体系,假如咱们同步做,或许用户点一次派发用券,要花好几个小时,并且或许伴随着各种超时,一般咱们都是把这种需求这样做,供给一个使命行列,当商家床架完使命的时分,就把使命丢到音讯行列里边,告知商家说使命提交成功,然后后台再渐渐进行优惠券派发,最终告诉商家发送成功。

Redis,这个小而精的项目,有许多规划的思维值得学习,欢迎我们重视我,一起学习,一起进步。我们的支撑是我持续闲谈的动力。同名大众号(沙茶敏碎碎念)

最新评论