Redis实现信息已读未读状态提示_Redis

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

前提:

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

思路如下:

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

上代码:

Map<String, String> dataMap = new HashMap<>();

Jedis jedis=null;
String uid="1";//用户id
//分类数组
String []cagoryArray={"c1","c2"};
try {
  //连接池获取连接 jedis=
  //此处获取用户的操作时间集合
  Map<String, String> 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){
    //归还连接
  }
}

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Redis信息已读未读
qq 未读消息实现原理、js 实现未读消息提醒、php 实现消息已读未读、未读消息计数实现原理、android 实现未读消息,以便于您获取更多的相关知识。

时间: 2024-09-20 07:44:50

Redis实现信息已读未读状态提示_Redis的相关文章

环信能做类似陌陌已读未读的回执么?

问题描述 1. 发现数据库没有is_read这样的字段来标记发送的信息是否是已读或者未读2. 确实能够调用ackMessageRead(android)发送回执给对方,发送方也可以监听得到,如果app打开着这一切都没问题.但如果对方没有打开app,服务器是否有缓存此ack,不然已读未读并不准确.3. 发现文档EaseUI使用指南里有此种场景,但是真正下载的demo里好像没有,ui隐藏掉了,实现上也并不可行4. 不知道是否可行 解决方案 在初始化设置已读未读回执// 获取到EMChatOption

钉钉如何查看发送的消息接收方是否已读/未读?

  我要收款:指通过实名认证的用户只需要知道对方的支付宝账户(邮箱.手机)就可以向对方进行收款的业务 . 付款方付款成功后款项将直接到达收款方账户 .

短信功能-android 短信未读状态变为已读状态

问题描述 android 短信未读状态变为已读状态 我的APP,想要在会话列表那儿,点一个联络人,然后进入到与该人的所有聊天对话界面,在该界面里,我希望对方发来的简讯都变为已读状态我是这样写的cur_smsdetail_qcontact = new CursorWrapper(cur_smsdetail) { public String getString(int columnIndex) { if (super.getColumnIndex(""address""

前端开发-怎么让已读和未读的邮件的字体格式上有区别(未读加粗)

问题描述 怎么让已读和未读的邮件的字体格式上有区别(未读加粗) 已读和未读的代码如下,请问是在哪里进行设置 <c:if test="${(type == 'seeUnread') ||(type == 'seeRead')}"> <span class="unable"><a href="<%=basePath%>user/receive!seeMail.action?folderType=${ft}&pa

php rest api 如何获取未读消息和更改消息未读状态

问题描述 解决方案 rest没有接口,未读消息是客户端的操作解决方案二:webim有消息的未读状态吗,如何获取和修改解决方案三:webim没有未读已读等状态

如何更新消息状态为未读?

问题描述 本帖最后由 infinity8942 于 2015-4-28 11:21 编辑 我想把已经收到并阅读过的的消息,标记成未读状态.EMMessage message = conversationList.get(position).getLastMessage();message.setUnread(true);EMChatManager.getInstance().updateMessageBody(message);Log.d("test","~unread co

iphone5/5s的未读邮件快速变成已读邮件(ios7)

在iphone5升级到ios7后,会发现这一状况得到了极大的改进,在邮件的列表页面就可以对邮件内容进行各种操作,当然,也包括将所有未读邮件全部设置为已读.            将单个未读邮件设置成已读的方法:            1.点击手机桌面的"邮件"图标.                   2.开启邮箱后,在收件箱的邮件列表界面,从右向左轻轻滑动某一个邮件的标题,这时会出现"删除"和"更多"两个按钮图标,选择"更多"

Lotus在C#中如何将邮件由未读变为已读

问题描述 在.net环境用Domino,现在已经做到收取.发送邮件的功能了,但是有一个需求,需要把收到的邮件由未读变为已读,请问如何用C#来写?谢谢...

Android 高仿QQ滑动弹出菜单标记已读、未读消息

  在上一篇博客<Android 高仿微信(QQ)滑动弹出编辑.删除菜单效果,增加下拉刷新功能>里,已经带着大家学习如何使用SwipeMenuListView这一开源库实现滑动列表弹出菜单,接下来,将进一步学习,如何为不同的list item呈现不同的菜单,此处我们做一个实例:Android 高仿QQ滑动弹出菜单标记已读.未读消息,看下效果图: 1. 创建项目,并导入SwipeMenuListView类库 2. 创建消息实体bean: public class Msg { public int