首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis实现信息状态提示

前提: 假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息 思路如下: 使用hash存储用户上次看过的时间,使用sortedset存储每个模块的每个信息产生的时间...获取某个分类下的上次操作时间         String s = map.get(value);         if (StringUtils.isBlank(s)) {             //如果不存在,则设为有新信息...            dataMap.put(value, "1");         } else {             //计算从上次操作时间到现在的新的信息数量             ...=null){         //归还连接     } } 当有新的信息产生,向相关模块添加时间: Jedis jedis=null; //c1模块有新的信息 String cid="c1"; try...=null){         //归还连接     } } 当用户点击某个模块时,更新用户查看该模块的上次时间: Jedis jedis=null; //c1模块有新的信息 String cid="c1

2.5K100

Redis实现信息状态提示

前提: 假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息 思路如下: 使用hash存储用户上次看过的时间,使用sortedset存储每个模块的每个信息产生的时间...获取某个分类下的上次操作时间         String s = map.get(value);         if (StringUtils.isBlank(s)) {             //如果不存在,则设为有新信息...            dataMap.put(value, "1");         } else {             //计算从上次操作时间到现在的新的信息数量             ...=null){         //归还连接     } } 当有新的信息产生,向相关模块添加时间: Jedis jedis=null; //c1模块有新的信息 String cid="c1"; try...=null){         //归还连接     } } 当用户点击某个模块时,更新用户查看该模块的上次时间: Jedis jedis=null; //c1模块有新的信息 String cid="c1

3.2K60
您找到你想要的搜索结果了吗?
是的
没有找到

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

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

3.1K10

面试题:群聊消息的设计

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

1.9K41

钉钉消息咋实现的嘞?

前言 一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已功能,包括多少个,这个是怎么实现的呢?...所有,判断有没有小红点,或者小红点的数字是多少,就是简单的获取你与虚拟人的对话的的消息的数量。...这个队列有基本的信息:参与人(图中的例子只有2个,你和“虚拟人”),maximal_msg_id。...可以是MySQL,nosql,hbase,redis。一般我们是混合存储,特别老的存hbase,比较老的存mysq或nosql,新数据存redis。云厂商也有专门针对这类场景的存储产品。...""。它包含两层意思,一个判否,即内容你是否读过,二是计数,即这个内容有多少人读过。 长尾原因 如果你用Redis存储,成本非常高,浪费非常严重。

42810

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

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

3.7K30

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老板的消息不能假装没看到了...仔细分析,按照目前的设计,每一条消息,详情就要占用8B * 群成员数的内存,如果一个活跃的200人大群,每发一条消息,就要1600B,如果平均每天消息量是1k,那每个这样的群,每天就要1.6MB...比如C退出群,发消息时maxid还是5,+总人数应该是3(不包括发消息者本人),目前信息只有5个bit(0/1),识别不出来谁已经退出群聊了 退出群聊的成员如何处理?...详情存储 {maxid, readbit[], quitbit[]} 新的方案带来怎样的收益呢?...增加自增mapid字段,一个群聊维护一份,成本几乎可以忽略不计 每个成员由8B(64bit)优化成2bit,减少62/64, 200人旧的方案1600B, 现在只需要(200/8) *

1.5K40

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

那么,对于状态: 1)如果是私聊:消息的阅读状态比较容易实现,在性能和存储上也不存在问题; 2)如果是群聊:考虑到存储和处理性能,特别当处于一个云环境时,如何高效地处理群聊的状态是一个非常值得探讨的话题...如果你对IM中的功能有产品方面的痛点困惑,可以参考一下微信对功能的设计定位,详见《IM热门功能思考:为什么微信里没有消息“”功能?》。...对群聊而言,显示的信息可能是n人的提示,那么需要向服务端查询消息的人数,由于客户端可能在UI显示自己发出的多条消息,需支持一次请求查询多条消息。...就像下面这样: 1)对于私聊:如果人数n>0,表示消息; 2)对于群聊:直接显示n人即可,当然,当n等于0时表示全部。...4.3 查询群消息的人员清单(群聊) 当客户端希望显示某一条群聊消息的人员列表,需向服务端发起查询。

5.6K50

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

MySQL的四种事务隔离级别依次为:提交(Read Uncommitted)、已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)...提交(Read Uncommitted)提交是最低的隔离级别,允许一个事务读取并使用另一个事务尚未提交的修改。因此,在该级别下可能会发生脏问题。...脏是指在并发执行的两个事务中,一个事务读到了另一个事务尚未提交的数据。在读提交的情况下,如果一个事务对数据进行了修改,但是还没有提交,则另一个事务读取该数据时可能会得到错误的结果。...因此,提交级别并不安全,不建议使用。已提交(Read Committed)在读已提交级别下,一个事务只能读取到已经提交的其他事务所修改过的数据。因此,该级别解决了脏问题。...总结MySQL提供了四种事务隔离级别,提交是最低的级别,因为它存在脏问题。已提交解决了脏问题,但是仍然存在不可重复读和幻问题。可重复读解决了不可重复读问题,但是仍然存在幻问题。

2.8K10

Redis设计与实现》简

一、数据结构与对象 简单动态字符串(SDS) 相比C字符串增加记录字符串长度的,获取字符串长度复杂度为O(1) 相比C字符串增加记录分配内存空间,可以避免缓冲区溢出 空间预分配和空间惰性释放 二进制安全...(惰性释放,避免以后需要增长操作时重分配内存,会在较短的时间内造成内存浪费,文中提及何时是“需要时”) 最佳实践:因为对字符串的增长或缩短操作都有可能需要执行内存重分配,所以修改相同键使用SDS类型保存的值时保持修改前后长度一致...的主从模式(主写从),如果使用类似Mysql主从的用法时需注意过期数据在一定时间内可能是脏数据。...AOF文件,该文件减少了很多不再需要的命令因此文件体积更小 事件 Redis是由时间事件和文件事件组成的事件驱动程序 文件事件处理器是基于Reactor模式实现的网络通信程序,事件分为事件、写事件 时间事件分为定时事件...命令的结果进行排序 创建可以提供更多详细错误信息的错误报告辅助函数redis.pcall 保护Lua环境的全局变量,防止执行脚本过程中修改全局变量 将修改完成后的Lua环境保存到服务器状态的Lua属性中

1.3K50

Redis设计与实现》简

一、数据结构与对象 简单动态字符串(SDS) 相比C字符串增加记录字符串长度的,获取字符串长度复杂度为O(1) 相比C字符串增加记录分配内存空间,可以避免缓冲区溢出 空间预分配和空间惰性释放 二进制安全...(惰性释放,避免以后需要增长操作时重分配内存,会在较短的时间内造成内存浪费,文中提及何时是“需要时”) 最佳实践:因为对字符串的增长或缩短操作都有可能需要执行内存重分配,所以修改相同键使用SDS类型保存的值时保持修改前后长度一致...的主从模式(主写从),如果使用类似Mysql主从的用法时需注意过期数据在一定时间内可能是脏数据。...AOF文件,该文件减少了很多不再需要的命令因此文件体积更小 事件 Redis是由时间事件和文件事件组成的事件驱动程序 文件事件处理器是基于Reactor模式实现的网络通信程序,事件分为事件、写事件 时间事件分为定时事件...命令的结果进行排序 创建可以提供更多详细错误信息的错误报告辅助函数redis.pcall 保护Lua环境的全局变量,防止执行脚本过程中修改全局变量 将修改完成后的Lua环境保存到服务器状态的Lua属性中

1.3K80

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.7K30

《理解生物信息学》

跟着运来兄搭建自己的生物信息小书房。趁年轻,几本硬书,到老了慢慢反刍。 思想就像基因一样,需要通过表达来传播和互相吸引,并且生成新的东西。...生物信息学不只是画图那么简单,而《理解生物信息学》就是为那些想进一步理解生物信息学的好奇者准备的礼物。说起这个礼物,大约是在2017年的某个周末一个加班的下午,在一位同事工位上偶遇的。...这本书为我后来进一步理解生物信息打下了基础,让我读懂一行行代码中蕴含的生物信息。比如: 如何基于序列预测基因? 为什么16SrRNA/ITS扩增子可以用来注释微生物?...可以是说这本书的内容是对我生物信息学背景知识的补充和扩展,特别是对一个半路出家的生物信息学工作者而言。...这不像《细胞分子生物学》那样讲的全是生物的知识,也不是《R语言数据科学》那样讲的全是编程的技巧,《理解生物信息学》是一本真正意义上的生信书籍。

57420

这次彻底Redis,网友:已收藏!

所以,如果你需要发送大量的命令,最好是把他们按照合理数量分批次的处理,例如10K的命令,回复,然后再发送另一个10k的命令,等等。...,但是依然没有解决锁过期释放,但是业务还没有执行完成的问题 Redisson框架 方案四中并没有解决方法执行完成,锁就超时释放的问题。...Redis 集群实战 环境: Vmware 虚拟机 CentOS 7 Redis 6.0.6 因为我是在本机上演示的,所以用的虚拟机 主从复制 集群信息如下: 节点 配置文件 端口 master redis6379....conf 6379 slave1 redis6380.conf 6380 slave1 redis6381.conf 6380 第一步:准备三个 redis.conf 配置文件,配置文件信息如下 #.../bin/redis-sentinel sentinel3.conf 从哨兵的启动日志中我们可用看到主从服务器的信息,以及其他哨兵节点的信息 故障转移 主从同步功能上面已经演示过了,这里主要测试一下哨兵的故障转移

41440

知乎服务的前生今世与未来

知乎通过个性化首页推荐的方式在海量的信息中高效分发用户感兴趣的优质内容。...为了避免给用户推荐重复的内容,服务会将所有知乎站上用户深入阅读或快速掠过的内容长期保存,并将这些数据应用于首页推荐信息流和个性化推送的读过滤。 业务场景,技术挑战 ?...内容过滤作为首页信息流推荐中对响应时间影响较大的关键任务点,它的可用性和响应时间都需要满足非常高的要求。...最初我们在Redis 集群上使用 BITSET 结构直接存储读数据的 BloomFilter。首先由于缺乏多个位的批量操作,操作放大非常严重会消耗非常多的计算资源。...on Redis Cluster ● 易扩展 ● ✓HBase ● ✘BloomFilter on Redis Cluster 下面就让我们一起从高可用、高性能和易扩展这三个角度来思考如何构建一个更好的服务满足好业务的需求和挑战

79110

IM群聊消息的回执功能该怎么实现?

答:可以利用群消息的偏序关系,记录每个成员的last_ack_msgid(last_ack_time),这条消息之前的消息,这条消息之后的消息。...对于离线的群友,会在下一次登录时,拉取的所有群离线消息,并将last_ack_msgid修改为最新的一条消息。 核心问题4:如果ack丢失,群友会不会拉取重复的群消息?...上述流程,只能确保接收方收到消息,发送方仍然不知道哪些人在线阅读了消息,哪些人离线阅读消息,并没有实现已回执,那回执会对系统设计产生什么样的影响呢?...对于发送方发送的任何一条群消息,都需要知道,这条消息有多少人多少人,就需要一个基础表来记录这个关系。...8、本文小结 对于群消息回执,一般来说: 如果发送方在线,会实时被推送回执; 如果发送方不在线,会在下次在线时拉取回执。

4.8K20
领券