有没有办法清除所有用户的会话缓存密钥?

时间:2012-02-02 09:14:37

标签: asp.net session caching clear

有没有办法清除所有用户的会话缓存密钥?

例如,我在以下会话密钥“currentItem”下存储当前所选商店项目的用户。在网站的管理区域,我决定删除该特定商店项目。我现在想要使所有会话中的所有“currentItem”缓存条目无效。

有办法做到这一点吗?

我意识到我给出的例子有点做作,但它得到了重点。我怀疑一个解决方案是使用普通的Cache api来存储所有用户的当前项目。这样我就可以在需要时使它们失效。

感谢

2 个答案:

答案 0 :(得分:3)

您无法获得所有用户的所有当前会话 (坦率地说,you can,但我不推荐这个,但你仍然可以这样阅读InProc sessions

所以你唯一能做的就是这样:

  • 仅存储在用户购物车的Session ID
  • 将具有相应ID的项目添加到缓存
  • 然后将项目添加到Cache,设置dependency to the Item
  • 然后只生成事件以更改Cache中的整个购物车。
  • 如果由于某些原因Cache被清空,您应该考虑重新创建项目 - 您应该为此活动提供CacheItemRemovedCallback callback

答案 1 :(得分:0)

您可以将购物车移动到数据库。除非您有非常快速的购买流程或极其冗余的环境,否则会话或缓存可能不够耐用。由于它们不会持久存在,因此您也无法直接分析购买决策,损耗等。

根据您的广告资源更改的频率,您可能只需要在结帐时验证购物车商品是否可用。作为一个用户,看到一件物品刚从我的购物车中“神奇地”消失或价格已经改变,我会感到非常困惑。在我看来,最好明确地说出来。

同样,数据库将是一个优秀的解决方案,因为您可以根据产品的当前定义跟踪项目添加到购物车时的状态。

如果您必须使用基于会话或缓存的解决方案,那么@ VMAtm建议的解决方案是一个有效的选项。

相关问题