2017-09-11 6 views
0

限られた時間(たとえば1時間)の間、データベースにデータを保存するにはどうすればいいですか?PHPはいくつかのデータをmySQLにx時間(制限時間)保存します

ユーザーが特定のものを検索すると、ロジックがサーバー側で実行され、検索結果がロードされます。結果がロードされると、私はそれをMySQLに格納し、それをx時間だけ保持したい。 x時間後、このデータはデータベースから削除する必要があります。

LaravelまたはPHPでこれを行うにはどうすればいいですか(これは私にとって問題ではありません。それはSQLでロジックを書くことですか、それともPHPのタスクですか?

これを行う方法?任意の提案/リンク/ソリューションですか?

ありがとうございました!

+1

各行にタイムスタンプを付けることはできますか?その後、 'X'時間前に追加された行でクエリを実行しますか?そのデータは本当に削除する必要がありますか? – axlj

+0

はい。私はこのデータを削除する必要があります。つまり、私は非同期的にデータベースへの2回目の要求を行い、時差をチェックする必要があります。 –

+3

は、一時テーブルではなく、redisやmemcachedなどの専用キャッシュを使用します。これらは自動的にこれを行う有効期限プロパティを持っています。しかし、@axljで指摘されているように、スケジュール上の行を削除するには、タイムスタンプフィールドとプロシージャを使用するだけです。 – Rafael

答えて

1

ロジックをSQLで記述するのはどうですか、それともPHPタスクですか?

あなたは常に、レコードの有効期限が切れているかどうかを確認してから削除するように別のものを送信するためにリクエストを送信する必要があるためphpでこれを行うことは面倒でしょう。これは、mysqleventsを使用して実現できます。 I came across this blog post which might be helpful

はまた、有効期限のタイムスタンプを持つmysqldocumentation page

1

タグレコードをチェックして、cronジョブは毎分実行する(またはあなたが好むものは何でも周波数)が期限切れのレコードを削除することを忘れていけません。

0

このタスクの最適な解決策は、Redisデータベースを使用することです。 PHPのドライバは2種類あります:pRedisphpRedisです。

pRedisは、PHPで書かれた実装であり、多数のユーザーに対して比較的遅く動作します。

phpRedisドライバはCで書かれており、はるかに高速に動作します。

$ redis-> psetex($ key、$ destroy_time、$ value)関数を使用して、自己破棄レコードを作成します。将来誰にでも役立つことを願っています。

関連する問題