本文为大家分享了Redis实现信息已读未读状态提示的关键代码,希望可以给大家一些启发,具体内容如下

前提:

假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息

思路如下:

使用hash存储用户上次看过的时间,使用sortedset存储每个模块的每个信息产生的时间

上代码:

Map dataMap = new HashMap<>();

Jedis jedis=null;

String uid="1";//用户id

//分类数组

String []cagoryArray={"c1","c2"};

try {

//连接池获取连接 jedis=

//此处获取用户的操作时间集合

Map map = jedis.hgetAll("u-key-"+uid);

if (map == null) {

map = new HashMap<>();

}

for (String value : cagoryArray) {

//获取某个分类下的上次操作时间

String s = map.get(value);

if (StringUtils.isBlank(s)) {

//如果不存在,则设为有新信息

dataMap.put(value, "1");

} else {

//计算从上次操作时间到现在的新的信息数量

Long zcount = jedis.zcount("c-key-"+value, Double.parseDouble(s), System.currentTimeMillis());

if (zcount == null || zcount <= 0) {

//不存在或者小于等于0 则没有新的信息

dataMap.put(value, "0");

} else {

dataMap.put(value, "1");

}

}

}

}finally {

if(jedis!=null){

//归还连接

}

}

当有新的信息产生,向相关模块添加时间:

Jedis jedis=null;

//c1模块有新的信息

String cid="c1";

try {

//连接池获取连接 jedis=

//添加到sortedset结果 权重为时间毫秒

long currentTimeMillis = System.currentTimeMillis();

jedis.zadd("c-key-"+cid, currentTimeMillis, String.valueOf(currentTimeMillis));

}finally {

if(jedis!=null){

//归还连接

}

}

当用户点击某个模块时,更新用户查看该模块的上次时间:

Jedis jedis=null;

//c1模块有新的信息

String cid="c1";

//用户id

String uid="1";

try {

//连接池获取连接 jedis=

//添加到sortedset结果 权重为时间毫秒

jedis.hset("u-key-"+uid, cid, String.valueOf(System.currentTimeMillis()));

}finally {

if(jedis!=null){

//归还连接

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

mysql消息已读未读_Redis实现信息已读未读状态提示相关推荐

  1. 未收到服务器返回信息吗,inode 未收到服务器回应

    inode 未收到服务器回应 内容精选 换一换 用户通话结束后,隐私保护通话平台通过此接口向客户推送通话的话单信息.短时间内有多个通话结束时隐私保护通话平台会将话单合并推送,每条消息最多携带50个话单 ...

  2. imap 已读回执_确保同事看到已读回执和延迟提醒电子邮件的“重要电子邮件”...

    imap 已读回执 A lot of people ask how to schedule an email for a certain date and for good reason.  As w ...

  3. 对方服务器已读的邮件无法撤回,撤销已发送的邮件 时遇到的问题.

    楼上的朋友给的信息,非常感谢呀! 谢谢楼上的朋友! 这个答案很完美. 撤回邮件的工作机制 帮助 协助 > Outlook 2003 > 电子邮件 此功能要求使用 Microsoft Exc ...

  4. Mysql在可重复读事务隔离级别下怎么解决幻读的

    目录 前言 并发事务产生的问题 更新丢失 回滚丢失 覆盖丢失 脏读 不可重复读 幻读 快照读和当前读 幻读验证 快照读如何避免幻读 当前读如何避免幻读 可重复读隔离级别发生幻读情况 小结 前言 Mys ...

  5. ISME | 通过长读长宏基因组测序揭示南极土壤未培养细菌的生物合成潜力

    关注我们 一起探索微生物领域的奥妙 摘要 日趋严重的抗生素抗性问题使得研究者们将目光转移到可能是新的抗生素来源的未培养细菌上.扩增子测序与短读测序分析表明宏基因组中存在多样化的生物合成基因簇(BGC) ...

  6. linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?

    问题 在 09 问中,我们开启了 coredump 功能,在 MySQL 崩溃时获得了有用的 coredump 信息. 那如果没开启 coredump,仅有 error log 中的堆栈信息,我们如何 ...

  7. 剑未佩妥,出门已是江湖!聊聊2019学习和工作

    剑未佩妥,出门已是江湖.酒尚余温,入口不识乾坤. 2019年可以说是对我来说是特别重要的一年.正式结束了自己的学生时代,从事了一个自己不讨厌的职业,遇到了一群优秀的人.借年终总结的浪潮,说说对于201 ...

  8. 剑未佩妥,出门已是江湖!聊聊我的2019!

    剑未佩妥,出门已是江湖.酒尚余温,入口不识乾坤. 2019年可以说是对我来说是特别重要的一年.正式结束了自己的学生时代,从事了一个自己不讨厌的职业,遇到了一群优秀的人.借年终总结的浪潮,说说对于201 ...

  9. 国考省考申论:2次阅读法:1读感知材料类型和段落关系,2读根据问题词,原因词,影响词,对策词,关联词把握得分要点

    国考省考申论:2次阅读法:1读感知材料类型和段落关系,2读根据问题词,原因词,影响词,对策词,关联词把握得分要点 2022找工作是学历.能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和 ...

最新文章

  1. linux命令速查手册_干货| 有了这个速查手册,还怕Linux命令记不住?
  2. Z80 CPU的寄存器结构图示
  3. Springboot跨域 ajax jsonp请求
  4. 牙齿间隙变大怎么办_牙齿之间的间隙越来越大怎么办?
  5. 面试官系统精讲Java源码及大厂真题 - 33 CountDownLatch、Atomic 等其它源码解析
  6. 【书单】推荐几本AI好书
  7. unsupported major.monor version 51.0 (unable to load *.servlet)………………
  8. Java基础语法三 输入输出
  9. vue组件库开发(npm包发布)
  10. 解决电脑双网卡不能同时连接内网和外网的问题
  11. C/C++中的五个预定义的宏名
  12. 香港拼音-汉字对照表
  13. iPhone “Ineligible Devices”
  14. OAException Application FND Message Name FND NO DATABASE
  15. SIGMOD 2021 | 时间序列相关论文一览(附原文源码)
  16. 如何利用Slack客户端漏洞窃取Slack用户下载的所有文件
  17. Stern-Brocot树 (生成0-1之间的所有真分数)
  18. Ceph使用系列之——Ceph RGW使用
  19. 如何修改电脑密码(在不知道密码的前提下)
  20. C语言void指针的用法

热门文章

  1. MATLAB信号处理---学习小案例(10)---Z反变换
  2. NLP入门 - 基于Word Embedding + LSTM的古诗生成器
  3. ctrypto-js中,DES解密的iv向量处理
  4. 2018主流服务器cpu,【热门服务器CPU排行榜】2021热门服务器CPU排名_热门服务器CPU排行榜10强-太平洋产品报价...
  5. SQL总结 学期前8周学习内容
  6. Python简单实现人脸识别检测, 对照片进行评分
  7. html5开发wp8,WP7几则消息(HTML5,Sliverlight,WP8)
  8. 高边电流检测测量:电路和原理
  9. 如何利用python调用API接口获取数据进行测试
  10. 华为CE6881端口联动限制