最近在使用asp.net cache 过程中遇到一个问题是:
用cache 缓存了数据,但是不同的用户(具有不同权限,本应该看到不同的信息)在不同的客户端进行操作,返回的数据确实同一份cache数据;
感觉cache[]好像是所有会话共享一份数据的形式;与session[]的形式还是不同的;
session["user"]返回的是与当前用户相关的用户信息;
cache["data"]返回的数据是一份共享,同样的数据信息;
想确认一下,若在实际项目中使用cache 是否只能对通用的数据【也可能是整个数据库表的数据】信息进行缓存,而不能对每个用户单独的查询结果进行缓存呢?
如果要实现对每个用户的查询数据进行缓存,是否是要自我实现一个机制,会对服务器造成很大的内存压力吗?
希望大神,或者实际项目中使用过缓存的同学,能给出一些建议,或者给一个项目案例。
每个用户的key不同就可以达到独立缓存的效果。缓存不适合经常性变动的数据。
感谢各位的回复,讲的都挺有道理的,缓存不适合经常性变动的数据这点是值得确认的;
已经查阅资料解决问题,感谢各位
cache是基于全局(如application)的,所以会有你的这个问题发生。
要做基于session的cache~~~这个貌似价值不大,还不如直接写入session。
真的要这样实现,可以:
1、改写cache机制,使之支持session
2、对key进行识别处理,增加一个比如sessionid或当前用户id的方式。
缓存就是keyvalue,只要是是这个key取出的就是那个value不会变的``
举个例子 全局的权限是在一个catch中
但是每个用户 拥有的权限 id 在session中
然后显示的时候通过查询 值显示 id在session中的 权限项
解决方案2
缓存的key 带有用户 id的信息 按用户隔离