Redis実戦ノート-ショッピングサイト

3112 ワード

セッションの維持
  • は、Tokenを使用して、ユーザ操作証明書としてユーザ登録状態を維持する.
  • 更新Token hset login: token userId登録されたユーザIdとtokenをhashでマッピングするzadd recent: timestamp token tokenを最近の操作の順序集合に入れ、現在のタイムスタンプをスコアzadd viewed:Token timestamp ItemIdとして最新のアクセス商品Idを当該ユーザの最近のアクセス商品順序集合のzremrangebyrank viewed:Token 0 -26に加えて当該ユーザが最近アクセスした商品の比較的古い記録を削除し、履歴足跡25個のみを記録するzincrby viewd: item -1は、現在閲覧している商品のスコアを1つ減らすことで、アクセス回数が多い商品のスコアが小さいzremrangebyrank viewed: 0 -20001ほど定期的に20000名以降(スコアが大きいものから小さいものまでの後20000名)の商品をzinterstore viewed: 1 viewed: weights 0.5削除し、残りの商品の閲覧回数を
  • に半減する.
  • Token hget login:tokenをチェックtokenに基づいてログインユーザを取得し、空の場合はログインしていないか、ログインが期限切れであることを示す
  • .
  • は期限切れのセッションをクリーンアップし、同時にオンライン人数を維持し、最大500 w、以下の操作はタイミングタスクとして作成することができ、zcard recent:をタイミング的に実行して現在のオンライン人数を取得し、人数が500 wより大きい場合、tokenを更新していないユーザーzrange recent: 0 100をクリーンアップして最も長い間更新していないtokenを取得すると判断し、100はmin(オンライン人数-500 w,100)del viewed:Tokenループ削除期限切れユーザの閲覧履歴hdel login: Tokenループ削除期限切れユーザのtoken-userバインドzrem recent: tokenループ削除token
  • ショッピングカート
    クッキーを使ってカートを保存する問題は、httpリクエストのたびにクッキーを持参し、カートの数が多いとリクエストや処理速度に影響します.また、クッキーの商品を解析し、まだ有効かどうかを判定する必要があります.hset cart:token item countsはitemをカートに追加し、数量がcounts hdel cart:token itemでcountsが0の場合、カートのこの商品del cart:tokenを削除して上でセッション中をクリーンアップし、同時にこのセッションのカートをクリーンアップします.
    セッションクッキーとカートクッキーをredisに入れることで,これらのデータを利用して商品の統計分析を行うことができる.
    ページキャッシュ
    一般的に、多くの商品ページは、その商品が作成されると、ほとんど変更されません.【データ+テンプレート】静的ページを生成してキャッシュすることで、動的にページを生成する時間を効果的に低減し、アクセス速度を大幅に向上させることができます.
    Laravelでは、キャッシュ可能なルーティングにこのミドルウェアを追加するミドルウェアを作成できます.ミドルウェアでは、最初に動的に生成されたページをredisに保存し、このキャッシュに有効期限を追加します.次回のリクエストがキャッシュに先にアクセスし、キャッシュが無効になったり、存在しない場合に再動的に生成されます.get cacheNameは、一定のルール(Urlであってもよい)に従って、redisでキャッシュされた結果を取得し、存在しない場合はデータベースにアクセスし、結果をredis set cacheName cacheResultに格納し、結果をredis expire cacheName 60に格納して1分間キャッシュする
    秒殺
    秒殺商品ページと普通の商品ページの最大の違いは、秒殺商品には購入時間と在庫の制限があることです.この2つのデータは、前のステップの「ページキャッシュ」では表示できません.ajaxリクエストにより、在庫と秒殺時間を動的に取得できます.この2つのデータはredisに格納され、短時間で大量のリクエストがデータベースを塞ぐことを避けることができます.
    この機能を実現するために2つの秩序化された集合を維持します.
  • は、商品idのような秩序化された集合keyがキャッシュするデータのidであり、タイムスタンプに分割され、いつデータベースから最新のデータをredis
  • に再ロードすべきかを表す.
  • 秩序化された集合keyもキャッシュするデータのidであり、遅延時間であり、どのくらいごとにキャッシュされるかを表す.この値が0未満の場合、このデータをキャッシュし続けるべきではなく、redisから削除する必要があります.
  • タスクid,delay zadd delay: delay id遅延リストを作成し、値はキャッシュ更新の間隔時間zadd schedule: timestamp idタスクリストであり、値は次のキャッシュ更新の時間
  • である.
  • タイミングタスク、更新キャッシュzrange schedule: 0 0 withscoresタスクリストから最新更新するタスクを取得し、このタスクの更新時間がまだ来ていない場合は、sleepについてしばらくの間、新しいチェックzscore delay: idからこのタスクのキャッシュ更新間隔時間を取得し、この間隔時間が0未満である場合は、このデータをキャッシュする必要がないことを示します.このデータをredis削除zrem delay: id削除間隔zrem schedule: id削除タスクスケジュールdel inv:id削除キャッシュのデータset inv:id削除間隔時間が0より大きい場合はデータベースから最新のデータを検出し、redisに入れるzadd schedule: timestamp+delay idこのデータの次回の更新をタスクキューに入れ、現在時間+遅延時間
  • に値する.