tft每日頭條

 > 生活

 > 知乎怎麼隻看問答不看文章

知乎怎麼隻看問答不看文章

生活 更新时间:2025-01-09 00:01:58
引言

在很多平台都可以看到自己的最近商品或文章的浏覽記錄,要麼保持最近1000條記錄(如知乎的最近浏覽記錄),要麼是100條,那如何在不創建多餘的表的情況下而直接用緩存達到這個目标呢?

基礎要求極其思路
  • 要求

1.技術選型:redis2.在每次浏覽的時候去緩存中記錄這條記錄的ID3.确保記錄最大條數隻能達到設置的阈值,比如10004.記錄不能重複且按照時間倒序排序,舉例:昨天浏覽的記錄,今天再次浏覽時之前的記錄删除,隻保留今天浏覽的記錄和時間5.持久化,浏覽記錄持久存在

  • 思路

1.使用redis的zset,用戶唯一ID作為key,用戶訪問記錄ID作為value,訪問時間作為分數score2.每次浏覽記錄向該用戶集合中插入一條記錄,插入前判斷是否有舊的記錄,有則删除,然後添加,每次插入的記錄時間戳遞增,借助zset本身的有序性,很容易實現查詢排序翻轉3.插入後獲取總記錄,如果大于阈值,則删除阈值之外更舊的記錄,時間倒序

實現步驟
  • 1.以用戶唯一ID作為redis的key,數據結構使用ZSET,首先插入模拟數據200條,其中value為當前用戶浏覽的記錄ID,score為插入時的時戳,中間有休眠模拟用戶點擊操作,間隔時間為1秒。

Stringkey="wangsr0001"; for(inti=0;i<200;i ){ TimeUnit.SECONDS.sleep(1L); StringrandomChineseName=RandomPersonInfoUtil.getRandomTelephoneNumber(); redisTemplate.opsForZSet().add(key,randomChineseName,System.currentTimeMillis()); }

  • 2.開始模拟第201條數據插入,最後面删除操作時,因為時間最早的排在最前面,所以删除索引是從0開始,

/** *新閱讀記錄插入 *@authorwjl */ @Test publicvoidinsertTest(){ //key Stringkey="wangsr0001"; //阈值 longtop=200; //新訪問記錄ID Stringvalue="15646051140"; Doublescore=redisTemplate.opsForZSet().score(key,value); //檢索是否有舊記錄1.無則插入記錄值2.有則删除再次插入 if(null!=score){ //删除舊的 redisTemplate.opsForZSet().remove(key,value); } //加入新的記錄,設置當前時間戳為分數score redisTemplate.opsForZSet().add(key,value,System.currentTimeMillis()); //獲取總記錄數 LongaLong=redisTemplate.opsForZSet().zCard(key); if(aLong>top){ //獲取阈值200之後的記錄(0,1]并移除 redisTemplate.opsForZSet().removeRange(key,0,aLong-top-1); } }

  • 3.列表查詢曆史記錄,倒序

/** *列表查詢 *@authorwjl */ @Test publicvoidscanTest(){ Stringkey="wangsr0001"; longstart=1; longsize=10; Set<ZSetOperations.TypedTuple>scoreWithScores=redisTemplate.opsForZSet().reverseRangeWithScores(key,start-1,size-1); Iterator<ZSetOperations.TypedTuple>iterator=scoreWithScores.iterator(); BigDecimalbigDecimal=null; while(iterator.hasNext()){ ZSetOperations.TypedTuplenext=iterator.next(); bigDecimal=BigDecimal.valueOf(next.getScore()); System.out.println("==》ID:" next.getValue() "時間:" bigDecimal.toPlainString()); } }

  • 結果對比(上述例子查詢的是最新的十條)
  • 控制台輸出查詢

知乎怎麼隻看問答不看文章(如何實現類似知乎的功能查看最近1000條記錄呢)1

  • redis中的數據對比

知乎怎麼隻看問答不看文章(如何實現類似知乎的功能查看最近1000條記錄呢)2

最後
  • 求贊贊,求關注,有問題請留言@蘇克分享

#程序員##知乎##曆史記錄##緩存#

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved