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

自己 做 网站校本教研网站建设

自己 做 网站,校本教研网站建设,c2c模式介绍,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.1.初识Caffeine 缓存在日常开发中启动至关重要的作用,由于是存储在内存中,数据的读取速度是非常快的,能大量减少对数据库的访问,减少数据库的压力。我们把缓存分为两类: 分布式缓存,例如Redis: 优点:存储容量更大、可靠性更好、可以在集群间共享 缺点:访问缓存有网络开销 场景:缓存数据量较大、可靠性要求较高、需要在集群间共享 进程本地缓存,例如HashMap、GuavaCache: 优点:读取本地内存,没有网络开销,速度更快 缺点:存储容量有限、可靠性较低、无法共享 场景:性能要求较高,缓存数据量较小 我们今天会利用Caffeine框架来实现JVM进程缓存。 Caffeine是一个基于Java8开发的,提供了近乎最佳命中率的高性能的本地缓存库。目前Spring内部的缓存使用的就是Caffeine。 Caffeine的性能非常好,下图是官方给出的性能对比: 可以看到Caffeine的性能遥遥领先! 缓存使用的基本API: @Testvoid 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.2.实现JVM进程缓存 2.2.1.需求 利用Caffeine实现下列需求: 给根据id查询商品的业务添加缓存,缓存未命中时查询数据库 给根据id查询商品库存的业务添加缓存,缓存未命中时查询数据库 缓存初始大小为100 缓存上限为10000 2.2.2.实现 首先,我们需要定义两个Caffeine的缓存对象,分别保存商品、库存的缓存数据。 @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();} } @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语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:The Programming Language Lua Lua经常嵌入到C语言开发的程序中,例如游戏开发、游戏插件等。 Nginx本身也是C语言开发,因此也允许基于Lua做拓展。 3.1.HelloWorld CentOS7默认已经安装了Lua语言环境,所以可以直接运行Lua代码。 1)在Linux虚拟机的任意目录下,新建一个hello.lua文件 2)添加下面的内容 print("Hello World!") 3)运行 任意地方输出lua便可进入lua控制台 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 = true Lua中的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开始 Lua中的table可以用key来访问: -- 访问table print(map['name']) print(map.name) 3.2.3.循环 对于table,我们可以利用for循环来遍历。不过数组和普通table遍历略有差异。 遍历数组: -- 声明数组 key为索引的 table 数组——ipairs local arr = {'java', 'python', 'lua'} -- 遍历数组 for index,value in ipairs(arr) do print(index, value) end 遍历普通table -- 声明map,也就是table map-pairs local map = {name=
http://www.zqtcl.cn/news/500444/

相关文章:

  • 有没有IT做兼职的网站百度收录入口提交
  • 普洱市建设局网站重庆工程建设信息查询
  • 上海网站设计多少钱wap网站生成微信小程序
  • 广州网站到首页排名做图骂人的图片网站
  • 公司的网站建设价格wordpress付费阅读文章功能
  • 飞鸽网站建设建设网站什么软件比较好
  • 网站名称 规则网站seo完整seo优化方案
  • 昆明网站建设高端定制wordpress建站课程
  • 建网站外包wordpress 便利贴
  • 硅胶 技术支持 东莞网站建设网站互联网接入商
  • 太平洋建设21局网站微信网页版登录手机版
  • 站长统计芭乐鸭脖小猪电商平台哪个最好
  • 女与男爱做电影网站免费企业公司网站建设方案
  • 尚品本色木门网站是哪个公司做的大庆建设公司网站
  • 做网做网站建设的网站怎么用别人网站做模板
  • 电子商务网站购物车怎么做网站站点创建成功是什么意思
  • 如何做招聘网站的评估新浪微博可以做网站吗
  • 加强网站建设的制度wordpress如何清空
  • 轻松筹 的网站价格做网站建设意识形态
  • 有.net源码如何做网站湖南宣传片制作公司
  • dede网站模板怎么安装教程青岛需要做网站的公司
  • 静态双语企业网站后台源码北京网站关键词优化
  • 石家庄手机网站建设公司wordpress侧边栏显示子分类文字数
  • 公司网站客户案例个人做 网站2019
  • 个人网站怎么申请销售策划
  • 网站被黑 禁止js跳转企业为什么要建立集团
  • 建设网站的各种问题上海品牌女装排行榜前十名
  • seo优化搜索引擎网站优化推广网络关键词优化-乐之家网络科技商城网站备案能通过吗
  • 江门网站建设推广策划网站改版的宣传词
  • 网站建设三大部分国外购物平台网页界面设计