search
HomeBackend DevelopmentPHP Tutorialmemcached - php的cache数据如何在数据有变化时实现自动更新

目前就我而言,php使用memache或者redis缓存数据,当数据有更新数据时,根据标签清除掉数据,那么有没有一套自动更新的策略呢?

回复内容:

目前就我而言,php使用memache或者redis缓存数据,当数据有更新数据时,根据标签清除掉数据,那么有没有一套自动更新的策略呢?

删除比更新好,如果你的请求里面包含了多次数据更新,由此会触发多次缓存更新,但实际上只有最后一次更新的缓存才是有效的。如果更新缓存的执行成本较高的话可能在偶发的高频更新下会引发执行效率的问题。

相对来说,删除缓存的代价更低,且没有请求就不会生成新的缓存,中间无论怎么更新数据都不会浪费。

这种删除策略对于高负荷网站很可能是不适用的,对于这种类型的应用,宁愿牺牲一致性也不会让大量请求直接穿透到数据库上,但对于大多数网站,这种做法应该问题都不大。

这和我前几天解决的问题类似,卖个萌!
其实这类问题,我个人认为属于框架问题,或再大一点说是架构问题也不为过~所以如果只是盯着业务来思考这个问题,可能会很无力~
之所以我最后采取“爬虫”方案,是因为开发之初就没有意识到缓存已经成为现在网站的标配,属于非功能性但必要需求!

把要更新的数据加入队列,开进程去跑队列,在进程里做处理,可否?

一般方式是在模型层做处理,因为数据的增删改都是在模型层进行的。有很多php框架都支持事件绑定,所以也可以使用事件机制处理。

如果在Model中统一处理,这并不难吧。

=。= 一直都是做缓存不更新的数据,第一次碰到,想了一下,可以在在数据库比如MYSQL做触发器。

菜鸟轻拍。

在Model里面写update的后置方法 _after_update(),在后置方法里面删除缓存

对于楼主的疑问,我也仔细思考过。本质上就是在缓存读取的时候加一个条件。IF(缓存失效)THEN(重建)ELSE(返回缓存数据)。这样的机制对开发来说的确很诱人,不用担心更新数据忘记清缓存。但是。。。IF条件当中的判断缓存失效的数据从哪里来呢?我想要么数据库,要么缓存,要么队列。所以个人觉得为了实现这么一个自动的功能代价有点高。
PHP的YII框架中有一个缓存依赖的模块可以看看,大致思路如上所述。其中的“缓存依赖”就相当于上面说的判断“缓存失效”的条件;在YII中,缓存依赖有很多种,例如数据库,缓存,文件更新时间等

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
What is the difference between unset() and session_destroy()?What is the difference between unset() and session_destroy()?May 04, 2025 am 12:19 AM

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

What is sticky sessions (session affinity) in the context of load balancing?What is sticky sessions (session affinity) in the context of load balancing?May 04, 2025 am 12:16 AM

Stickysessionsensureuserrequestsareroutedtothesameserverforsessiondataconsistency.1)SessionIdentificationassignsuserstoserversusingcookiesorURLmodifications.2)ConsistentRoutingdirectssubsequentrequeststothesameserver.3)LoadBalancingdistributesnewuser

What are the different session save handlers available in PHP?What are the different session save handlers available in PHP?May 04, 2025 am 12:14 AM

PHPoffersvarioussessionsavehandlers:1)Files:Default,simplebutmaybottleneckonhigh-trafficsites.2)Memcached:High-performance,idealforspeed-criticalapplications.3)Redis:SimilartoMemcached,withaddedpersistence.4)Databases:Offerscontrol,usefulforintegrati

What is a session in PHP, and why are they used?What is a session in PHP, and why are they used?May 04, 2025 am 12:12 AM

Session in PHP is a mechanism for saving user data on the server side to maintain state between multiple requests. Specifically, 1) the session is started by the session_start() function, and data is stored and read through the $_SESSION super global array; 2) the session data is stored in the server's temporary files by default, but can be optimized through database or memory storage; 3) the session can be used to realize user login status tracking and shopping cart management functions; 4) Pay attention to the secure transmission and performance optimization of the session to ensure the security and efficiency of the application.

Explain the lifecycle of a PHP session.Explain the lifecycle of a PHP session.May 04, 2025 am 12:04 AM

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

What is the difference between absolute and idle session timeouts?What is the difference between absolute and idle session timeouts?May 03, 2025 am 12:21 AM

Absolute session timeout starts at the time of session creation, while an idle session timeout starts at the time of user's no operation. Absolute session timeout is suitable for scenarios where strict control of the session life cycle is required, such as financial applications; idle session timeout is suitable for applications that want users to keep their session active for a long time, such as social media.

What steps would you take if sessions aren't working on your server?What steps would you take if sessions aren't working on your server?May 03, 2025 am 12:19 AM

The server session failure can be solved through the following steps: 1. Check the server configuration to ensure that the session is set correctly. 2. Verify client cookies, confirm that the browser supports it and send it correctly. 3. Check session storage services, such as Redis, to ensure that they are running normally. 4. Review the application code to ensure the correct session logic. Through these steps, conversation problems can be effectively diagnosed and repaired and user experience can be improved.

What is the significance of the session_start() function?What is the significance of the session_start() function?May 03, 2025 am 12:18 AM

session_start()iscrucialinPHPformanagingusersessions.1)Itinitiatesanewsessionifnoneexists,2)resumesanexistingsession,and3)setsasessioncookieforcontinuityacrossrequests,enablingapplicationslikeuserauthenticationandpersonalizedcontent.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.