gourpId的所有数据(如果为空该条数据就不返回)。...} 记录中有的coupon有记录,有的为空。...`deleted_at` is null 如果第二条为空,主记录的关联字段就是NULL。...显然区分这两个的作用很重要,尤其是在列表中,不用特意去筛选为空的数据,而且好做分页。...总结 以上所述是小编给大家介绍的Laravel关联模型中过滤结果为空的结果集(has和with区别),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
应用可从配置应用中受益匪浅,配置应用中每个显示密度都被放在一个独立应用中,允许设备定制安装,也大大减少下载和体积。 Plaid 显示图形资源时,很大程度依赖于 vector drawables。...实现模块化 我们为实现模块化所选的方法: 将所有代码和资源块移动到核心模块中。 识别可模块化功能。 将相关代码和资源移动到功能模块中。...Plaid 的 核心模块 为开始重构,我们将所有代码和资源都移动至一个 com.android.library 模块。进一步重构后,我们的核心模块仅包含各个功能模块间共享所需要代码和资源。...但是通过在你的代码中遵循一些约定,也未尝不可能。 通过 Plaid,文件在被用到的地方作为前缀。例如,资源仅用于以 dribbble_ 为前缀的 :dribbble。...清单文件合并视图将所有功能模块中清单文件合并到应用模块。合并失败将导致功能模块样式文件在指定时间对应用模块不可用。 为此,我们在核心模块样式文件中为每一样式如下创建一份空声明: <!
获取更多应用信息和重新设计的视觉效果,可以查阅 Restitching Plaid。...Restitching Plaid: 把 Plaid 更新到最新应用标准 和大多数 Android 应用一样,Plaid 依赖 Android Support Library,该库可以为新 Android...一次性迁移整个应用也非常必要,因为部分迁移——同时使用 AndroidX 和 Support 库将会导致迁移过程中的失败。...这个方法有利于把流程拆解为可控的步骤。我们留下了一些任务,诸如修复导入顺序、提取依赖变量、减少完整 classpath 的使用,以便后续的清理工作。...接下来,Palette API 在新版中变得可以为空,为了暂时避开(参考这次提交)这点,我们添加了!!(非空断言操作符)。 然后我们遇到了一个 plusAssign 缺失的报错。
获取更多应用信息和重新设计的视觉效果,可以查阅 Restitching Plaid。...Restitching Plaid: 把 Plaid 更新到最新应用标准 和大多数 Android 应用一样,Plaid 依赖 Android Support Library,该库可以为新 Android...这个方法有利于把流程拆解为可控的步骤。我们留下了一些任务,诸如修复导入顺序、提取依赖变量、减少完整 classpath 的使用,以便后续的清理工作。...接下来,Palette API 在新版中变得可以为空,为了暂时避开(参考这次提交)这点,我们添加了!!(非空断言操作符)。 然后我们遇到了一个 plusAssign 缺失的报错。...遇到的问题主要涉及依赖库或类的错误转换,以及新库中的 API 变化。 幸运的是这些都相对容易解决。Plaid 现在已经准备好再被用起来了!
应用可从配置应用中受益匪浅,配置应用中每个显示密度都被放在一个独立应用中,允许设备定制安装,也大大减少下载和体积。 Plaid 显示图形资源时,很大程度依赖于 vector drawables。...实现模块化 我们为实现模块化所选的方法: 将所有代码和资源块移动到核心模块中。 识别可模块化功能。 将相关代码和资源移动到功能模块中。 ?...Plaid 的 核心模块 为开始重构,我们将所有代码和资源都移动至一个 com.android.library 模块。进一步重构后,我们的核心模块仅包含各个功能模块间共享所需要代码和资源。...复制代码 清单文件合并视图将所有功能模块中清单文件合并到应用模块。合并失败将导致功能模块样式文件在指定时间对应用模块不可用。 为此,我们在核心模块样式文件中为每一样式如下创建一份空声明: <!...模块化需要一些时间,但鉴于上文所见好处,这是值得付出努力的,特别是考虑到动态交付。 去查看 Plaid’s source code 了解我们所有的变化和快乐模块化过程!
2.1.2 缓存穿透的解决方案对空值缓存 : 如果查询返回的数据为空(不管数据是否存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟。...进行实时监控 : 当发现Redis的命中率开始急剧下降时,需要排查访问对象和访问的数据,和运维人员配合,可以设置黑名单限制服务。...实时调整 : 现场监控哪些数据热门,实时调整key过期时长。使用锁 :就是在缓存失效的时候(判断拿出来的值为空),不是立即去 load db。...将缓存失效时间分散开:比如我们可以在原有的失效时间基础上增加一个随机值,比如:1~5分钟随机,这样每一个缓存的过期时间重复率会降低,就很难引发集体失效的事件。...也就是每个key的失效事件设置为不一样的,在不同的时间更新ley,而不是在某个时间点更新所有的key。Redis核心:单线程 + IO多路复用技术
当地时间周四,特斯拉在加州弗里蒙特工厂举行了Model S Plaid交付活动。 活动一开场,Model S设计师Franz von Holzhausen抡着大锤就上场了。...Model S Plaid拥有1020马力,每次充电的续航里程约为400英里,最高时速为200英里/小时(配有合适的轮胎)。 此外,零百加速2.1秒,四分之一英里加速9.23秒。...Model S Plaid还采用了更简约的内饰设计,使用了17英寸中控屏+12.3英寸的液晶仪表,与Model Y和Model 3风景触摸屏相似。...中控台为后座乘客提供了额外的屏幕。至于司机,特斯拉在方向盘后面为其安装了「驾驶舱」屏幕。 ...比保时捷快,比沃尔沃安全 在交付活动中,马斯克透露: 虽然新车尚未获得美国政府的安全评级,但特斯拉的内部测试使该公司相信,Model S Plaid可以实现自2011年以来任何车辆测试中的最低受伤率
Redis中查询不到数据,导致大面积的缓存未命中 出现非正常的URL访问请求(网站受到恶意攻击) 解决方案 对空值缓存:如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null...)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟 设置可访问的名单(白名单):使用bitmaps类型定义一个可以访问的名单,名单id作为bitmaps的偏移量,每次访问和bitmap里面的id进行比较...它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。)...进行实时监控:当发现Redis的命中率开始急速降低,需要排查访问对象和访问的数据,和运维人员配合,可以设置黑名单限制服务。...实时调整:现场监控哪些数据热门,实时调整key的过期时长。 使用锁: (1) 就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db。
一款拼接应用 Plaid — 整体到模块化: 模块化 Plaid 应用的初衷、过程和结果 让我以鸟瞰图的形式快速回顾一下 Plaid 的样子。...在我们开始模块化操作和以 Dagger 为主介绍依赖注入之前,先来熟悉下 Plaid 的相关类和函数: class DesignerNewsInjector { fun providesApi...我们为依赖注入需求选择了 Dagger 意味着我们的依赖图在编译阶段会被创建。下面的章节中要记住这一点。...依赖图解 当为一个单块应用引入依赖注入库时,通常整个应用有个单一的依赖图。 ? 这可以使组件间共享依赖。在一些库中,依赖可以被设置作用域来避免冲突,或者为被注入对象提供一种特殊的实现。...引入的功能模块边界通过分离的依赖图反映在依赖注入中。意识到这个限制可有助于为共享组件找到合适的位置。 你可以深入到代码中来查看我们如何使用 Dagger 解决 Plaid 中的依赖注入问题。
一款拼接应用 Plaid — 整体到模块化: 模块化 Plaid 应用的初衷、过程和结果 让我以鸟瞰图的形式快速回顾一下 Plaid 的样子。...在我们开始模块化操作和以 Dagger 为主介绍依赖注入之前,先来熟悉下 Plaid 的相关类和函数: class DesignerNewsInjector { fun providesApi...我们为依赖注入需求选择了 Dagger 意味着我们的依赖图在编译阶段会被创建。下面的章节中要记住这一点。...依赖图解 当为一个单块应用引入依赖注入库时,通常整个应用有个单一的依赖图。 这可以使组件间共享依赖。在一些库中,依赖可以被设置作用域来避免冲突,或者为被注入对象提供一种特殊的实现。...引入的功能模块边界通过分离的依赖图反映在依赖注入中。意识到这个限制可有助于为共享组件找到合适的位置。 你可以深入到代码中来查看我们如何使用 Dagger 解决 Plaid 中的依赖注入问题。
Redis中有三种处理策略:定时删除、惰性删除和定期删除。 定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。...惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程为:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil(空)。...三、主从服务器删除过期键处理 参考书上说的有三种:RDB持久化、AOF持久化和复制功能。 RDB: 1....主服务器模式运行在载入RDB文件时,程序会检查文件中的键,只会加载未过期的,过期的会被忽略,所以RDB模式下过期键不会对主服务器产生影响。 2....从服务器运行载入RDB文件时,会载入所有键,包括过期和未过期。当主服务器进行数据同步的时候,从服务器的数据会被清空,所以RDB文件的过期键一般不会对从服务器产生影响。
Redis中有三种处理策略:定时删除、惰性删除和定期删除。 定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。...惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程为:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil(空)。...使用定期删除的时候一定要把握好这个删除的时间点。 三、主从服务器删除过期键处理 有三种:RDB持久化、AOF持久化和复制功能。 RDB: 1....主服务器模式运行在载入RDB文件时,程序会检查文件中的键,只会加载未过期的,过期的会被忽略,所以RDB模式下过期键不会对主服务器产生影响。 2....从服务器运行载入RDB文件时,会载入所有键,包括过期和未过期。当主服务器进行数据同步的时候,从服务器的数据会被清空,所以RDB文件的过期键一般不会对从服务器产生影响。
1.2 缓存雪崩发生的原因 缓存雪崩通常是由以下原因引起的: 缓存过期时间设置不合理:如果缓存中的数据在同一时间点过期,那么大量请求就会直接访问数据库。...缓存服务器宕机:当缓存服务器宕机时,无法提供缓存服务,请求会直接落到数据库上。...1.3 处理缓存雪崩的解决方案 为了应对缓存雪崩问题,可以采取以下解决方案: 设置合理的缓存过期时间:合理设置缓存的过期时间,避免大量缓存在同一时间点失效。...实时监控缓存状态:通过监控工具实时监测缓存的状态,及时发现问题并进行处理。 增加服务端熔断或者限流。...缓存空对象:当数据库中不存在某个数据时,将空对象缓存起来,避免重复请求数据库。
缓存空对象 如果一个查询返回的数据为空(无论是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。 ...第一,空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间 ( 如果是攻击,问题更严重 ),比较有效的方法是针对这类数据设置一个较短的过期时间(最长不超过五分钟),让其自动剔除。 ...第二,缓存层和存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。...例如过期时间设置为 5分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层和存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层中的空对象。...四、缓存热备 缓存热备即当一台缓存服务器不可用时能实时切换到备用缓存服务器,不影响缓存使用。集群模式下,每个主节点都会有一个或多个从节点来当备用,一旦主节点挂点,从节点立即充当主节点使用。
Redis 持久化、搭建集群、数据备份和恢复、合理的设置过期时间 5、Redis的持久化方式有哪些、谈谈它们的区别?...volatile-ttl:从已设置过期时间的数据集(即带有 TTL 的 key)中挑选即将过期的数据淘汰。...volatile-random:从已设置过期时间的数据集(即带有 TTL 的 key)中随机选择数据淘汰。...办法设置热点数据永不过期:将一些热点数据设置为永不过期,这样即使缓存失效,也不会导致请求直接穿透缓存,而是会在缓存中重新加载数据。...缓存雪崩问题可以通过以下几种方式来解决:缓存数据过期时间随机化:将缓存数据的过期时间随机化,避免同时失效,分散缓存的更新时间,减少缓存失效的风险。
它实际上是一个很长的二进制向量(位图)和一系列随机映射函数(哈希函 数)。 布隆过滤器可以用于检索一个元素是否在一个集合中。...缓存空值 如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null)进行缓存,用于处理后续这个请求,设置空结果的过期时间会很短,最长不超过五分钟。...解决这个缺陷的方式就是设置较短过期时间 即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。...进行实时监控 当发现 Redis 的命中率开始急速降低,需要排查访问对象和访问的数据,和运维人员配合,可以设置黑名单限制服务。...其实集中过期,倒不是非常致命,比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。因为自然 形成的缓存雪崩,一定是在某个时间段集中创建缓存,这个时候,数据库也是可以顶住压力的。
清空策略:FIFO/LFU/LRU/过期时间/随机 FIFO:最先进入缓存的数据,在缓存空间不足时被清除,为了保证最新数据可用,保证实时性 LFU(Least Frequently Used):最近最不常用...业务需求也决定了实时性的要求,直接影响到过期时间和更新策略,实时性要求越低越适合缓存。 2.缓存的设计(策略和粒度) 通常情况下缓存的粒度越小,命中率越高。...适用场景: 1.取最新N个数据的操作 2.排行榜类似的应用 3.精准设定过期时间的应用 4.计数器的应用 5.唯一性检查 6.实时系统,队列系统,最基础的缓存功能 ?...1缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策略。...可以通过下面的几种常用方式来避免缓存传统问题: 缓存空对象 对查询结果为空的对象也进行缓存,如果是集合,可以缓存一个空的集合(非null),如果是缓存单个对象,可以通过字段标识来区分。
目录 一、缓存穿透 解决方案: 二、缓存雪崩 解决方案: 三、缓存击穿 解决方案: ---- 在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响...,意味着缓存层中存了更多的键,需要更多的内存空间,比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。...例如过期时间设置为5分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层和存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层中的空对象 2....这种方法适用于数据命中不高、数据相对固定、实时性低的应用场景,代码维护较为复杂,但是缓存空间占用少。 布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。...布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
北京时间 9 月 23 日凌晨 4 点半,数百辆汽车停在特斯拉的加州弗利蒙特工厂,等着看一场「露天发布会」。 ? 这是特斯拉股东大会暨电池日活动的现场。...马斯克表示,特斯拉还计划在德国格伦海德市(Grünheide)的工厂生产电池,该工厂目前正在建设中。...在今年 5 月份披露的无极耳电池新专利申请中,特斯拉解释了当前有极耳电池的局限性:「当前的电池使用果冻卷式设计(即将多层材料平面层压成薄片之后再卷起来,然后塞进一个圆柱形的微型容器里),将阴极、阳极和隔板卷在一起...此外,特斯拉表示,新款 Model S Plaid 在任何量产车型中表现出最快的零百加速和四分之一英里加速,其中零百加速时间少于 2 秒,四分之一英里加速少于 9 秒。 ?...目前,Model S Plaid 可以选择五种车身颜色,分别是珍珠白、纯黑、金属银、深蓝和红色。轮胎型号则有 19 寸 Tempest 轮胎和 21 寸 Sonic Carbon 双涡轮轮胎可选。
领取专属 10元无门槛券
手把手带您无忧上云