前提:
假如现在有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){
//归还连接
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有