首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    群聊消息“已读”“未读” 功能解决方案!

    x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户对应一个唯一的userid...(uint64_t),应该如何保存这个消息对应的已读未读详情呢?...仔细分析,按照目前的设计,每一条消息,已读未读详情就要占用8B * 群成员数的内存,如果一个活跃的200人大群,每发一条消息,已读未读就要1600B,如果平均每天消息量是1k,那每个这样的群,每天就要1.6MB...其实未读已读就是一个0/1的标记而已,可以维护一个bitmap来实现呢?具体应该怎么做呢?...增加自增mapid字段,一个群聊维护一份,成本几乎可以忽略不计 每个成员已读未读由8B(64bit)优化成2bit,减少62/64, 200人已读未读旧的方案1600B, 现在只需要(200/8) *

    3.2K10

    钉钉消息已读、未读咋实现的嘞?

    前言 一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已读、未读功能,包括多少个未读,这个是怎么实现的呢?...所有,判断有没有小红点,或者小红点的数字是多少,就是简单的获取你与虚拟人的对话的未读的消息的数量。...这个队列有基本的信息:参与人(图中的例子只有2个,你和“虚拟人”),maximal_msg_id。..."已读和未读"。它包含两层意思,一个判否,即内容你是否读过,二是计数,即这个内容有多少人读过。 长尾原因 如果你用Redis存储,成本非常高,浪费非常严重。...这个时候,通常的策略是"[log record]"和"comb", 我们每产生一个动作,比如读,赞,收藏,就会产生一个log record( 取关,取消赞...也是一条独立的log record),我们由专门的大数据系统统一收集这些

    53310

    面试题:群聊消息的已读未读设计

    一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成...x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户对应一个唯一的userid...(uint64_t),应该如何保存这个消息对应的已读未读详情呢?...仔细分析,按照目前的设计,每一条消息,已读未读详情就要占用8B * 群成员数的内存,如果一个活跃的200人大群,每发一条消息,已读未读就要1600B,如果平均每天消息量是1k,那每个这样的群,每天就要1.6MB...1、增加自增mapid字段,一个群聊维护一份,成本几乎可以忽略不计 2、每个成员已读未读由8B(64bit)优化成2bit,减少62/64, 200人已读未读旧的方案1600B, 现在只需要(200/8

    2K41

    Google Gmail邮箱一次性标记所有未读邮件为已读

    Google Gmail邮箱一次性标记所有未读邮件为已读 Google Gmail邮箱一次性标记所有未读邮件为已读   和许多 Gmail 用户一样,您的收件箱中也可能塞满了数百甚至数千封未读电子邮件...,有时很难知道您何时收到新邮件,   这个时候就需要设置将所有的未读邮件标记为已读,但是,Gmail邮箱不像我们使用的QQ邮箱操作那么方便,会限制一次只能标记一页邮件最多100封邮件,那对于有4000-...5000封邮件的用户无疑是个灾难,本文 晓得博客 为你介绍 Google Gmail 邮箱一次性标记所有未读邮件为已读的方法。...然后您将在顶部看到一条通知,指出“ 已选择此页面上的所有 100 个对话。选择收件箱中的所有 XXX 个对话 ”,最后一部分应显示为链接。...晓得博客,版权所有丨如未注明,均为原创 晓得博客 » Google Gmail邮箱一次性标记所有未读邮件为已读 转载请保留链接:https://www.pythonthree.com/how-to-mark-an-entire-gmail-inbox-as-read

    4.6K30

    WEBIM未读计数不对?

    确认是否开启自动已读上报,Server默认删除未读消息,切换终端、杀进程和退出登录未读数会被清除,如果需要保留可以禁用已读上报disableAutoReport。...离线消息未读数统计是根据离线消息进行统计,而离线消息有容量限制,如果容量超过会删掉老的未读消息,平均存储100条消息左右,消息内容越多,存储的越少。...web端未读计数统计 ALL ON ONE 的原则,一开始登录的第一条最近联系人的会话是不显示未读计数的 群未读计数初始值 web端群消息未读计数初始是通过最近联系人接口返回 登录成功后收到的群消息未读计数做加一的处理...C2C未读计数初始值 web端的未读计数是先获取到最近联系人的所有会话,然后sdk里面会将getmsg里面返回的未读消息对应之前的会话来做加一处理用来统计未读消息数 统计之后的未读计数用webim.MsgStore.sessMap...()i.unread()去显示 登录之后的未读计数根据消息监听做加一处理 //初始化最近会话的消息未读数 function initUnreadMsgCount(){ var sess;

    1.5K50

    面试官:群聊消息的已读未读功能,你来设计一个?

    ,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了...上就好了,客户端更新到messageid对应的详情列表,就可以展示m人已读,n人未读 显然这么简单粗暴的方案面试官是不会满意的,追问有没有更好的方案呢?...仔细分析,按照目前的设计,每一条消息,已读未读详情就要占用8B * 群成员数的内存,如果一个活跃的200人大群,每发一条消息,已读未读就要1600B,如果平均每天消息量是1k,那每个这样的群,每天就要1.6MB...增加自增mapid字段,一个群聊维护一份,成本几乎可以忽略不计 每个成员已读未读由8B(64bit)优化成2bit,减少62/64, 200人已读未读旧的方案1600B, 现在只需要(200/8) *...6.0将停止支持Freemarker和JSP Log4j2又爆雷!

    1.6K40

    IM群聊消息的已读未读功能在存储空间方面的实现思路探讨

    那么,对于已读未读状态: 1)如果是私聊:消息的阅读状态比较容易实现,在性能和存储上也不存在问题; 2)如果是群聊:考虑到存储和处理性能,特别当处于一个云环境时,如何高效地处理群聊的已读未读状态是一个非常值得探讨的话题...对群聊而言,显示的信息可能是n人未读的提示,那么需要向服务端查询消息的未读人数,由于客户端可能在UI显示自己发出的多条消息,需支持一次请求查询多条消息。...就像下面这样: 1)对于私聊:如果未读人数n>0,表示消息未读; 2)对于群聊:直接显示n人未读即可,当然,当n等于0时表示全部已读。...4.3 查询群消息的已读、未读人员清单(群聊) 当客户端希望显示某一条群聊消息的已读、未读人员列表,需向服务端发起查询。...客户端获取此消息的数据: 1)当需要获取未读人数时,直接计算unread_list的个数; 2)当需要获取已读、未读人员列表时,直接返回unread_list和read_list。

    5.9K50

    MySQL事务隔离级别:读未提交、读已提交、可重复读和串行

    MySQL的四种事务隔离级别依次为:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)...读未提交(Read Uncommitted)读未提交是最低的隔离级别,允许一个事务读取并使用另一个事务尚未提交的修改。因此,在该级别下可能会发生脏读问题。...因此,读未提交级别并不安全,不建议使用。读已提交(Read Committed)在读已提交级别下,一个事务只能读取到已经提交的其他事务所修改过的数据。因此,该级别解决了脏读问题。...但是,在该级别下仍然存在不可重复读和幻读问题。不可重复读是指在同一个事务中,由于其他事务的干扰,导致同一查询语句返回的结果不同。...总结MySQL提供了四种事务隔离级别,读未提交是最低的级别,因为它存在脏读问题。读已提交解决了脏读问题,但是仍然存在不可重复读和幻读问题。可重复读解决了不可重复读问题,但是仍然存在幻读问题。

    6.7K10

    Node + WebSocket + Vue 一对一、一对多聊天室消息已读未读 – 第四章

    这里就加了一个非常小的改动,加了一个tips-numtips,先展示未读消息。...服务端就在发送消息的地方增加一个字段,status:1来表示未读。 WebSocket客户端 由UI界面的代码可以看出,我们调用了一个getMsgNum方法来展示未读消息数量。...1、参数user没有值时,表示是获取群消息未读,判断messageList里面的没有bridge(即是群聊消息),并且status为1(即未读) 2、如果有user时,获取对应用户未读消息,判断messageList...里面的有bridge(即是用户对话消息)、uid相等,并且status为1(即未读) 3、打开的是当前对话,即将当前对话的消息状态status改为0(已读) data.map(item=>{ item.status...总结 消息未读,主要是判断状态,然后搞清楚对象,是谁发的消息没有读。已读,就很简单了,就是当前展示的消息列表都改成已读,所以直接把currentMessage列表的消息改成已读即可。

    1.8K30

    脏读、不可重复读和幻读现象

    这种最小的逻辑指令对应到数据库中就是事务,事务包含原子性(Atomicity)、一致性(Consistency)、一致性(Consistency)和持久性(Durability)。...而由于一个事务在机器层面可能需要几条指令完成,这也意味着它在并发时会出现如下问题:脏读、不可重复读和幻读,下面以MySQL为例详细介绍在什么情况下可能会出现上述问题。...Read uncommitted(读未提交) 此事务隔离级别会出现脏读现象*(事务的修改,即使没有提交,其他事务也能看的到),不建议在生产环境中去使用。...注意:我们需要手动开启事务(begin)和提交事务(commit),不然MySQL会自动提交事务。...Serializable(串行化) 串行化解决了脏读、不可重复读、幻读现象,但是效率会比较低下。从MVCC并发控制退化为基于锁的并发控制。不区分快照读与当前读,所有的读操作均为当前读。

    1K20

    什么是脏读、幻读和不可重复读?

    幻读和不可重复读?...脏读(Dirty Read)脏读指的是一个事务读取了另一个事务尚未提交的数据。举个例子,假设张三正在执行一个事务,在事务未提交之前,他读取了李四的事务中的某个数据。...如何解决脏读、幻读和不可重复读问题?下面是一个简单的示例代码,演示了如何通过使用事务和行级锁来解决脏读、幻读和不可重复读的问题。...读未提交(Read Uncommitted):最低级别的隔离,允许脏读、幻读和不可重复读。事务可以读取其他事务未提交的数据,会导致数据的不一致性。...这解决了幻读和不可重复读的问题。数据库使用锁机制来阻止其他事务对数据进行修改。可串行化(Serializable):最高级别的隔离,确保事务串行执行,完全消除了脏读、幻读和不可重复读的问题。

    3.6K10

    Python open 读和写

    'rb') # print(file.read()) # # b'aaadefg' # file.close() # w # 打开一个文件只用于写入,写入内容为str # 文件不可读 # 如果该文件已存在则将其覆盖...open('text.txt') # print(file.read()) # file.close() # ab # 以二进制格式打开一个文件用于追加(只写),写入内容为bytes # 如果该文件已存在...file = open('text.txt') # print(file.read()) # file.close() # a+ # 打开一个文件用于追加(读写),写入内容为str # 如果该文件已存在...open('text.txt') # print(file.read()) # file.close() # ab+ # 以二进制格式打开一个文件用于追加(读写),写入内容为bytes # 如果该文件已存在...b'aaa') # file.close() # file = open('text.txt') # print(file.read()) # file.close() 参考python open 关于读、

    70120

    快速理解脏读、不可重复读、幻读和MVCC

    脏读(读取未提交数据) A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。...Read uncommitted 读未提交 公司发工资了,领导把5000元打到singo的账号上,但是该事务并未提交,而singo正好去查看账户,发现工资已经到账,是5000元整,非常高 兴。...不可重复读和脏读的区别是:脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。...幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。 4....(Read committed)和可重复读(Repeatable Read). 2.Read uncimmitted由于存在脏读,即能读到未提交事务的数据行,所以不适用MVCC.

    64.2K2616

    【Spring】——Spring简单 读和取

    注册到容器这一步中,如果Bean对象过多,在注册到容器时,我们有几个Bean对象就需要几行注册,在实际开发中这是非常麻烦的,我们需要有更简单的方法去实现这一过程,这便是本篇文章的主题——Spring简单 读和取...一、存储Bean对象[读] 在Spring中我们可以使用注解存储和读取Bean对象,而其中我们有两种注解类型可以实现这个功能。...1、配置扫描路径 但是在使用注解去进行存储和读取Bean对象之前,我们还需要进行配置扫描路径。在spring-config.xml中添加如下配置: 和用途,使得开发者可以根据需求选择合适的注解来使用,也可以让程序员看到类注解之后,就能直接了解当前类的用途,比如: @Controller(控制器...@Autowired 可用于 Setter 注入、构造函数注入和属性注入,而@Resource 只能用于 Setter 注入和属性注入,不能用于构造函数注入。

    18340

    一文详解幻读、脏读和不可重复读

    一、简介 经常有面试官提出这么一个问题:什么是脏读、不可重复读和幻读?...事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。...二、场景分析 2.1、脏读 所谓的脏读,指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会保存到数据库,也可能会回滚,不保存到数据库。...当数据库的事务隔离级别为读未提交,就会发生脏读现象! 2.2、不可重复读 不可重复读,指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况。...当数据库的事务隔离级别为读未提交、读提交时,就会发生不可重复读现象! 2.3、幻读 幻读和不可重复读,有点类似,但是表达的侧重点不一样。

    51540
    领券