常见项目场景题1(数据量很大时如何去重,实现超时处理)

news/2024/9/23 7:56:06/

数据很多,限制内存,如何去重

对于大数据量去重的场景,我们可以考虑使用位图(Bitmap)
Bitmap 是使用二进制来表示某个元素是否存在的数组。用0和1来表示存在与不存在
使用Bitmap的话,一个数字占用1bit,大大减少内存消耗量
Bitmap 的常见应用场景如下

  1. 去重:如果需要对一个大的数据集进行去重操作,使用 Bloom Filter 来记录每个元素是否出现过。比如对巨量的 QQ号/订单号去重。
  2. 数据统计:Bitmap 可以用来记录某些特定事件发生的情况,例如某个用户是否登录某个用户是否点赞过某个视频等
  3. 布隆过滤器:布隆过滤器是一种基于 Bitmap 的数据结构,主要用于判断一个元素是否存在于一个大的集合中。相较于Bitmap,占用的空间更少,但其结果不一定是完全准确的。(所以如果使用了位图去重后,还想进一步节省空间并允许一部分差错,可以使用布隆过滤器)

Redis_8">Redis实现延时任务(订单,红包等超时如何实现)

延时任务常通过Redis 过期事件监听来实现
Redis 过期事件监听实现延时任务功能的原理?
Redis 2.0 引入了发布订阅 (pub/sub) 功能。在 pub/sub 中,引入了 channel(频道)的概念
pub/sub 涉及发布者(publisher)和订阅者(subscriber,也叫消费者)两个角色
运行流程如下:

  1. 发布者通过 PUBLISH 投递消息给指定频道
  2. 订阅者通过 SUBSCRIBE 订阅它需要的频道。订阅者可以订阅多个频道
    在这里插入图片描述

Redis 过期事件监听实现延时任务功能的缺点?
4. 时效性差
过期事件消息是在 Redis 服务器删除 key 时发布的,而不是一个 key 过期之后就会就会直接发布。
过期数据的删除策略有两个:
1.惰性删除:只会在取出 key 的时候才对数据进行过期检査。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。
2.定期删除:每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响
定期删除对内存更加友好,惰性删除对 CPU 更加友好。两者各有干秋, Redis 采用的是定期删除+惰性删除
因此,就会存在到了指定时间 key 还未被删除,进而没有发布过期事件的情况
5. 多服务实例下存在消息重复消息的问题
Redis 的 pub/sub 模式只有广播模式,这意味着当发布者向特定频道发布一条消息
时,所有订阅相关频道的订阅者都能够收到该消息。这时,会出现多个服务实例重复处理消息的问题,这会增加代码开发量和维护难度


http://www.ppmy.cn/news/1529218.html

相关文章

Python | Leetcode Python题解之第429题N叉树的层序遍历

题目: 题解: class Solution:def levelOrder(self, root: Node) -> List[List[int]]:if not root:return []ans list()q deque([root])while q:cnt len(q)level list()for _ in range(cnt):cur q.popleft()level.append(cur.val)for child in c…

医院信息化运维监控:确保医疗系统的稳定与安全

在当今数字化时代,医院的信息化水平直接关系到医疗服务的效率和质量。随着医疗信息化的不断推进,医院对信息化运维监控的需求也日益增强。特别是IT软硬件资源监控和机房动环监控,它们在保障医院信息系统稳定运行中发挥着至关重要的作用。 首先…

大话Python|基础语法(上)

一、单行注释 以下代码输出一个Hello World!字符串 在Python代码中,注释会自动被Python解析器忽略 print(Hello World) 二、多行注释 在Python代码中,注释一共有两种形式; 1、单行注释:注释的内容只有一行 2、多行…

使用思科搭建企业网规划训练,让网络全部互通,使用规则提高工作效率。

1. 企业背景: 某企业分为销售部、行政部、人力资源部、财务部、业务部、接待中心等主要六个部门;配置网管中心,允许网络管理员登录企业交换机和路由器对企业网络进行管理;配置服务器集群,设置FTP、DNS、WEB服务器&am…

DPDK 简易应用开发之路 2:UDP数据包发送及实现

本机环境为 Ubuntu20.04 ,dpdk-stable-20.11.10 发送数据包的通用步骤 初始化DPDK环境: 调用 rte_eal_init() 来初始化DPDK的EAL(环境抽象层),这是所有DPDK应用程序的第一步,用于初始化硬件、内存和逻辑核…

Cocos Creator3.x设置动态加载背景图并且循环移动

效果图 项目结构 项目层级结构: 预制: 代码 import { _decorator, CCFloat, Component, Node, Sprite, instantiate, Prefab, assert, UITransform } from cc; const { ccclass, property } _decorator;/*** 背景脚本*/ ccclass(Background) expor…

使用 HFD 加快 Hugging Face 模型和数据集的下载

Hugging Face 提供了丰富的预训练模型和数据集,而且使用 Hugging Face 提供的 from_pretrained() 方法可以轻松加载它们,但是,模型和数据集文件通常体积庞大,用默认方法下载起来非常花时间。 本文将指导你如何使用 HFD&#xff08…

[mongodb][配置]MongoDB中限制内存

wiredTiger:engineConfig:cacheSizeGB: 2G配置片段是MongoDB中WiredTiger存储引擎的配置参数。这个参数用于设置WiredTiger缓存的大小。下面是对这个配置的解释: wiredTiger: 这是MongoDB使用的存储引擎之一,它提供了高性能的数据压缩和压缩算法&#xf…