Ehcache

shiro 介绍和使用

浪子不回头ぞ 提交于 2020-08-09 12:20:49
一、shiro 内部结构 1、shiro 包含的组件 shiro主要包括认证器(Authenticator),授权器(Authrizer),session会话管理(SessionManager),加密处理(Cryptography),记住我(remember me),对权限的缓存(CacheManager) 2、shiro 各组件介绍 Subject:主体,可以理解为 与应用交互的用户 subject 里包含用户的所有信息 如 用户信息,用户角色,用户权限,是否登录等等; SecurityManager:安全管理器 shiro通过securityManager 管理着整个shiro各个模块。 Authenticator:认证器,负责认证用户是否是合法用户 Authenticator具体认证过程 是通过realm 来处理用户是否是合法用户; Authrizer:授权器, 负责给用户授权 Authrizer 具体授权是通过realm 来获取用户所具有的权限; Realm:可以有1个或多个Realm,也可以自定义realm realm在shiro框架中很重要 负责处理用户的认证信息和授权信息; SessionManager:负责session的管理; SessionDAO:对session的curd操作; CacheManager:可以对用户权限信息进行缓存 提供性能;

跟我学Springboot开发后端管理系统6:缓存框架Caffeine

≡放荡痞女 提交于 2020-08-06 09:45:37
Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美。Caffeine受启发于Guava Cache的API,使用API和Guava是一致的。它借鉴了Guava Cache和ConcurrentLinkedHashMap的设计经验。 性能比较 基准测试使用Java microbenchmark工具提供准确的分析。 缓存配置为 Caffeine和ConcurrentLinkedHashMap根据CPU数量确定其内部结构的大小 Guava的并发级别配置为64(默认为4,以减少内存使用)。 Ehcache v2在内部被硬编码为100个段,而v3未分段 100%的读操作 读75% 写25% 写100% 上面三种测试图来自于Caffeine官网,从图可知,Caffeine的性能玩爆其他缓存框架。 在Matrix-Web中使用Caffeine 在工程的pom文件引入caffeine的依赖,如下: <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>${caffeine.version}</version> </dependency> 创建一个抽象类AbstractCaffineCache,该类使用范型来约束缓存的数据类型

redis 雪崩和穿透

自古美人都是妖i 提交于 2020-08-06 07:47:05
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。 这就是缓存雪崩。 大约在 3 年前,国内比较知名的一个互联网公司,曾因为缓存事故,导致雪崩,后台系统全部崩溃,事故从当天下午持续到晚上凌晨 3~4 点 ,java 项目框架案例www.1b23.com ,公司损失了几千万。 缓存雪崩的事前事中事后的解决方案如下。 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 用户发送一个请求,系统 A 收到请求后,先查本地 ehcache 缓存,如果没查到再查 redis。如果 ehcache 和 redis 都没有,再查数据库,将数据库中的结果,写入 ehcache 和 redis 中。 限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?走降级!可以返回一些默认的值

Spring Boot Sample 020之spring-boot-data-cache

戏子无情 提交于 2020-08-04 18:33:07
一、环境 Idea 2020.1 JDK 1.8 maven 二、目的 spring boot整合cache gitHub地址: https://github.com/ouyushan/ouyushan-spring-boot-samples 三、步骤 3.1、点击File -> New Project -> Spring Initializer,点击next 3.2、在对应地方修改自己的项目信息 3.3、选择Web依赖,选中Spring Web、Spring Boot Actuator。可以选择Spring Boot版本,本次默认为2.2.7,点击Next 3.4、项目结构 四、添加文件 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent>

shiro的认证、授权、会话、加密

北战南征 提交于 2020-08-04 17:50:05
shiro shiro是一个基于java的开源的安全管理框架,可以完成认证,授权,会话管理,加密,缓存功能。 为什么学习shiro 在java的世界中,安全管理框架有spring security和shiro。spring security主要依赖于spring,并且比较复杂,学习曲线较高。shiro比较简单,而且其比较独立,既可以javaSE中使用,也可以在javaEE中使用,并且在分布式集群的环境下也可以使用。 shiro的结构体系 Authentication认证:验证用户是否合法。==>就是验证登录; Authorization授权:授予谁具有访问某些资源的权限; SessionManagement:会话管理,用户登录后的用户信息通过SessionManagent进行管理,不管是在什么应用中 Cryphography:提供了一些常见的加密算法,使得在应用中可以很方便的实现数据安全。 WebSupport:提供web应用程序支持 Caching缓存:提供了对缓存的支持,支持多种缓存架构:如ehcache,还支持缓存数据库-redis Concurrency:支持多线程并发访问 Testing:测试 Run As:支持一个用户在允许的前提下使用另一个身份进行登录; RememberMe:记住我 Subject=身份+凭证====>用户名和密码【用户获取主体的信息

springboot 整合 ehcache

拈花ヽ惹草 提交于 2020-07-29 10:31:19
1. 该说的话 每个人都应当学会独立地去思考、去寻找答案,而不是一味地伸手向他人索取所谓的标准答案。 首先,别成为“拿来主义”者,其次远离"拿来主义"的人。 2. ehcache 2.1 主要特性 快速,简单. 多种缓存策略 缓存数据有两级:内存和磁盘,因此无需担心容量问题 缓存数据会在虚拟机重启的过程中写入磁盘 可以通过RMI、可插入API等方式进行分布式缓存 具有缓存和缓存管理器的侦听接口 支持多缓存管理器实例,以及一个实例的多个缓存区域 提供Hibernate的缓存实现 2.2 和redis相比 ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。 redis是通过socket访问到缓存服务,java 框架项目案例:www.1b23.com 。效率比ecache低,比数据库要快很多. 2.3 在应用程序中的位置 3. spring boot 整合 1.搭建spring boot 项目 2. pom.xml文件中添加依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-cache </ artifactId > </ dependency > < dependency > <

Redis面试高级应用解析:缓存穿透、击穿、雪崩

对着背影说爱祢 提交于 2020-07-29 05:02:21
1 背景 像我们去面试一些大公司的时候,就会遇到一些关于缓存的问题。可能很多同学都是接触过,多多少少了解一些,但是如果没有好好记录这些内容,不熟练精通的话,在真正面试的时候,就很难答出来了。 在我们的平常的项目中多多少少都会使用到缓存,因为一些数据我们没有必要每次查询的时候都去查询到数据库。 特别是高 QPS 的系统,每次都去查询数据库,对于你的数据库来说将是灾难。 今天我们不牵涉多级缓存的知识,就把系统使用到的缓存方案,不管是一级还是多级的都统称为缓存,主要是为了讲述使用缓存的时候可能会遇到的一些问题以及一些解决办法。 我们使用缓存时,我们的业务系统大概的调用流程如下图: 当我们查询一条数据时,先去查询缓存,如果缓存有就直接返回,如果没有就去查询数据库,然后返回。这种情况下就可能会出现一些现象。 2 缓存穿透 2.1 什么是缓存穿透 正常情况下,我们去查询数据都是存在。 那么请求去查询一条压根儿数据库中根本就不存在的数据,也就是缓存和数据库都查询不到这条数据,但是请求每次都会打到数据库上面去。 这种查询不存在数据的现象我们称为 缓存穿透 。 2.2 穿透带来的问题 试想一下,如果有黑客会对你的系统进行攻击,拿一个不存在的id 去查询数据,会产生大量的请求到数据库去查询。可能会导致你的数据库由于压力过大而宕掉。 2.3 解决办法 2.3.1 缓存空值 之所以会发生穿透

Ehcache avoid storing sensitive data to disk?

我的梦境 提交于 2020-07-22 21:39:56
问题 We want to cache, using Ehcache, sensitive data that should never be stored to disk (data can only reside in main memory). It is the kind of data that is illegal for it to be stored on disk at all and therefore needs to be treated with a certain caution. We are already using Ehcache (both with and without terracotta) for common caching purposes. I know that Ehcache provides the option to cache on both to main memory and to disk, and additionally it allows to overflowtodisk when using main

Will Spring's @CachePut annotation work with a void return type?

隐身守侯 提交于 2020-07-20 10:55:50
问题 I am attempting to implement caching in my application using Ehcache and the Spring 3.1 built in caching annotations (@Cacheable, @CacheEvict, and @CachePut). I have created a cache as follows: @Cacheable(value = "userCache", key = "#user.id") public List<User> getAllUsers() { ... } I am attempting to update this cache with a new value using the @CachePut annotation as below: @CachePut(value = "userCache", key = "#user.id") public void addUser(User user) { ... } However, the new "User" is not

Spring cache with instance variable and parameter as key

时间秒杀一切 提交于 2020-06-17 05:38:08
问题 I am using ehcache for caching the method results. The key has to be a combination of both member object and method's parameter. My class looks something like: Class A { private B b; @Cacheable(value="someCache",key="some key based on B and C") public Result getResult(C c){ ...... } I need the key to be based on B and C. I referred https://code.google.com/p/ehcache-spring-annotations/issues/detail?id=69 but they did not specify how to include the method parameter in the key generation. Could