当前位置: 首页 > news >正文

合肥建网站要多少钱wordpress 为分类定模板

合肥建网站要多少钱,wordpress 为分类定模板,网页制作下载安装包,互联网代理目录 一、基本介绍1、性能指标2、JMeter1、JMeter 安装2、JMeter 压测示例1、添加线程组2、添加 HTTP 请求3、添加监听器4、启动压测查看分析结果 3、JMeter Address Already in use 错误解决 二、性能监控1、jvm 内存模型2、堆3、jconsole 与 jvisualvm1、jvisualvm 能干… 目录 一、基本介绍1、性能指标2、JMeter1、JMeter 安装2、JMeter 压测示例1、添加线程组2、添加 HTTP 请求3、添加监听器4、启动压测查看分析结果 3、JMeter Address Already in use 错误解决 二、性能监控1、jvm 内存模型2、堆3、jconsole 与 jvisualvm1、jvisualvm 能干什么2、安装插件方便查看 gc 4、监控指标1、中间件指标2、数据库指标 5、JVM 分析调优1、几个常用工具2、命令示例3、调优项 三、nginx动静分离四、模拟线上应用内存崩溃宕机情况五、优化三级分类数据获取六、缓存1、本地缓存和分布式缓存1、缓存使用2、整合 redis 作为缓存 2、缓存失效问题1、缓存穿透2、缓存雪崩3、缓存击穿 3、缓存数据一致性1、保证一致性模式1、双写模式2、失效模式 3、改进方法 1-分布式读写锁4、改进方法 2-使用 cananl 4、分布式锁1、分布式锁与本地锁2、分布式锁实现3、Redisson 完成分布式锁1、简介2、配置3、使用分布式锁4、读写锁5、闭锁6、信号量7、缓存一致性解决8、缓存一致性-解决-canel 七、Spring cache1、简介2、基础概念3、注解4、表达式语法5、缓存穿透问题解决 一、基本介绍 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内做到心中有数。 使用压力测试我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是:内存泄漏并发与同步。 有效的压力测试系统将应用以下这些关键条件:重复并发量级随机变化。 1、性能指标  响应时间Response Time: RT 响应时间指用户从客户端发起一个请求开始到客户端接收到从服务器端返回的响应结束整个过程所耗费的时间。  HPSHits Per Second 每秒点击次数单位是次/秒。  TPSTransaction per Second系统每秒处理交易数单位是笔/秒。  QPSQuery per Second系统每秒处理查询次数单位是次/秒。 对于互联网业务中如果某些业务有且仅有一个请求连接那么 TPSQPSHPS一般情况下用 TPS 来衡量整个业务流程用 QPS 来衡量接口查询次数用 HPS 来表示对服务器单击请求。  无论 TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标越大越好根据经验一般情况下 金融行业1000TPS~50000TPS不包括互联网化的活动 保险行业100TPS~100000TPS不包括互联网化的活动 制造行业10TPS~5000TPS 互联网电子商务10000TPS~1000000TPS 互联网中型网站1000TPS~50000TPS 互联网小型网站500TPS~10000TPS  最大响应时间Max Response Time 指用户发出请求或者指令到系统做出反应响应的最大时间。  最少响应时间Mininum ResponseTime 指用户发出请求或者指令到系统做出反应响应的最少时间。  90%响应时间90% Response Time 是指所有用户的响应时间进行排序第 90%的响应时间。  从外部看性能测试主要关注如下三个指标 吞吐量每秒钟系统能够处理的请求数、任务数。 响应时间服务处理一个请求或一个任务的耗时。 错误率一批请求中结果出错的请求所占比例。 2、JMeter 1、JMeter 安装 https://jmeter.apache.org/download_jmeter.cgi 下载对应的压缩包解压运行 jmeter.bat 即可 2、JMeter 压测示例 1、添加线程组 线程组参数详解  线程数虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。  Ramp-Up Period(in seconds)准备时长设置的虚拟用户数需要多长时间全部启动。如果线程数为 10准备时长为 2那么需要 2 秒钟启动 10 个线程也就是每秒钟启动 5 个线程。  循环次数每个线程发送请求的次数。如果线程数为 10循环次数为 100那么每个线程发送 100 次请求。总请求数为 10*1001000 。如果勾选了“永远”那么所有线程会一直发送请求一到选择停止运行脚本。  Delay Thread creation until needed直到需要时延迟线程的创建。  调度器设置线程组启动的开始时间和结束时间(配置调度器时需要勾选循环次数为永远)  持续时间秒测试持续时间会覆盖结束时间  启动延迟秒测试延迟启动时间会覆盖启动时间  启动时间测试启动时间启动延迟会覆盖它。当启动时间已过手动只需测试时当前时间也会覆盖它。  结束时间测试结束时间持续时间会覆盖它。 2、添加 HTTP 请求 3、添加监听器 4、启动压测查看分析结果 结果分析  有错误率同开发确认确定是否允许错误的发生或者错误率允许在多大的范围内  Throughput 吞吐量每秒请求的数大于并发数则可以慢慢的往上面增加若在压测的机器性能很好的情况下出现吞吐量小于并发数说明并发数不能再增加了可以慢慢的往下减找到最佳的并发数  压测结束登陆相应的 web 服务器查看 CPU 等性能指标进行数据的分析;  最大的 tps不断的增加并发数加到 tps 达到一定值开始出现下降那么那个值就是最大的 tps。  最大的并发数最大的并发数和最大的 tps 是不同的概率一般不断增加并发数达到一个值后服务器出现请求超时则可认为该值为最大的并发数。  压测过程出现性能瓶颈若压力机任务管理器查看到的 cpu、网络和 cpu 都正常未达到 90%以上则可以说明服务器有问题压力机没有问题。  影响性能考虑点包括数据库、应用程序、中间件tomact、Nginx、网络和操作系统等方面  首先考虑自己的应用属于 CPU 密集型还是 IO 密集型。 3、JMeter Address Already in use 错误解决 windows 本身提供的端口访问机制的问题。 Windows 提供给 TCP/IP 链接的端口为 1024-5000并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。 1.cmd 中用 regedit 命令打开注册表 2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下 1 .右击 parameters添加一个新的 DWORD名字为 MaxUserPort 2 .然后双击 MaxUserPort输入数值数据为 65534基数选择十进制如果是分布式运行的话控制机器和负载机器都需要这样操作哦 3. 修改配置完毕之后记得重启机器才会生效 https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t TCPTimedWaitDelay30 二、性能监控 1、jvm 内存模型  程序计数器 Program Counter Register  记录的是正在执行的虚拟机字节码指令的地址  此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError的区域  虚拟机VM Stack  描述的是 JAVA 方法执行的内存模型每个方法在执行的时候都会创建一个栈帧用于存储局部变量表操作数栈动态链接方法接口等信息  局部变量表存储了编译期可知的各种基本数据类型、对象引用  线程请求的栈深度不够会报 StackOverflowError 异常  栈动态扩展的容量不够会报 OutOfMemoryError 异常  虚拟机栈是线程隔离的即每个线程都有自己独立的虚拟机栈  本地方法Native Stack  本地方法栈类似于虚拟机栈只不过本地方法栈使用的是本地方法  堆Heap  几乎所有的对象实例都在堆上分配内存 2、堆 所有的对象实例以及数组都要在堆上分配。堆是垃圾收集器管理的主要区域也被称为“GC堆”也是我们优化最多考虑的地方。 堆可以细分为  新生代  Eden 空间  From Survivor 空间  To Survivor 空间  老年代  永久代/元空间  Java8 以前永久代受 jvm 管理java8 以后元空间直接使用物理内存。因此默认情况下元空间的大小仅受本地内存限制。 垃圾回收 从 Java8 开始HotSpot 已经完全将永久代Permanent Generation移除取而代之的是一个新的区域—元空间MetaSpace。 3、jconsole 与 jvisualvm Jdk 的两个小工具 jconsole、jvisualvm升级版的 jconsole;通过命令行启动可监控本地和远程应用。远程应用需要配置。 本机安装了jdk,因此可以直接使用。 双击即可连接本地的 1、jvisualvm 能干什么 监控内存泄露跟踪垃圾回收执行时内存、cpu 分析线程分析… 运行正在运行的 休眠sleep 等待wait 驻留线程池里面的空闲线程 监视阻塞的线程正在等待锁 2、安装插件方便查看 gc  Cmd 启动 jvisualvm  工具-插件  如果 503 错误解决  打开网址 https://visualvm.github.io/pluginscenters.html  cmd 查看自己的 jdk 复制下面查询出来的链接。并重新设置上即可 4、监控指标 1、中间件指标  当前正在运行的线程数不能超过设定的最大值。一般情况下系统性能较好的情况下线程数最小值设置 50 和最大值设置 200 比较合适。  当前运行的 JDBC 连接数不能超过设定的最大值。一般情况下系统性能较好的情况下JDBC 最小值设置 50 和最大值设置 200 比较合适。  频率不能频繁特别是 FULL GC 更不能频繁一般情况下系统性能较好的情况下JVM 最小堆大小和最大堆大小分别设置 1024M 比较合适。 2、数据库指标  SQL 耗时越小越好一般情况下微秒级别。  命中率越高越好一般情况下不能低于 95%。  锁等待次数越低越好等待时间越短越好。  中间件越多性能损失越大大多都损失在网络交互了  业务  DbMySQL 优化  模板的渲染速度缓存  静态资源 5、JVM 分析调优 jvm 调优调的是稳定并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了保证服务的稳定gc 永远会是 Java 程序员需要考虑的不稳定因素之一。复杂和高并发下的服务必须保证每次 gc 不会出现性能下降各种性能指标不会出现波动gc 回收规律而且 干净找到合适的 jvm 设置。Full gc 最会影响性能根据代码问题避免 full gc 频率。可以适当调大年轻代容量让大对象可以在年轻代触发 yong gc调整大对象在年轻代的回收频次尽可能保证大对象在年轻代回收减小老年代缩短回收时间 1、几个常用工具 jstack 查看 jvm 线程运行状态是否有死锁现象等等信息 jinfo 可以输出并修改运行时的 java 进程的 opts。 jps 与 unix 上的 ps 类似用来显示本地的 java 进程可以查看本地运行着几个 java程序并显示他们的进程号。 jstat 一个极强的监视 VM 内存工具。可以用来监视 VM 内存内的各种堆和非堆的大小及其内存使用量。 jmap 打印出某个 java 进程使用 pid内存内的所有’对象’的情况如产生那些对象及其数量 2、命令示例 jstat 工具特别强大有众多的可选项详细查看堆内各个部分的使用量以及加载类的数量。使用时需加上查看进程的进程 id和所选参数。 jstat -class pid 显示加载 class 的数量及所占空间等信息 jstat -compiler pid 显示 VM 实时编译的数量等信息。 jstat -gc pid 可以显示 gc 的信息查看 gc 的次数及时间 jstat -gccapacity pid 堆内存统计三代young,old,perm内存使用和占用大小 jstat -gcnew pid 新生代垃圾回收统计 jstat -gcnewcapacity pid 新生代内存统计 jstat -gcold pid 老年代垃圾回收统计 除了以上一个参数外还可以同时加上 两个数字如jstat -printcompilation 3024 250 6 是每 250 毫秒打印一次一共打印 6 次还可以加上-h3 每三行显示一下标题。 jstat -gcutil pid 1000 100 : 1000ms 统计一次 gc 情况统计 100 次 在使用这些工具前先用 JPS 命令获取当前的每个 JVM 进程号然后选择要查看的 JVM。 jinfo 是 JDK 自带的命令可以用来查看正在运行的 java 应用程序的扩展参数包括 JavaSystem 属性和 JVM 命令行参数也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时jinfo 可以从 core 文件里面知道崩溃的 Java 应用程序的配置信息. jinfo pid 输出当前 jvm 进程的全部参数和系统属性 jinfo -flag name pid 可以查看指定的 jvm 参数的值打印结果-无此参数有 jinfo -flag [|-]name pid 开启或者关闭对应名称的参数无需重启虚拟机 jinfo -flag namevalue pid 修改指定参数的值 jinfo -flags pid 输出全部的参数 jinfo -sysprops pid 输出当前 jvm 进行的全部的系统属性 jmap 可以生成 heap dump 文件也可以查看堆内对象分析内存信息等如果不使用这个命令还可以使用-XX:HeapDumpOnOutOfMemoryError 参数来让虚拟机出现 OOM 的时候自动生成 dump 文件。 jmap -dump:live,formatb,filedump.hprof pid dump 堆到文件format 指定输出格式live 指明是活着的对象file 指定文件名。eclipse 可以打开这个文件 jmap -heap pid 打印 heap 的概要信息GC 使用的算法heap 的配置和使用情况可以用此来判断内存目前的使用情况以及垃圾回收情况 jmap -finalizerinfo pid 打印等待回收的对象信息 jmap -histo:live pid 打印堆的对象统计包括对象数、内存大小等。jmap -histo:live 这个命令执行JVM 会先触发 gc然后再统计信息 jmap -clstats pid 打印 Java 类加载器的智能统计信息对于每个类加载器而言对于每个类加载器而言它的名称活跃度地址父类加载器它所加载的类的数量和大小都会被打印。此外包含的字符串数量和大小也会被打印。 -F 强制模式。如果指定的 pid 没有响应请使用 jmap -dump 或 jmap -histo 选项。此模式下不支持 live 子选项。 jmap -F -histo pid jstack 是 jdk 自带的线程堆栈分析工具使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。 jstack pid 输出当前 jvm 进程的全部参数和系统属性 3、调优项 官方文档https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC 三、nginx动静分离 将自己项目里面的静态资源删除。 修改index.html的静态资源路径加上/static/ 重启商品服务访问首页静态资源没有获取到。 应该让nginx自己来找因此需要修改nginx的配置。 根据之前配置的es中的分词器来看从default.conf中可以看到静态资源放到/usr/share/nginx/html对应的挂载目录就是刚才index文件夹放的位置因为所有的静态资源在static下因此需要在zhenyanmall.conf中添加如下配置即可找到静态资源。刚才静态资源请求的路径是http://zhenyanmall.com/static/index/img/img_15.png根据域名解析zhenyanmall.com到nginx服务器当后面路径匹配到/static/时使用根路径/use/share/nginx/html/static/index/img/img_15.png 即可获取到图片 然后重新启动nginx,重新请求即可访问静态资源。 四、模拟线上应用内存崩溃宕机情况 打开缓存 设置启动内存 调用三级分类数据进行压力测试。 五、优化三级分类数据获取 1、将数据库多次查询变为一次 2、使用stream流 3、优化业务逻辑 4、也可以放到redis内存中查询的数据 六、缓存 1、本地缓存和分布式缓存 1、缓存使用 为了系统性能的提升我们一般都会将部分数据放入缓存中加速访问。而 db 承担数据落盘工作。 哪些数据适合放入缓存  即时性、数据一致性要求不高的  访问量大且更新频率不高的数据读多写少 举例电商类应用商品分类商品列表等适合缓存并加一个失效时间(根据数据更新频率来定)后台如果发布一个商品买家需要 5 分钟才能看到新的商品一般还是可以接受的。 data cache.load(id);//从缓存加载数据 If(data null){ data db.load(id);//从数据库加载数据 cache.put(id,data);//保存到 cache 中 } return data;注意在开发中凡是放入缓存中的数据我们都应该指定过期时间使其可以在系统即使没有主动更新数据也能自动触发数据加载进缓存的流程。避免业务崩溃导致的数据永久不一致问题。 2、整合 redis 作为缓存 1、引入 redis-starter dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency 2、配置 redis spring: redis: host: 192.168.56.10 port: 6379 3、使用 RedisTemplate 操作 redis Autowired StringRedisTemplate stringRedisTemplate; Test public void testStringRedisTemplate(){ ValueOperationsString, String ops stringRedisTemplate.opsForValue(); ops.set(hello,world_ UUID.randomUUID().toString()); String hello ops.get(hello); System.out.println(hello); } 4、切换使用 jedis dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId exclusions exclusion groupIdio.lettuce/groupId artifactIdlettuce-core/artifactId /exclusion /exclusions /dependency dependency groupIdredis.clients/groupId artifactIdjedis/artifactId /dependency2、缓存失效问题 先来解决大并发读情况下的缓存失效问题 1、缓存穿透  缓存穿透是指查询一个一定不存在的数据由于缓存是不命中将去查询数据库但是数据库也无此记录我们没有将这次查询的 null 写入缓存这将导致这个不存在的数据每次请求都要到存储层去查询失去了缓存的意义。  在流量大时可能 DB 就挂掉了要是有人利用不存在的 key 频繁攻击我们的应用这就是漏洞。  解决 缓存空结果、并且设置短的过期时间。 2、缓存雪崩  缓存雪崩是指在我们设置缓存时采用了相同的过期时间导致缓存在某一时刻同时失效请求全部转发到 DBDB 瞬时压力过重雪崩。  解决 原有的失效时间基础上增加一个随机值比如 1-5 分钟随机这样每一个缓存的过期时间的重复率就会降低就很难引发集体失效的事件。 3、缓存击穿  对于一些设置了过期时间的 key如果这些 key 可能会在某些时间点被超高并发地访问是一种非常“热点”的数据。  这个时候需要考虑一个问题如果这个 key 在大量请求同时进来前正好失效那么所有对这个 key 的数据查询都落到 db我们称为缓存击穿。  解决 加锁 3、缓存数据一致性 1、保证一致性模式 1、双写模式 2、失效模式 3、改进方法 1-分布式读写锁 分布式读写锁。读数据等待写数据整个操作完成 4、改进方法 2-使用 cananl 4、分布式锁 1、分布式锁与本地锁 2、分布式锁实现 使用 RedisTemplate 操作分布式锁 public MapString, ListCatelog2Vo getCatalogJsonFromDbWithRedisLock() { //1、占分布式锁。去 redis 占坑 String uuid UUID.randomUUID().toString(); Boolean lock redisTemplate.opsForValue().setIfAbsent(lock,uuid,300,TimeUnit.SECONDS); if(lock){ System.out.println(获取分布式锁成功...); //加锁成功... 执行业务 //2、设置过期时间必须和加锁是同步的原子的 //redisTemplate.expire(lock,30,TimeUnit.SECONDS); MapString, ListCatelog2Vo dataFromDb; try{ dataFromDb getDataFromDb(); }finally { String script if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end; //删除锁 Long lock1 redisTemplate.execute(new DefaultRedisScriptLong(script, Long.class) , Arrays.asList(lock), uuid); } //获取值对比对比成功删除原子操作 lua 脚本解锁 // String lockValue redisTemplate.opsForValue().get(lock); // if(uuid.equals(lockValue)){ // //删除我自己的锁 // redisTemplate.delete(lock);//删除锁 // } return dataFromDb; }else { //加锁失败...重试。synchronized () //休眠 100ms 重试 System.out.println(获取分布式锁失败...等待重试); try{ Thread.sleep(200); }catch (Exception e){ } return getCatalogJsonFromDbWithRedisLock();//自旋的方式 } }3、Redisson 完成分布式锁 1、简介 Redisson 是架设在 Redis 基础上的一个 Java 驻内存数据网格In-Memory Data Grid。充分的利用了 Redis 键值数据库提供的一系列优势基于 Java 实用工具包中常用接口为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务更进一步简化了分布式环境中程序相互之间的协作。 官方文档https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95 2、配置 dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.12.0/version/dependency// 默认连接地址 127.0.0.1:6379 RedissonClient redisson Redisson.create(); Config config new Config(); //redis://127.0.0.1:7181 //可以用rediss://来启用 SSL 连接 config.useSingleServer().setAddress(redis://192.168.56.10:6379); RedissonClient redisson Redisson.create(config);3、使用分布式锁 RLock lock redisson.getLock(anyLock);// 最常见的使用方法 lock.lock(); // 加锁以后 10 秒钟自动解锁// 无需调用 unlock 方法手动解锁 lock.lock(10, TimeUnit.SECONDS); // 尝试加锁最多等待 100 秒上锁以后 10 秒自动解锁 boolean res lock.tryLock(100, 10, TimeUnit.SECONDS); if (res) { try { ... } finally { lock.unlock(); } }看门狗原理1、业务运行期间帮我们锁进行自动续期2、为了防止死锁加的锁默认30s过期时间即使业务宕机没有调用解锁代码redis也会对他进行自动解锁。 自动解锁时间一定要大于业务的执行时间。 4、读写锁 只要锁名一样就是同一把读写锁业务要读的时候加读锁业务要写的时候加写锁如果别人正在修改数据要读取最新数据就要等待别人把写锁释放了才可以读取数据如果大家都是并发读那么互不影响并发写的话肯定需要一一排队所以读写锁总是成对出现的。写锁控制了读锁只要写锁存在我的读锁就要等待。 5、闭锁 6、信号量 7、缓存一致性解决 最终一致性和强一致性最终一致性就是今天修改了描述明天看到结果也是一样的实时性要求不搞。 强一致性实时性要求比较高。 8、缓存一致性-解决-canel canel是阿里开源的一个中间件服务器可以模拟是数据库的一个从服务器从服务的特点就是mysql里面有什么变化从服务就会同步过去。 只要业务代码更新了数据库我们的mysql数据库开启binlog二进制日志mysql什么东西更新了canel就假装mysql的一个从库mysql的每一更新都拿过去然后再去redis更新对应的数据。这种好处就是我们在编码期间只需要改数据库就可以了不用管缓存的任何操作缺点就是又加了一个中间件还要额外自定义一些功能要对组件进行维护好处就是一次开发成型后面就不用管缓存这些事情了。 canel在大数据情况下更是解决异构问题大家去京东每一个人的首页都不同首页推荐的商品都不一样基于你的爱好喜欢数码产品就推荐数码产品喜欢衣服就推荐衣服。 比如数据库中哪一个人浏览了哪些商品有一个商品记录表库里面也有一些商品信息表购物车里面有购物车相关的表只要给购物车里面添加了什么我们都知道。 我们只要一进京东首页推荐一些与我相关感兴趣的商品我们可以使用cannel,实时的订阅我们访问的记录表也订阅一些商品信息表这样cannel就知道有哪些商品哪些访问记录然后通过这些东西做一些分析计算生成另外一张表用户推荐表canel把你每天的访问记录拿到计算你喜欢的商品因此只需要根据推荐表拿到当前感兴趣的商品即可。 七、Spring cache 1、简介  Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术 并支持使用 JCacheJSR-107注解简化我们开发  Cache 接口为缓存的组件规范定义包含缓存的各种操作集合 Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 如 RedisCache EhCacheCache , ConcurrentMapCache 等  每次调用需要缓存功能的方法时Spring 会检查检查指定参数的指定的目标方法是否已经被调用过如果有就直接从缓存中获取方法调用后的结果如果没有就调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。  使用 Spring 缓存抽象时我们需要关注以下两点  1、确定方法需要被缓存以及他们的缓存策略  2、从缓存中读取之前缓存存储的数据 2、基础概念 3、注解 4、表达式语法 5、缓存穿透问题解决 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-cache/artifactId /dependency 允许 null 值缓存EnableCaching 只需要使用注解即可完成缓存操作。 在application.properties中添加配置spring.cache.typeredis 缓存自定义配置
http://www.yutouwan.com/news/13316/

相关文章:

  • 禅城区建设局网站百度订单售后电话
  • 青岛英文网站建设电商网站制作设计
  • 网站的设计方案wordpress和
  • 站内免费推广价格查询网
  • 无需注册网站模板下载上海网站开发孵化
  • 江西省住房和城乡建设厅的网站教做详情页的网站
  • 做网站能赚钱吗知乎wordpress导航字体大小
  • 要想提高网站排名应该如何做家具能在什么网站上做
  • 大连做网站 选领超科技网站建设合同要存档几年
  • 更改wordpress主题语言包南京百度快速排名优化
  • 晟合建设集团网站上海网站建设服务公司
  • 已备案个人网站做淘宝客动态图片在线制作
  • 网站开发前途长沙企业建站
  • 怀化组织部网站编程除了做网站还能干什么
  • 网站百度排名旅行社网站模板
  • 重庆网站制作长沙优化方案2021版语文答案
  • 江苏省实训基地建设网站网站分类查询
  • 水文站网站建设应当坚持单位网站建设费算无形资产吗
  • 招商网站办公家具 技术支持 东莞网站建设
  • 临沂建设质量监督站网站网站建设需要哪些常用技术
  • 抚松网站建设灵台门户网站建设
  • 有什么网站是专做婚礼素材的南京江宁网站制作
  • editplus怎么创网站电商运营网站设计
  • 医疗网站建设机构分类导航wordpress
  • 安徽做网站找谁怎么上传图片到公司网站
  • 零基础 网站百度指数怎么用
  • 建筑公司网站设计模板商城网站免费建设
  • 网站开发的问题企业管理专业大学排名
  • 乐山旅游 英文网站建设网站a记录吗
  • 绍兴专业制作网站做商业广告有什么网站好推销的