缓存
什么是缓存
服务器中内存中开启的一部分空间
作用
用于存储经常被使用且不常改变的数据
为什么要使用缓存
- 相对于读取磁盘的读取速度快
- 访问量大的情况下减少服务器读取磁盘压力
shiro缓存Ehcache
shiro用于认证和授权,每次访问都会读取数据库中的数据,这样就会增加数据库压力
为了减轻数据库压力可以将认证和授权的数据存储在缓存中
工作流程
整合EhCache
添加依赖
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.7.1</version> </dependency>
开启缓存配置
认证和授权操作都是在Realm中完成的,缓存的配置应该在Realm对象上做配置
ShiroConfig的配置类中完成
//Realm 需要自定义 @Bean public ShiroRealm shiroRealm() { // 配置 Realm ShiroRealm shiroRealm = new ShiroRealm(); //修改密码匹配器 HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); hashedCredentialsMatcher.setHashAlgorithmName("MD5"); shiroRealm.setCredentialsMatcher(hashedCredentialsMatcher); //配置缓存 //设置缓存管理器 shiroRealm.setCacheManager(new EhCacheManager()); //开启缓存 shiroRealm.setCachingEnabled(true); //开启认证缓存 shiroRealm.setAuthenticationCachingEnabled(true); //设置认证缓存名 shiroRealm.setAuthenticationCacheName("authenticationCache"); //开启授权缓存 shiroRealm.setAuthorizationCachingEnabled(true); //设置授权缓存名 shiroRealm.setAuthorizationCacheName("authorizationCache"); return shiroRealm; }
测试
为什么只有认证的缓存被创建?授权的缓存呢???
通过debug发现,在服务器启动时授权的缓存就会被创建
这样的话,服务器重启的话,EhCache缓存中的数据就会没了,想让缓存中的数据不会因为服务器的重启而丢失,可以使用Redis来实现。