Redis实现mybatis、shiro-RBAC和shiro-session的分布式缓存管理

一、redis&mybatis

Mybatsi默认缓存对象 PerpetualCache,是本地缓存

myBatis的缓存机制就是将【namespace/或者是dao名】作为key存储,然后将一个PerpetualCache作为一个value,而PerpetualCache是一个map集合,其key是【包含有namespace/或者dao名、以及sql语句】的一个长字符串,其value是sql语句查询结果。

当发生增删改操作,myBatis会刷新缓存,这样查询的时候是新的数据;而查询的时候优先从缓存获取数据,这样查询速度快,对硬盘压力也小。

我们可以【自定义Cache】,使之将缓存数据放到redis上,而非本地即可。

1.1 自定义缓存组件

Cache有很多,这里使用的是如下包下的Cache类

org.apache.ibatis.cache.Cache
根据业务场景,要在增加阶段设置有效期,与session不同,不会被刷新,而是到期即销毁
public class MyBatisCache implements Cache {
   
	//id是mybatis创建此缓存组件的实例时,会传入的namespace
    private String id;
    //注意是final
    private final ReadWriteLock lock = new ReentrantReadWriteLock();

    public MyBatisCache() {
   
    }

    public MyBatisCache(String id) {
   
        this.id = id;
    }

    @Override
    public String getId() {
   
        return this.id;
    }

    @Override
    public void putObject(Object key, Object value) {
   
    /**
    * 该缓存组件不在工厂内,故不能注解方式获取,只能通过【ContextLoader】
    * ContextLoader是在tomcat启动时就创建,然后再启动sqlSessionFactory
    * 再扫描mapper后就会触发cache缓存,也就是说该类与工厂启动时刻一致
    * 但是调用该方法的时候,工厂还未启动完全,所以会报错,因此只能用于局部变量,越靠后越好
    */
        RedisTemplate<String,Object> template = (RedisTemplate<String, Object>) ContextLoader.getCurrentWebApplicationContext().getBean("redisTemplate");
        //将查询结果放入redis,缓存备用
        //template.opsForValue().set(key.toString(), value);
        //设置有效期一小时,意味着一小时后会销毁,这样保证数据安全,同时随时更新数据
		template.opsForValue().set(key.toString(), value, 1, TimeUnit.HOURS);
    }

    @Override
    public Object getObject(Object key) {
   
        RedisTemplate<String,Object> template = (RedisTemplate<String, Object>) ContextLoader.getCurrentWebApplicationContext().getBean("redisTemplate");
        Object cache = template.opsForValue().get(key
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个shiro的入门Demo.. 使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加了admin的permission,所以可以访问admin.jsp role用户通过添加了role角色,所以可以访问role.jsp 这是最基本的shiro的运用..目的是让你快速了解shiro的机制.. 这个Demo体现shiro的地方主要在两个类以及shiro.xml的配置文件 CustomRealm : 处理了登录验证以及授权.. ShiroAction : 用来传递登录时的用户数据..转换为token传递给realm...之后根据结果做相应的逻辑处理.. shiro.xml : shiro的主要配置... 规则定义在以下地方 : /login.jsp* = anon /index.jsp* = authc /index.do* = authc /admin.jsp*=authc,perms[/admin] /role.jsp*=authc,roles[role] ------------------------------------------------------------------------------------------------------------------------------------------------------------- 2015-10-28更新 --通过添加了以下内容来使用注解方式配置权限.... unauth login --修改了过滤链 //简单的讲就是把需要特别处理的路径写到前面,越特殊写到越前 /shiro/login.do*=anon /login.jsp* = anon /admin.jsp*=authc,perms[/admin] /role.jsp*=authc,roles[role] /** = authc --------------------------------------------------------------------------------------------------------------------------------------------------- 15-10-29 添加了使用ehcache的缓存机制 添加了redis缓存...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值