熱門列表的實現思路整理

2021-09-29 03:39:52 字數 1714 閱讀 4312

title: 熱門列表的實現思路整理

date: 2018-09-09

tags: [工作筆記]

select result.user_publish_id from (

select a.user_publish_id, count(*) as count from

(select p.user_publish_id

from user_publish as p

join user_like as l

onl.for_obj = p.user_publish_id and l.like_type = 0 and l.created_at > ''

where p.status = 'visible'

union all

select p.user_publish_id

from user_publish as p

join user_comments as c

onp.user_publish_id = c.publish_id and c.status = 'visible' and c.created_at > ''

where p.status = 'visible'

) as a

where a.user_publish_id not in ("")

group by a.user_publish_id

) as result

where result.count >=

pipeline.zadd(all_hot_keys_cache, time.time(), item)
(all_hot_keys_cacheredis 中有序集合的鍵)

客戶端如果僅傳入count引數,後端將返回最新的count條資料資訊。

如果傳入countpublish_ids,後端返回的count資料中,publish_ids中包含的文章資訊將不會被快取。

這樣保證了客戶端資料的不重複問題。但是隨著客戶端瀏覽的資料越來越多,把麼客戶端請求的publish_ids列表也越大,後端去重的時候複雜度較高。但是解決這個問題得力於redis的集合操作方法。

# redis_utils.py

def get_redis_sorted_set_diffs(uid, items, count):

user_key = user_hot_keys_cache.format(uid)

user_hot_key_cache(items, user_key)

dest = user_hot_keys_destination_cache.format(uid)

redis_store.zunionstore(dest, , 'min')

x = redis_store.zrevrangebyscore(dest, '+inf', 1)[:count]

redis_store.delete(user_key)

redis_store.delete(dest)

return x

返回的資料排序按照redis返回的集合順序。

相同:不同:

整理最新的思路

最新想著看幾類書,將思路統一起來。這段時間工作也必要緊張,長時間這樣工作,也需要做一些積累。將實踐中遇到的問題總結一下,感覺主要是圍著專案在轉,長時間沒有技術積累,還是有點空虛,如何找回以前的感覺,暫著如下打算。看一些典型的原始碼 tomcat apache,力求精通,不要蜻蜓點水似的,主要有如下目...

N級級聯下拉列表 的實現思路

所謂n級級聯下拉列表,就是由多個選擇下拉列表組成的一組用來展示 選擇某種資訊的元件。舉個例子 我們想選擇中國的某個縣,那麼我們先會選擇省,這時被選中的 省 的所有地市就應該被列出來了 這時我們選擇乙個地市,那麼同樣此時被選中的地市的所有縣就會被列出來了。然後我們就可以選到我們需要的縣了。其實這個元件...

N級級聯下拉列表 的實現思路

所謂n級級聯下拉列表,就是由多個選擇下拉列表組成的一組用來展示 選擇某種資訊的元件。舉個例子 我們想選擇中國的某個縣,那麼我們先會選擇省,這時被選中的 省 的所有地市就應該被列出來了 這時我們選擇乙個地市,那麼同樣此時被選中的地市的所有縣就會被列出來了。然後我們就可以選到我們需要的縣了。其實這個元件...