Redis管道功能


Redis管道,Redis存儲用戶瀏覽數據

當頻繁的存儲獲取Redis數據庫中的數據時,可以使用Redis的pipeline(管道)功能,將多個相互沒有依賴關系的讀寫操作,如:下一步執行的Redis操作的開啟需要獲取上一步操作執行結束的數據。放到隊列中,使用pipeline對象一次性執行,可以很大程度上減少與數據庫建立TCP連接的性能損耗。(使用場景:用戶瀏覽歷史, 注冊登錄短信驗證碼,圖片驗證碼)

class RecommendJobView(GenericAPIView):
    """推薦職位視圖"""
    # 更具用戶瀏覽最多的職位的(技術棧)的倒序,序列化器返回數據和最新數據一樣,因為存儲數據和查詢數據都與redis有關,所以不適用ListAPIView
    serializer_class = PostJobSerializer

    def perform_authentication(self, request):
        pass
    ...
    def post(self, request):
        # 用戶瀏覽數據存儲在redis,user_id作為主鍵,采用list存儲職位id
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        redis_conn = get_redis_connection('job')
        pl = redis_conn.pipeline()
        # 去重
        pl.lrem('user_id_%s' % user.id, 0, job_id)
        # 保存,增加
        pl.lpush('user_id_%s' % user.id, job_id)
        # 保留規定長度的數據
        pl.ltrim('user_id_%s' % user.id, 0, constants.MAX_Job_VIEW_HISTORY-1)
        pl.execute()
    ...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM