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-06Redis入門教程_動力節(jié)點(diǎn)Java學(xué)院整理
Redis是一款開源的、高性能的鍵-值存儲(key-value store)。下面通過本文大家分享Redis入門教程,感興趣的朋友參考下吧2017-08-08Linux服務(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