memcached - php的cache数据如何在数据有变化时实现自动更新
目前就我而言,php使用memache或者redis缓存数据,当数据有更新数据时,根据标签清除掉数据,那么有没有一套自动更新的策略呢?
回复内容:
目前就我而言,php使用memache或者redis缓存数据,当数据有更新数据时,根据标签清除掉数据,那么有没有一套自动更新的策略呢?
删除比更新好,如果你的请求里面包含了多次数据更新,由此会触发多次缓存更新,但实际上只有最后一次更新的缓存才是有效的。如果更新缓存的执行成本较高的话可能在偶发的高频更新下会引发执行效率的问题。
相对来说,删除缓存的代价更低,且没有请求就不会生成新的缓存,中间无论怎么更新数据都不会浪费。
这种删除策略对于高负荷网站很可能是不适用的,对于这种类型的应用,宁愿牺牲一致性也不会让大量请求直接穿透到数据库上,但对于大多数网站,这种做法应该问题都不大。
这和我前几天解决的问题类似,卖个萌!
其实这类问题,我个人认为属于框架问题,或再大一点说是架构问题也不为过~所以如果只是盯着业务来思考这个问题,可能会很无力~
之所以我最后采取“爬虫”方案,是因为开发之初就没有意识到缓存已经成为现在网站的标配,属于非功能性但必要需求!
把要更新的数据加入队列,开进程去跑队列,在进程里做处理,可否?
一般方式是在模型层做处理,因为数据的增删改都是在模型层进行的。有很多php框架都支持事件绑定,所以也可以使用事件机制处理。
如果在Model中统一处理,这并不难吧。
=。= 一直都是做缓存不更新的数据,第一次碰到,想了一下,可以在在数据库比如MYSQL做触发器。
菜鸟轻拍。
在Model里面写update的后置方法 _after_update(),在后置方法里面删除缓存
对于楼主的疑问,我也仔细思考过。本质上就是在缓存读取的时候加一个条件。IF(缓存失效)THEN(重建)ELSE(返回缓存数据)。这样的机制对开发来说的确很诱人,不用担心更新数据忘记清缓存。但是。。。IF条件当中的判断缓存失效的数据从哪里来呢?我想要么数据库,要么缓存,要么队列。所以个人觉得为了实现这么一个自动的功能代价有点高。
PHP的YII框架中有一个缓存依赖的模块可以看看,大致思路如上所述。其中的“缓存依赖”就相当于上面说的判断“缓存失效”的条件;在YII中,缓存依赖有很多种,例如数据库,缓存,文件更新时间等

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

AIは、作曲家の使用を最適化するのに役立ちます。特定の方法には次のものが含まれます。1。依存関係管理の最適化:AIは依存関係を分析し、最適なバージョンの組み合わせを推奨し、競合を減らします。 2。自動コード生成:AIは、ベストプラクティスに準拠したComposer.jsonファイルを生成します。 3.コードの品質を改善する:AIは潜在的な問題を検出し、最適化の提案を提供し、コードの品質を向上させます。これらの方法は、開発者が効率とコードの品質を向上させるのに役立つ機械学習および自然言語処理技術を通じて実装されています。

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

MySQLで文字セットと照合を構成する方法は次のとおりです。1。サーバーレベルでの文字セットとコレクションの設定:setNames'utf8 '; setCharacterSetutf8; setCollation_connection = 'utf8_general_ci'; 2。特定の文字セットと照合を使用するデータベースを作成します:createdatabaseexample_dbcharactersetutf8collateutf8_general_ci; 3.テーブルを作成するときに文字セットとコレクションを指定:createTableExample_table(idint

Typetraitsは、Cでコンパイル時間タイプのチェックと操作に使用され、コードの柔軟性とタイプの安全性が向上します。 1)タイプの判断は、STD :: iS_integralおよびstd :: is_floating_pointを介して実行され、効率的なタイプチェックと出力を達成します。 2)std :: is_triviely_copyableを使用して、ベクトルコピーを最適化し、タイプに従って異なるコピー戦略を選択します。 3)コンパイル時間の意思決定、タイプの安全性、パフォーマンスの最適化、コードの複雑さに注意してください。タイプトライトの合理的な使用は、コードの品質を大幅に改善できます。
