Redis實(shí)現(xiàn)信息已讀未讀狀態(tài)提示
本文為大家分享了Redis實(shí)現(xiàn)信息已讀未讀狀態(tài)提示的關(guān)鍵代碼,希望可以給大家一些啟發(fā),具體內(nèi)容如下
前提:
假如現(xiàn)在有2個(gè)模塊需要提示消息:只要存在用戶在上個(gè)時(shí)間點(diǎn)之后沒有看過的信息就提示用戶有新的信息
思路如下:
使用hash存儲用戶上次看過的時(shí)間,使用sortedset存儲每個(gè)模塊的每個(gè)信息產(chǎn)生的時(shí)間
上代碼:
Map<String, String> dataMap = new HashMap<>();
Jedis jedis=null;
String uid="1";//用戶id
//分類數(shù)組
String []cagoryArray={"c1","c2"};
try {
//連接池獲取連接 jedis=
//此處獲取用戶的操作時(shí)間集合
Map<String, String> map = jedis.hgetAll("u-key-"+uid);
if (map == null) {
map = new HashMap<>();
}
for (String value : cagoryArray) {
//獲取某個(gè)分類下的上次操作時(shí)間
String s = map.get(value);
if (StringUtils.isBlank(s)) {
//如果不存在,則設(shè)為有新信息
dataMap.put(value, "1");
} else {
//計(jì)算從上次操作時(shí)間到現(xiàn)在的新的信息數(shù)量
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){
//歸還連接
}
}
當(dāng)有新的信息產(chǎn)生,向相關(guān)模塊添加時(shí)間:
Jedis jedis=null;
//c1模塊有新的信息
String cid="c1";
try {
//連接池獲取連接 jedis=
//添加到sortedset結(jié)果 權(quán)重為時(shí)間毫秒
long currentTimeMillis = System.currentTimeMillis();
jedis.zadd("c-key-"+cid, currentTimeMillis, String.valueOf(currentTimeMillis));
}finally {
if(jedis!=null){
//歸還連接
}
}
當(dāng)用戶點(diǎn)擊某個(gè)模塊時(shí),更新用戶查看該模塊的上次時(shí)間:
Jedis jedis=null;
//c1模塊有新的信息
String cid="c1";
//用戶id
String uid="1";
try {
//連接池獲取連接 jedis=
//添加到sortedset結(jié)果 權(quán)重為時(shí)間毫秒
jedis.hset("u-key-"+uid, cid, String.valueOf(System.currentTimeMillis()));
}finally {
if(jedis!=null){
//歸還連接
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
SpringSession通過Redis統(tǒng)計(jì)在線用戶數(shù)量的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringSession通過Redis統(tǒng)計(jì)在線用戶數(shù)量,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
基于redis實(shí)現(xiàn)分布式鎖的原理與方法
這篇文章主要給大家介紹了基于redis實(shí)現(xiàn)分布式鎖的原理與方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
redis反序列化報(bào)錯(cuò)原因分析以及解決方案
這篇文章主要介紹了redis反序列化報(bào)錯(cuò)原因分析以及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Redis入門教程_動力節(jié)點(diǎn)Java學(xué)院整理
Redis是一款開源的、高性能的鍵-值存儲(key-value store)。下面通過本文大家分享Redis入門教程,感興趣的朋友參考下吧2017-08-08
Linux服務(wù)器安裝redis數(shù)據(jù)庫圖文教程
Redis是一個(gè)開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。這篇文章主要介紹了Linux服務(wù)器安裝redis數(shù)據(jù)庫圖文教程,需要的朋友可以參考下2018-03-03

