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

自己做项目的网站wordpress登陆页背景

自己做项目的网站,wordpress登陆页背景,新营销平台电商网站,大气简约企业网站模板免费下载1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分…1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能: 浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地缓存如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat)如果Redis查询未命中,则查询Tomcat请求进入Tomcat后,优先查询JVM进程缓存如果JVM进程缓存未命中,则查询数据库 在多级缓存架构中,Nginx内部需要编写本地缓存查询、Redis查询、Tomcat查询的业务逻辑,因此这样的nginx服务不再是一个反向代理服务器,而是一个编写业务的Web服务器了。 因此这样的业务Nginx服务也需要搭建集群来提高并发,再有专门的nginx服务来做反向代理,如图: 另外,我们的Tomcat服务将来也会部署为集群模式: 可见,多级缓存的关键有两个: 一个是在nginx中编写业务,实现nginx本地缓存、Redis、Tomcat的查询 另一个就是在Tomcat中实现JVM进程缓存 其中Nginx编程则会用到OpenResty框架结合Lua这样的语言。 2.JVM进程缓存 2.2.初识Caffeine 缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。我们把缓存分为两类: 分布式缓存,例如Redis: 优点:存储容量更大、可靠性更好、可以在集群间共享缺点:访问缓存有网络开销场景:缓存数据量较大、可靠性要求较高、需要在集群间共享 进程本地缓存,例如HashMap、GuavaCache: 优点:读取本地内存,没有网络开销,速度更快缺点:存储容量有限、可靠性较低、无法共享场景:性能要求较高,缓存数据量较小 利用Caffeine框架来实现JVM进程缓存。 Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。GitHub地址:https://github.com/ben-manes/caffeine 缓存使用的基本API: @Test void testBasicOps() {// 构建cache对象CacheString, String cache = Caffeine.newBuilder().build();// 存数据cache.put("gf", "迪丽热巴");// 取数据String gf = cache.getIfPresent("gf");System.out.println("gf = " + gf);// 取数据,包含两个参数:// 参数一:缓存的key// 参数二:Lambda表达式,表达式参数就是缓存的key,方法体是查询数据库的逻辑// 优先根据key查询JVM缓存,如果未命中,则执行参数二的Lambda表达式String defaultGF = cache.get("defaultGF", key - {// 根据key去数据库查询数据return "柳岩";});System.out.println("defaultGF = " + defaultGF); }Caffeine既然是缓存的一种,肯定需要有缓存的清除策略,不然的话内存总会有耗尽的时候。 Caffeine提供了三种缓存驱逐策略: 基于容量:设置缓存的数量上限 // 创建缓存对象 CacheString, String cache = Caffeine.newBuilder().maximumSize(1) // 设置缓存大小上限为 1.build();基于时间:设置缓存的有效时间 // 创建缓存对象 CacheString, String cache = Caffeine.newBuilder()// 设置缓存有效期为 10 秒,从最后一次写入开始计时 .expireAfterWrite(Duration.ofSeconds(10)) .build(); 基于引用:设置缓存为软引用或弱引用,利用GC来回收缓存数据。性能较差,不建议使用。 注意:在默认情况下,当一个缓存元素过期的时候,Caffeine不会自动立即将其清理和驱逐。而是在一次读或写操作后,或者在空闲时间完成对失效数据的驱逐。 2.3.实现JVM进程缓存 2.3.1.需求 利用Caffeine实现下列需求: 给根据id查询商品的业务添加缓存,缓存未命中时查询数据库给根据id查询商品库存的业务添加缓存,缓存未命中时查询数据库缓存初始大小为100缓存上限为100002.3.2.实现 首先,我们需要定义两个Caffeine的缓存对象,分别保存商品、库存的缓存数据。 在item-service的com.heima.item.config包下定义CaffeineConfig类: package com.heima.item.config;import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import com.heima.item.pojo.Item; import com.heima.item.pojo.ItemStock; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class CaffeineConfig {@Beanpublic CacheLong, Item itemCache(){return Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).build();}@Beanpublic CacheLong, ItemStock stockCache(){return Caffeine.newBuilder().initialCapacity(100).maximumSize(10_000).build();} }然后,修改item-service中的com.heima.item.web包下的ItemController类,添加缓存逻辑: @RestController @RequestMapping("item") public class ItemController {@Autowiredprivate IItemService itemService;@Autowiredprivate IItemStockService stockService;@Autowiredprivate CacheLong, Item itemCache;@Autowiredprivate CacheLong, ItemStock stockCache;// ...其它略@GetMapping("/{id}")public Item findById(@PathVariable("id") Long id) {return itemCache.get(id, key - itemService.query().ne("status", 3).eq("id", key).one());}@GetMapping("/stock/{id}")public ItemStock findStockById(@PathVariable("id") Long id) {return stockCache.get(id, key - stockService.getById(key));} }3.Lua语法入门 Nginx编程需要用到Lua语言,因此我们必须先入门Lua的基本语法。 3.1.初识Lua Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/ 3.1.HelloWorld CentOS7默认已经安装了Lua语言环境,所以可以直接运行Lua代码。 1)在Linux虚拟机的任意目录下,新建一个hello.lua文件 2)添加下面的内容 print("Hello World!") 3)运行 3.2.变量和循环 3.2.1.Lua的数据类型 Lua中支持的常见数据类型包括: 另外,Lua提供了type()函数来判断一个变量的数据类型: 3.2.2.声明变量 Lua声明变量的时候无需指定数据类型,而是用local来声明变量为局部变量: -- 声明字符串,可以用单引号或双引号, local str = 'hello' -- 字符串拼接可以使用 .. local str2 = 'hello' .. 'world' -- 声明数字 local num = 21 -- 声明布尔类型 local flag = trueLua中的table类型既可以作为数组,又可以作为Java中的map来使用。数组就是特殊的table,key是数组角标而已: -- 声明数组 ,key为角标的 table local arr = {'java', 'python', 'lua'} -- 声明table,类似java的map local map = {name='Jack', age=21}Lua中的数组角标是从1开始,访问的时候与Java中类似: -- 访问数组,lua数组的角标从1开始 print(arr[1])Lua中的table可以用key来访问: -- 访问table print(map['name']) print(map.name)3.2.3.循环 对于table,我们可以利用for循环来遍历。不过数组和普通table遍历略有差异。 遍历数组: -- 声明数组 key为索引的 table local arr = {'java', 'python', 'lua'} -- 遍历数组 for index,value in ipairs(arr) doprint(index, value) end遍历普通table -- 声明map,也就是table local map = {name='Jack', age=21} -- 遍历table for key,value in pairs(map) doprint(key, value) end3.3.条件控制、函数 Lua中的条件控制和函数声明与Java类似。 3.3.1.函数 定义函数的语法:
http://www.hkea.cn/news/14537104/

相关文章:

  • 学校网站asp优秀的软文广告欣赏
  • 哪个行业对网站建设需求大哪家企业网站建设好
  • 做ic哪些网站好做山西 网站建设
  • html做的网页怎么变成网站学网站设计培训电话
  • 佛山网站建设公司怎么选长沙装修网站排名
  • 池州网站制作大连做网站谁家好
  • 网站美化教程下载wordpress自定义字段类型
  • 网络公司网站设计多少钱青海wap网站建设公司
  • 上海外贸soho网站建设网站开发工作量
  • 湖北平台网站建设制作网站制作需要网站制作
  • 深圳企业社保网站官网贵州省中海工程建设有限公司网站
  • 外销网站建设国内最新消息
  • 腾讯云做网站步骤网站建设有利于
  • 网站申请备案成功后怎么建设电子商务网站建设市场分析
  • 公司备案网站名称重写Wordpress的js
  • 网站微信建设运维经验pos机做网站推广
  • 山东卓创 网站建设东莞网站建设包装制品
  • 建设银行官网首页 网站一级网站和二级网站的区别
  • 网站如何做引流做网站具体流程
  • 免费个人微网站模板柳州免费做网站的公司
  • 惠州建设银行行号查询网站乐陵网站建设
  • 网站建设 天津世界顶尖名表瑞士网站不要中国手表网站
  • 潍坊网站优化公司廊坊首页霸屏排名优化
  • 网站默认后台登陆升级网站
  • 网页设计网站多少钱网站需要维护
  • 网站开发业务流程网站封面怎么做
  • 大连城乡建设网站网站建设项目需求书
  • 网站运营与管理试卷最佳商城ui网站设计
  • 做网站还得备案白石桥做网站公司
  • 做app的网站有哪些功能吗o2o模式是什么意思通俗讲