缓存

Redis学习

空扰寡人 提交于 2020-03-30 22:15:34
学习自《Redis开发与运维(付磊)》 目录 简介 特性 使用原因 高性能 高并发 典型使用场景 缓存 排行榜 计数器 社交网络 消息队列 API使用 全局命令 支持的数据结构 String Hash List Set Sorted Set (ZSet) 简介 Redis是一种基于键值对(key-value)的NoSQL数据库。 特性 速度快 Redis的数据都存放在内存中,代码通过C语言实现,使用了单线程的IO多路复用机制,这些都使得redis的读写速度非常快。 基于键值对的数据结构服务器 Redis全称是remote dictionary server,即远程字典服务器。很多编程语言都提供了字典的功能,即基于键值对的方式存储数据。Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。 功能丰富 Redis提供的功能如下: 提供了键过期功能,可以用来实现缓存。 提供了发布订阅功能,可以用来实现消息系统。 支持Lua脚本功能,可以利用Lua创造出新的Redis命令。 提供了简单的事务功能,能在一定程度上保证事务特性。 提供了流水线功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。 简单稳定 Redis的简单主要体现在三个方面: Redis的源码很少,早期版本的代码只有2万行左右,3

微擎框架的缓存机制实现源码解读

寵の児 提交于 2020-03-30 17:45:56
首先,在配置文件中有如下配置: # /data/config.php $config['setting']['cache'] = 'mysql'; 然后,在框架入口中会加载缓存相关文件: # /framework/bootstrap.inc.php if (!in_array($_W['config']['setting']['cache'], array('mysql', 'memcache', 'redis'))) { $_W['config']['setting']['cache'] = 'mysql'; } load()->func('cache'); 然后,在缓存方法中会加载实际使用的缓存类: # /framework/function/cache.func.php load()->func('cache.' . cache_type()); function cache_type() { $cache_type = strtolower($_W['config']['setting']['cache']); // 实例化 Memcache 或 Redis // 连接 cache 对应的服务器 // ... return $cache_type; } 最后,在缓存类中提供了读写缓存的方法: # /framework/function/cache.xxx.func.php

浏览器从接收到一个url,到最后的页面展示,经历的过程:

血红的双手。 提交于 2020-03-30 15:21:58
浏览器从接收到一个url,到最后的页面展示,其中经历了哪些过程?又会用到哪些协议呢? 原文连接: https://blog.csdn.net/ZHLittleRed/article/details/82947330#1_DNS_3 1、在浏览器地址栏中输入URL 2、DNS域名解析,获得域名相对应的IP地址。 具体什么是DNS? DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示 当我们在浏览器输入如同www.baidu.com的时候,其实这些网站的名字都是微克简化人们的记忆来命名的 ,计算机其实并不认识这个东西。浏览器只认识IP地址,所以当输入域名地址的时候,浏览器首先会从浏览器缓存中是否存在相应的域名、IP对应关系,如果有则向这个IP地址发送请求,如果没有则向系统缓存--路由缓存中查找,如果都没有,再去DNS服务器中找IP。 3、浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手 4、浏览器向服务器发送HTTP请求,请求数据包 与服务器建立了连接后,就可以向服务器发起请求了。发送HTTP请求的过程就是构建HTTP请求报文,并通过TCP协议发送到服务器指定端口

mybatis的缓存2

余生颓废 提交于 2020-03-30 15:04:13
原文:https://blog.csdn.net/qq_38274974/article/details/100898145 mybatis的缓存分为一级缓存、二级缓存 那么,我们为什么要使用缓存呢? 对于经常查询的并且不经常改变的数据,如果每次查询都要与数据库进行交互,这样就大大降低了效率,所以这里就引入了缓存,将一些对结果影响不大且经常查询的数据存放在内存中,从而减少与数据库的交互来提高效率,这就是缓存的优势。 一级缓存 一级缓存是SqlSession级别的缓存(默认是支持一级缓存,不需要再配置文件中配置一级缓存),在操作数据库时,每个SqlSession类的实例对象中有一个数据结构(HashMap)可以用来存储缓存数据,不同的SqlSession类的实例对象缓存的数据区域(HashMap)是互不影响的。当在同一个SqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据写到内存中,第二次查询不执行sql直接从内存中获取。 public class MyBatisTest { //mybatis的一级缓存,是SqlSession级别的缓存,只有一个SqlSession对象。 @Test public void test1(){ SqlSessionFactory ssf=MyBatisUtil.getFactory(); SqlSession session

一次 Web 请求到底发生了什么

蓝咒 提交于 2020-03-30 13:42:09
一次 Web 请求到底发生了什么 一、从输入一个网址开始 当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面。网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 本文主要内容是试图记录一个完整 Web 请求的详细过程,从用户在浏览器中输入 URL 地址说起,然后浏览器如何找到服务器地址的过程,并发起请求;分析请求在达反向代理服务器内部处理过程;最后到请求在服务器端处理完成后,浏览器渲染响应页面过程。 大致过程如下: Web请求的工作原理可以简单地归纳为: 浏览器通过 DNS 把域名解析成对应的IP地址; 根据这个 IP 地址在互联网上找到对应的服务器,建立 Socket 连接; 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档; 在服务器端,实际上还有复杂的业务逻辑:服务器可能有多台,到底指定哪台服务器处理请求,这需要一个负载均衡设备来平均分配所有用户的请求; 还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里; 当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如:css,js或者图片)时又会发起另外的请求,而这些请求可能会在CDN上,那么CDN服务器又会处理这个用户的请求。 客户端与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。 一个 HTTP 事务就是这样实现的,看起来很简单,原理其实是挺负责的

基础架构(1)

柔情痞子 提交于 2020-03-30 11:26:00
MySQL 分为两部分: Server 层 包含连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层 负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB 、 MyISAM 、 Memory 等多个存储引擎, MySQL 5.5.5 版本开始 InnoDB 为默认的存储引擎。 Server 层 : 连接器 负责跟客户端建立连接、获取权限、维持和管理连接 mysql -h$ip -P$port -u$user -p //连接数据库 输入密码后,如果用户名或密码不对,则会提示 Access denied for user ,如果认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖此时读到的权限。 show processlist //显示所有连接 查询缓存 命中则直接返回结果。 MySQL 拿到查询请求后,会先到查询缓存看看,之前是否执行过这条语句,之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中, key 为 sql 语句,有则返回。没有就会进行分析器以后的流程,执行完成后结果会被存入查询缓存。当表中有执行更新操作时

优化网站设计(十四):使AJAX调用尽可能利用缓存特性

浪子不回头ぞ 提交于 2020-03-30 09:40:38
前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议。这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题。 作为通用的原则,雅虎的工程师团队曾经给出过35个最佳实践。这个列表请参考 Best Practices for Speeding Up Your Web Site http://developer.yahoo.com/performance/rules.html ,同时,他们还发布了一个相应的测试工具Yslow http://developer.yahoo.com/yslow/ 我强烈推荐所有的网站开发人员都应该学习这些最佳实践,并结合自己的实际项目情况进行应用。 接下来的一段时间,我将结合ASP.NET这个开发平台,针对这些原则,通过一个系列文章的形式,做些讲解和演绎,以帮助大家更好地理解这些原则,并且更好地使用他们。 准备工作 为了跟随我进行后续的学习,你需要准备如下的开发环境和工具 Google Chrome 或者firefox ,并且安装 Yslow这个扩展组件.请注意,这个组件是雅虎提供的,但目前没有针对IE的版本。 https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh https://addons.mozilla

android 清除缓存功能

我只是一个虾纸丫 提交于 2020-03-30 05:47:01
本应用数据清除管理器 DataCleanManager.java 是从网上摘的 忘了 名字了 对不住了 载入一个webview 产生缓存 众所周知的webview是产生缓存的主要原因之中的一个 webview载入之后 点击button 查询缓存 然后清除缓存 再查询缓存 能够看到 缓存确实被清除了 或者咋webview载入之后 点击button查询缓存 然后去设置里面应用程序 看程序的缓存是不是一样的 答案肯定是一样 以下是代码 DataCleanManager.java package com.yqy.yqy_cache; /* * 文 件 名: DataCleanManager.java * 描 述: 主要功能有清除内/外缓存。清除数据库,清除sharedPreference,清除files和清除自己定义文件夹 */ import java.io.File; import java.math.BigDecimal; import android.content.Context; import android.os.Environment; /** * 本应用数据清除管理器 */ public class DataCleanManager { public static String getTotalCacheSize(Context context) throws

浅谈前端工程化

一笑奈何 提交于 2020-03-29 22:59:37
这段时间对项目做了一次整体的优化,全站有了20%左右的提升(本来载入速度已经1.2S左右了,优化度很低),算一算已经做了四轮的全站性能优化了,回顾几次的优化手段,基本上几个字就能说清楚: 传输层面:减少请求数,降低请求量执行层面:减少重绘&回流 传输层面的从来都是优化的核心点,而这个层面的优化要对浏览器有一个基本的认识,比如: ① 网页自上而下的解析渲染,边解析边渲染,页面内CSS文件会阻塞渲染,异步CSS文件会导致回流 ② 浏览器在document下载结束会检测静态资源,新开线程下载(有并发上限),在带宽限制的条件下,无序并发会导致主资源速度下降,从而影响首屏渲染 ③ 浏览器缓存可用时会使用缓存资源,这个时候可以避免请求体的传输,对性能有极大提高 衡量性能的重要指标为首屏载入速度(指页面可以看见,不一定可交互),影响首屏的最大因素为请求,所以请求是页面真正的杀手,一般来说我们会做这些优化: 减少请求数 ① 合并样式、脚本文件 ② 合并背景图片 ③ CSS3图标、Icon Font 降低请求量 ① 开启GZip ② 优化静态资源,jQuery->Zepto、阉割IScroll、去除冗余代码 ③ 图片无损压缩 ④ 图片延迟加载 ⑤ 减少Cookie携带 很多时候,我们也会采用类似“时间换空间、空间换时间”的做法,比如: ① 缓存为王,对更新较缓慢的资源&接口做缓存(浏览器缓存

深入理解Spring系列之十三:IntrospectorCleanupListener解析

故事扮演 提交于 2020-03-29 21:11:30
Introspector作用及影响 在分析IntrospectorCleanupListener之前,先了解一下Introspector。Introspector是JDK中java.beans包下的类,它为目标JavaBean提供了一种了解原类方法、属性和事件的标准方法。通俗的说,就是可以通过Introspector构建一个BeanInfo对象,而这个BeanInfo对象中包含了目标类中的属性、方法和事件的描述信息,然后可以使用这个BeanInfo对象对目标对象进行相关操作。 下面看一个简单的示例会很容易明白。为了简单,Student类中只有一个name属性。 结果输出:Student{name='张三'} 通过查看Introspector.getBeanInfo方法的源码会发现,Introspector在构建一个BeanInfo对象的时候,会将构建的BeanInfo对象和原类缓存到一个Map中,源码如下。 通过上的代码可以得出,Introspector间接持有了BeanInfo的强引用。如果使用Introspector操作了很多类,那么Introspector将间接持有这些BeanInfo的强引用。在发生垃圾收集的时候,检测到这些BeanInfo存在引用链,则这些类和对应的类加载器将不会被垃圾收集器回收,进而导致内存泄漏。所以,为了解决这个问题