缓存
缓存概念
- 根据数据使用的规则,二八规律:有20%的数据最常用,加载入缓存/有80%的数据不常用,最好不占用缓存
- 不一定是缓存的数据库结果,而是缓存业务结果(数据库的结果经过一些处理)
外存 : 计算机内存与CPU缓存之外的储存器,一般断电数据不丢失,用于数据持久化
内存 : 外存与CPU沟通的桥梁,一般断电之后数据也会被清空
缓存 : 把一些外存的数据存到内存而已 java中一般缓存通过Map来实现的,广义的缓存就是把一些慢存的数据保存到快存上,加快系统运行的速度和效率
常见的缓存举例
CPU的一级缓存、二级缓存
maven的本地仓库
京东的仓储
数据库的索引,以空间换取时间
什么样的数据适合缓存?
- 访问频率高 – 读多写少
- 更改频率低
- 一致性要求不高(比如转账,金融项目不适合大量缓存的原因)
为什么缓存速度快? 内存速度 > 磁盘速度
缓存效能? 最小内存(昂贵)-> 最大功用
重要的指标:
总读取次数 = 从缓存中读取次数 + 从慢速设备上读取的次数
命中率 = 从缓存中读取次数 / 总读取次数
Miss率 = 没有从缓存中读取的次数 / 总读取次数
缓存的命中率是表明缓存是否运行良好的指标,做缓存一定要监控这个指标
缓存在java中的实现
首先需要配置好缓存管理器
import java.lang.reflect.Method;
import java.time.Duration;import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;@Configuration
@EnableCaching
public class CaCheConfig extends CachingConfigurerSupport {//不支持过期时间// @Bean// public CacheManager cacheManager() {// //jdk里,内存管理器// SimpleCacheManager cacheManager = new SimpleCacheManager();// cacheManager.setCaches(Collections.singletonList(new ConcurrentMapCache("province")));// return cacheManager;// }@Beanpublic CacheManager cacheManager(RedisConnectionFactory connectionFactory) {return RedisCacheManager.builder(connectionFactory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig()// 缓存时间绝对 过期时间 20s.entryTtl(Duration.ofSeconds(20))).transactionAware().build();}@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(factory);Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper mapper = new ObjectMapper();mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(mapper);template.setValueSerializer(serializer);//使用StringRedisSerializer来序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());template.afterPropertiesSet();return template;}
}
查询数据时的缓存实现逻辑
- 从缓存中读取数据
- 如果命中,直接返回
- 如果未命中,则查询数据库,并将数据加入到缓存中
@Resource
private CacheManager cacheManager;private static final String CACHE_NAME = "province";@Override
public Provinces detail(String provinceid) {// 1. 从缓存中取数据ValueWrapper valueWrapper = cacheManager.getCache(CACHE_NAME).get(provinceid);if (valueWrapper != null) {// 当然实际过程中 还需要统计缓存命中率参数 如果缓存命中率过低 没有使用缓存的必要logger.info("缓存中得到数据");return (Provinces) valueWrapper.get();}// 2. 从数据库查询数据Provinces provinces = super.detail(provinceid);// 3. 从数据库查询的结果不为空,则把数据放入缓存中,方便下次查询if (null != provinces) {logger.info("缓存中得到数据");cacheManager.getCache(CACHE_NAME).put(provinceid, provinces);}return provinces;
}
更新数据时的缓存实现逻辑
更新数据时,要进行双删,更改之前和更改之后都进行删除。
为啥要在更改之前进行删除?如果不进行更改前删除,但是后续更改数据库成功,但是更改之后的删除缓存失败,就会导致缓存的不一致了。
为啥要在更改之后进行删除?因为在你进行更改的过程中,可能存在其他线程进行数据库的查询,而且查询通常比
更新要快,因此在更改完成之前又存在了缓存数据。(第二次删除变为存储缓存?)
在更新数据库之前更新缓存,但此时未必就能得到业务结果(输入为key,返回为业务结果,从key到业务结果还有一段路程),通过delete,
实现最简单,不引入业务复杂度
双删不是必须的,提高缓存一致性
@Override
public Provinces update(Provinces entity) {cacheManager.getCache(CACHE_NAME).evict(entity.getProvinceid());provincesDao.update(entity);cacheManager.getCache(CACHE_NAME).evict(entity.getProvinceid());return entity;
}
代码优化空间分析–逻辑上的变与不变
- 缓存如何使用,它的使用流程框架可以确定,不会再有变化—可抽象成一段宏观的模板性代码
- 具体缓存器内部怎么实现,用什么来实现(redis?Memcache?java数组),现在无法确定,但是可以甩锅(只提需求接口)----cache接口
- 上述两点结合,就是一个天然的设计模式—模板方法模式
- 模板方法模式:即先设计出主业务流程,如下面代码:
------主设计师设计出detail方法的流程
----1. 从mysql中查询一条数据
----2. 将数据返回
----3. mysql数据具体怎么查 我不管
SpringCache的使用
SpringCache的使用(不仅仅是redis,还有es、mongodb 比如abcde搜索,五个元素的排列组合,数据大膨胀,使用es)
- SpringCache统一定义了缓存器Cache接口 org.springframework.cache.Cache
- SpringCache还规定这些缓存器必须要有一个管理器来管理它们 org.springframework.cache.CacheManager
(1) manager负责创建/查找缓存器,查找过程,以key-value形式记录映射关系
(2)rediscache的manager实现了cache的自动创建,即当你指定的cache不存在时,自动创建一个供你使用
(3)通过标签进行标注
key的自定义
第一种 :使用SPEL表达式指定
第二种: 扩展key的生成机制 org.springframework.cache.interceptor.KeyGenerator
/*** key的生成 springcache的内容 跟具体实现缓存器有关*/
@Bean
public KeyGenerator keyGenerator() {return new KeyGenerator() {@Overridepublic Object generate(Object target, Method method, Object... params) {StringBuilder sb = new StringBuilder();sb.append(target.getClass().getSimpleName());sb.append(method.getName());for (Object object : params) {sb.append(object.toString());}return sb.toString();}};
}
@Service
@CacheConfig(cacheNames = "province")
public class ProvincesServiceImpl implements ProvincesService {@Autowiredprivate ProvincesDao provincesDao;@Autowiredprivate CitiesDao citiesDao;@Overridepublic List<Provinces> list() {return provincesDao.list();}@Cacheable(key = "#id")@Overridepublic Provinces detail(String id) {Provinces provinces = = provincesDao.detail(id);if (null != provinces) {provinces.setCities(citiesDao.list(id));}return provinces;}@CachePut(key = "#entity.provinceid")@Overridepublic Provinces update(Provinces entity) {provincesDao.update(entity);return entity;}// @Caching(put = @CachePut(key = "#entity.provinceid"))@CachePut(key = "#entity.provinceid")@Overridepublic Provinces add(Provinces entity) {provincesDao.insert(entity);System.out.println("新增数据 == 》" + entity);return entity;}@CacheEvict(key = "#id")@Overridepublic void delete(String id) {provincesDao.delete(id);}
}
使用SpringCache带来了方便,但是少了灵活性
缓存一致性问题
问题:同时有一个请求 A 进行更新操作,一个请求 B 进行查询操作。可能出现:
(1)请求 A 进行写操作(key = 1 value = 2),先删除缓存 key = 1 value = 1
(2)请求 B 查询发现缓存不存在
(3)请求 B 去数据库查询得到旧值 key = 1 value = 1
(4)请求 B 将旧值写入缓存 key = 1 value = 1
(5)请求 A 将新值写入数据库 key = 1 value = 2
导致缓存中数据永远都是脏数据
比较推荐操作顺序:
先删除缓存,再更新数据库,再删缓存(双删,第二次删可异步延时)
缓存使用带来的一致性问题 — 数据同步 有四类方式
缓存过期与一致性问题 — 缓存一致性问题,无论你怎么做,都有漏洞
缓存失效策略
取决于业务要求的一致性和不一致的容忍度
- 固定间隔 ----- 缓存数据2分钟后删除(数据变了,多多海涵)
- 定时任务 ----- 每天凌晨统一全量刷新
- 实时更新 – 同步去调用Cache增删改
- 准实时更新 — 甩锅第三方 观察者模式/发布订阅/MQ
方案名称 | 技术特点 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
数据实时同步更新 | 强一致性,更新数据库同时更新缓存,使用缓存工具类和或编码实现 | 数据一致性强 | 代码耦合 运行期耦合 影响正常业务 | 数据一致实时性要求比较高的场景,如:银行业务、证券交易; |
数据准实时更新 | 准一致性,更新数据库后,异步更新缓存,使用观察者模式/发布订阅/MQ实现; | 数据同步有较短延迟 与业务解耦 不影响正常业务 | 实现复杂,架构较重 | 不适合写操作频繁并且数据一致实时性要求严格的场景; |
缓存失效机制 | 弱一致性,基于缓存本身的失效机制 | 实现简单 | 有一定延迟 不保证强一致性 存在缓存雪崩问题; | 适合读多写少的场景,能接受一定数据延时; |
任务调度更新 | 最终一致性,采用任务调度框架,按照一定频率更新; | 不影响正常业务; | 不保证一致性 依赖定时任务 容易堆积垃圾数据; | 适合复杂统计类数据缓存更新,对数据一致实时性要求低的场景;如:统计类数据,BI分析等; |
缓存回收策略
FIFO :First In First Out 先进先出算法,即先放入缓存的先被移除
LRU :Least Recently Used 最久未使用算法,使用时间距离现在最久的那个被移除
LFU:Least Frequently Used 最近最少使用算法 一段时间段内使用次数(频率)最少的那个被移除
TTL:Time To Live 存活期 即从缓存中创建时间点开始直到它到期的一个时间段(不管在这个时间段内有没有访问过期)
TTI : Time To Idle 空闲期,即一个数据多久没有被访问将从缓存中移除的时间
也就是如下的概念:
绝对过期:比如设置10分钟有效,则从数据加入缓存开始算,10分钟后清除掉
滑动过期:比如web中的session机制,如果在最近30分钟之内未被访问,就进行回收
缓存问题
缓存击穿 :某一个key刹那间实现,导致大量的查询打到数据库上
缓存雪崩 :部分缓存key在一段时间集中失效,导致所有的查询都打到数据库上,大量的击穿就是雪崩
缓存穿透:恶意请求不存在的数据,故意避开缓存,大量请求数据库
对于上述缓存同步方案的第三种 缓存失效策略 存在雪崩风险 即某个key失效时,外围刚好有大量并发请求到达 若放任大并发传递到mysql 会大概率造成mysql宕机
- 缓存击穿(雪崩)的解决方法:
限流加锁 - 缓存穿透的解决方法
–》 根据业务特点, 搞出一个规则来效验缓存请求的有效性(有规律的订单号、手机号码)
–》使用布隆过滤器 布隆过滤器的使用方法 类似于java的set集合,只不过它能以更小的内存,存储更大的数据
/*** 解决缓存雪崩 -- > 加锁限流* 解决缓存穿透 -- > 布隆过滤器*/
@Service
public class ProvincesServiceImp2 extends DefaultProvincesService implements ProvincesService {// 等效成一个Set集合private BloomFilter<String> bf = null;@PostConstructpublic void init() {// 在bean初始化完成后,实例化BloomFilter,并加载数据List<Provinces> provinces = this.list();bf = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), provinces.size());for (Provinces province : provinces) {bf.put(province.getProvinceid());}}private static final Logger logger = LoggerFactory.getLogger(ProvincesService.class);@Resourceprivate CacheManager cacheManager;private static final String CACHE_NAME = "province";@Overridepublic Provinces detail(String provinceid) {// 1.先判断布隆过滤器中是否存在该值,值存在才允许访问缓存和数据库if (!bf.mightContain(provinceid)) {System.out.println("非法访问--------" + System.currentTimeMillis());return null;}// 2. 从缓存中取数据ValueWrapper valueWrapper = cacheManager.getCache(CACHE_NAME).get(provinceid);if (valueWrapper != null) {logger.info("缓存中得到数据");return (Provinces) valueWrapper.get();}// 3. 加锁排队 阻塞式锁 32个省 最多只有32把锁 1000个线程doLock(provinceid);try {valueWrapper = cacheManager.getCache(CACHE_NAME).get(provinceid);if (valueWrapper != null) {logger.info("缓存中得到数据");return (Provinces) valueWrapper.get();}Provinces provinces = super.detail(provinceid);// 4.从数据库查询的结果不为空,则把数据放入缓存中,方便下次查询if (null != provinces) {cacheManager.getCache(CACHE_NAME).put(provinceid, provinces);}return provinces;} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);} finally {// 5. 解锁releaseLock(provinceid);}}private ConcurrentHashMap<String, Lock> locks = new ConcurrentHashMap<String, Lock>();private void releaseLock(String key) {ReentrantLock oldLock = (ReentrantLock) locks.get(key);if (oldLock != null && oldLock.isHeldByCurrentThread()) {oldLock.unlock();}}private void doLock(String key) {ReentrantLock newLock = new ReentrantLock();Lock oldLock = locks.putIfAbsent(key, newLock);if (oldLock == null) {newLock.lock();} else {oldLock.lock();}}
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- js常见面试题(知识)总结
每日分享10道面试题1.垃圾回收机制中什么是垃圾?答:一般来说没有被引用的对象就是垃圾(就是要被清除的),有个例外:如果几个对象相互引用形成一个环,但根访问不到他们,那么这几个对象也是垃圾2.关于垃圾回收机制的理解?答:在垃圾回收机制中有一种(标记-清除和引入计数…...
2024/4/23 14:15:34 - JavaScript中的事件处理程序(addEventListener)
EventTarget是一个由可以接收事件的对象实现的接口,并且可以为它们创建侦听器。 DOM的事件操作,监听和触发,都定义在EventTarget接口,所有的节点对象都部署了这个接口,其他一些需要事件通信的浏览器内置对象,XMLHttpRequest,AudioNode,AudioContext也部署了这个接口 事件…...
2024/4/23 14:15:33 - autoware lidar_localizer包下的ndt_matching节点的学习
autoware lidar_localizer包下的ndt_matching节点的学习 激光雷达定位 自身定位对于自动驾驶汽车来说非常重要,常见的机器人定位方法有视觉slam方法(即时定位与地图构建),根据激光雷达实时扫描到的点云图构建地图,然后进行定位的方法。但是在自动驾驶具有高速移动,高安全性…...
2024/4/23 14:15:32 - Atcoder - 091C 扫描线 and Atcoder - 062D 优先队列 + 前后缀和
<Atcoder - 091C> 扫描线https://atcoder.jp/contests/abc091/tasks/arc092_a题意:有n个红点,n个蓝点,所选的红点和蓝点能够成友好的条件是:红点的横纵坐标分别小于蓝点的横纵坐标。取过的点不能重复取,问最多能构成几对友好。思路:定义结构体,将所有红点蓝点统一…...
2024/4/23 14:15:31 - 计算机 黑客攻击
黑客的动机 01 好奇好玩 02 网络犯罪 03 黑客行动主义者, 影响社会 或 达到政治目的 手段 01 不使用技术, 而是欺骗别人, 让别人泄密, 这个是 社会工程学. 或者让别人配置电脑使其变得易于攻击 钓鱼网站: 仿制官网, 实际是把信息给了黑客 假托: 冒充 IT等相关人员给你打电话…...
2024/4/23 14:15:30 - SpringBoot:快速入门
什么是SpringSpring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson 。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。 Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:基于POJO的轻量级和最小…...
2024/4/23 14:15:36 - LINUX从零开始——ENGINEER(云计算应用管理)——Day4-1 [配置Linux网络 、源码编译安装、自定义Yum仓库、日志管理]
一、环境准备 1.建议还原快照,开启CentOS7虚拟机,以root用户登录 课前回顾: 1.交换空间的作用? 缓解内存的压力 2.格式化交换文件系统的命令? mkswap 3.查看内存空间以及交换空间的命令? free 4.利用dd命令生成2G的文件如何操作? dd if=/dev/zero of=/opt/1.txt bs=…...
2024/4/23 14:15:36 - AI三大主义:符号主义、联结主义、行为主义
一、符号主义(symbolicism) 符号主义(symbolicism)=逻辑主义(Logicism)=心理学派(Psychlogism)=计算机学派(Computerism),其原理主要为物理符号系统(即符号操作系统)假设和有限合理性原理。 早期的人工智能研究者绝大多数属于此类。 主要观点:人类认知和思维的基本单元是符…...
2024/4/23 14:15:27 - 消息队列RocketMQ
目录一. 简介二. 单节点RocketMQ安装2.1 环境准备2.2 安装配置三. 概念模型三. 生产者与消费者3.1 生产者代码实现3.2 消费者代码实现3.3 RocketMQ顺序消息发送3.4 事务性消息3.4.1 概述3.4.2 事务性生产者代码实现3.4.3 事务性消费者代码实现 一. 简介 MQ全称Message Queue,消…...
2024/4/23 14:15:33 - LINUX从零开始——ENGINEER(云计算应用管理)——Day4-2 [配置Linux网络 、源码编译安装、自定义Yum仓库、日志管理]
一、环境准备 1.开启两台虚拟机,以root用户登录 课程回顾: 1.查看系统进程信息有哪些命令? pstree ps aux ps -elf 2.如何查看占用内存最高的进程? top 3.永久设置主机名配置文件路径? /etc/hostname 4.设置开机自动挂载配置文件路径? /etc/fstab 5.yum客户端配置…...
2024/4/23 14:15:26 - 面试题整理
目录一、HashMap和CocurrentHashMap说一下你对HashMap的理解;他的底层结构是什么样的;一个数据是怎么存到,map里面的;怎么可以让HashMap的碰撞变小;为什么不能用可变类型做键值呢;链表什么时候转成红黑树;为什么要转成红黑树;红黑树是什么样的,他的结构是什么样的;他…...
2024/4/19 19:08:00 - 第一次面试准备
我呢最近这一周都在找实习找工作,在周三周四时候投递了很多简历,估计收到的疫情的影响,目前只收到一家公司的面试邀请。我真的 好像去实习呀,好像去实习呀!为了准备好实习,这两天临时集中突击一下,面试题。。。。。祝我好运!!! 面试复习第一弹: 1:什么是同步逻辑什…...
2024/4/15 8:38:52 - 使用matplotlib在一张图上画多条曲线
做数据分析,还有机器学习的收敛性,准确性分析时,往往需要将一些数据图形化,以曲线的形式显示出来,下面就介绍两种方式来实现这个小问题,一种是object-oriented面向对象的,另一种是基于plt的。下面这个方式是面向对象的方式:import numpy as np import matplotlib.pyplo…...
2024/4/17 8:30:59 - python基础编程:关于python中plt.hist参数的使用详解
今天小编就为大家分享一篇关于python中plt.hist参数的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 如下所示: matplotlib.pyplot.hist( x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=ubar…...
2024/4/18 22:40:16 - python基础教程:在Python下利用OpenCV来旋转图像的教程
这篇文章主要介绍了在Python下利用OpenCV来旋转图像的教程,代码和核心的算法都非常简单,需要的朋友可以参考下 OpenCV是应用最被广泛的的开源视觉库。他允许你使用很少的代码来检测图片或视频中的人脸。 这里有一些互联网上的教程来阐述怎么在OpenCV中使用仿射变换(affine tra…...
2024/4/18 21:02:57 - python基础教程:python、PyTorch图像读取与numpy转换实例
今天小编就为大家分享一篇python、PyTorch图像读取与numpy转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 Tensor转为numpy np.array(Tensor) numpy转换为Tensor torch.Tensor(numpy.darray) PIL.Image.Image转换成numpy np.array(PIL.Image.Image…...
2024/4/17 8:30:59 - 一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统
在一般中低端的嵌入式系统里面,程序要么是跑大循环,要么是跑一个简单的操作系统(比如ucos,rtthread,freertos等等),简单和效率是第一要素,毕竟系统硬件资源有限。 要在这方寸之间,施展十八般武艺,实属具有一定的挑战性。 我们实现了一个简单的类windows的消息系统,让…...
2024/4/17 8:30:59 - python基础编程:Python中turtle作图示例
这篇文章主要介绍了Python中turtle作图示例,分享了几则turtle作图的小实例,具有一定参考价值,需要的朋友可以了解下 在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还可以给形状填色。 一、从基本的正方形开始 引入turtle模块并创…...
2024/4/17 8:30:29 - python基础教程:从局部变量和全局变量开始全面解析Python中变量的作用域
无论是以类为基础的面相对象编程,还是单纯函数内部变量的定义,变量的作用域始终是Python学习中一个必须理解掌握的环节,下面我们从局部变量和全局变量开始全面解析Python中变量的作用域,需要的朋友可以参考下 理解全局变量和局部变量 1.定义的函数内部的变量名如果是第一次出现…...
2024/4/23 14:15:24 - 大数据与云计算之间的关系是怎样的?
如今,两种主流技术已成为IT领域关注的焦点-大数据和云计算。根本不同的是,大数据只涉及处理海量数据,而云计算则涉及基础架构。但是,大数据和云技术提供的简化功能是其被大量企业采用的主要原因。例如,亚马逊的“ Elastic Map Reduce”演示了如何利用Cloud Elastic Comput…...
2024/4/23 14:15:26
最新文章
- uniapp 基础阿里云点播 使用
这是加密的 且适用于app端 对于UNI APP端的开发而言,由于上并没有document 不能进行相关的DOM操作,同时有关DOM渲染的第三方库(echart、openlayer等)也无法有效的使用, 因此官方推出了renderjs方案,来解决上述问题。一、官方 ren…...
2024/4/26 10:49:36 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 贪心算法|1005.K次取反后最大化的数组和
力扣题目链接 class Solution { static bool cmp(int a, int b) {return abs(a) > abs(b); } public:int largestSumAfterKNegations(vector<int>& A, int K) {sort(A.begin(), A.end(), cmp); // 第一步for (int i 0; i < A.size(); i) { // 第二步if…...
2024/4/21 20:36:49 - 方案分享 | 嵌入式指纹方案
随着智能设备的持续发展,指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势,被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域ÿ…...
2024/4/23 6:15:34 - HTML——4.表格、列表、区块
一、表格 HTML 表格是用于展示结构化数据的重要元素,它允许将数据以行和列的形式组织和显示。 基本结构和常见元素: 1. <table> 元素 <table> 元素是 HTML 表格的根元素,它用于定义整个表格的开始和结束。 2. <thead>、…...
2024/4/23 20:59:56 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/25 11:51:20 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/25 18:39:24 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/25 18:38:39 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/25 18:39:23 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/25 18:39:20 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/25 16:48:44 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/25 13:39:44 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/25 0:00:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/25 4:19:21 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/25 18:39:12 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/25 13:19:01 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/25 18:38:58 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/25 18:38:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57