一般来说,我有以下情况:
从数据库中获取产品及其相关数据
将获取的数据转换为php'product'对象
缓存会话中的产品对象
缓存是只读的,即客户在网站上查看产品.
但是有些调用getProductIdsByCategory($categoryId)
,这些结果的productId也被缓存,每个用户,而不是使用我读过的全局缓存.
问题在于,如果管理员端的某个人添加了新产品并将其与某个类别相关联,那么在getProductIdsByCategory
新会话启动之前,客户将不会将新产品出现在他们的缓存中.
有没有办法在$_SESSION['x']
添加新产品时清除服务器上的所有会话?我不想破坏所有会话,因为客户将丢失他们的登录等.
或者我应该将这些缓存的productId搜索移动到全局缓存中吗?
ps我正在使用自定义构建的缓存,而不是memcached或类似的.
谢谢
默认情况下,会话数据只是文件系统中某处的序列化文件,并且可以修改所有这些文件以删除有问题的信息(尊重锁定,这样您就不会踩到任何当前打开的会话).
不过我不是真的推荐它.我建议使用一种方法来表示应该刷新这个缓存的数据,就像数据库存储的时间戳在session_start()
发生时查看,如果缓存的数据早于时间戳,则刷新缓存.