在一般情况下,我有以下情形:有没有办法清除所有会话中的一些会话数据?
- 获取产品,并从数据库及其相关数据
- 转换获取的数据到PHP的“产品”对象的会话
- 缓存的产品对象
缓存是只读的,即客户在网站上查看产品。
但有类似getProductIdsByCategory($categoryId)
的调用,并且来自这些结果的productId也被缓存,每个用户不使用我已阅读过的全局缓存。
问题是,如果管理员端的某人添加了新产品并将其与某个类别关联,则客户将不会让新产品出现在其缓存的getProductIdsByCategory
中,直到启动新的会话。
添加新产品时,是否有办法从服务器上的所有会话中清除例如$_SESSION['x']
?我不想销毁所有会话,因为客户将失去登录等。
或者我应该将这些缓存的productId搜索移至全局缓存吗?
使用定制的缓存,而不是memcached或类似的。
感谢
memcached是一种很好的“现代”做事方式吗?我对此不甚了解。 – 2009-07-19 12:52:41
@大卫,是的。任何可同时访问的共享状态都可以使用。一些ORM系统将允许这样做。请记住,在任何系统中清除都会有差距,因为PHP会将共享状态复制到应用程序中。如果缓存很脏,或者需要类似的约束条件,则需要停止重新保存。这是你需要限制的输入。 – 2009-07-19 12:55:17