Redis實現了信息的讀-未讀狀態提示,本文將給大家分享Redis實現信息已讀未讀狀態提示的關鍵代碼,希望可以給大家一些啟發,具體內容如下
前提:
假如現在有2個模塊需要提示消息:只要存在用戶在上個時間點之后沒有看過的信息就提示用戶有新的信息
思路如下:
使用hash存儲用戶上次看過的時間,使用sortedset存儲每個模塊的每個信息產生的時間
上代碼:
MapdataMap = 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
當有新的信息產生,向相關模塊添加時間:
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";//用戶idString uid="1"; try { //連接池獲取連接 jedis= //添加到sortedset結果 權重為時間毫秒 jedis.hset("u-key-"+uid, cid, String.valueOf(System.currentTimeMillis())); }finally { if(jedis!=null){ //歸還連接 }}
以上就是Redis實現了信息的讀-未讀狀態提示的全部內容,希望對大家的學習有所幫助,如果有疑問大家可以留言交流。
新聞熱點
疑難解答
圖片精選