关于多表联查的缓存问题,使用什么样的技术可以解决?
最近在做一个后台的权限管理系统,使用了shiro来进行权限的空值,所以每次登陆的时候都会到数据库里查找当前用户所对应的角色和权限,每次都要通过从账号到用户,到角色,到权限的查询,中间还有两张关联表,所以很耗费时间
上面要求让我做一个缓存,将查询结果缓存起来,同时要做到每个角色或者用户的更改缓存中的数据也需要清除或更改
首先我想的是mybatis的二级缓存应该是不能用,每个缓存是以namespace为单位的,用户表,角色表,角色用户关联表,无论我把sql写在那个namespace下,另一张表中数据的更改并不会影响的这边,所以会出现数据错误的情况...后来上边给了我一个文档,是spring和ehcache结合的使用,我查看了之后发现他们其实有着相同的地方,他是利用了aop的思想,在执行查询方法的时候查询是否有缓存,如果没有就利用反射的原理将该方法的全名做为cache的键,将查询结果作为值保存在cache中;然后在执行增删改的时候也是利用反射的原理获取该方法的所在的类,然后清除缓存中所有以该类名开头的缓存..这样也就是说我在用户的service下执行了角色的查询,那么我只有在操作该类下的增删改方法的时候才能清除缓存,然而我如果对角色进行了更改完全不会影响到这边的缓存操作。。除非我将用户角色所有的方法全部放在一个server下,不然缓存是会出现错误的
希望有朋友帮我解决这个问题,我是新手,也不了解redis,不知道能否解决这样的问题?求帮助。。

1个回答

你的方法不太对,shiro本身提供的就有缓存的接口,你需要做一个自己的缓存类去实现这个接口。并不是spring与ehcache那些,那些是配置普通的缓存的,用于shiro麻烦。
http://blog.csdn.net/csujiangyu/article/details/49076531
http://sishuok.com/forum/blogPost/list/7461.html
你百度搜搜 shiro缓存,多的很

tianyaleixiaowu
天涯泪小武 回复醉恋迷迭香: 你没理解我说的意思,shiro是会自己管理缓存的,他提供了ICache接口,他只提供了接口没有提供实现类,所以需要你去实现它提供的接口,然后做一些简单的配置,shiro就会自己去管理缓存了。而不是让你去根据类名方法名什么的去做缓存,增删改查它自己会通过自己的接口去实现,不需要你手工去做这些。
接近 3 年之前 回复
weixin_39180123
demon晨 其实缓存的实现并不难,我们也知道用户的信息一般是不会发生改变的,但是如果说哪天他改变了,这个shiro中的缓存是否能够发生改变?不清楚,请赐教
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐