IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 引入redis来做缓存后,测试时要关注的点 -> 正文阅读

[大数据]引入redis来做缓存后,测试时要关注的点

开发为什么要引入缓存

为了性能,主要是高并发下的性能

一些基础的概念介绍

常见的缓存中间件有Redis、Memcache、Ehcache ,一些详细的介绍可以看这里https://blog.csdn.net/riipgah/article/details/112626440
https://blog.csdn.net/weixin_42886699/article/details/121668172
就只引用些示例图帮助大家理解
Redis:image.png

Encached在这里插入图片描述

Memcached
在这里插入图片描述

使用方式

redis在我们公司的应用主要还是分布式锁比较多,缓存用的比较少,直接使用的话可以这样

	@Test
	public void testString() {
 
		// 单个
		for (int i = 1; i <= 10; i++) {
 
			// 获得资源
			Jedis jedis = RedisUtil.getJedis();
			// 设置字符串值
			jedis.set("mike" + i, i + "");
 
			System.out.println(jedis.get("mike" + i));
 
			// 关闭资源
			RedisUtil.backResouce(jedis);
		}

更简单的方式是使用redis的注解

    //@Cacheable(value=”accountCache”),这个注释的意思是,当调用这个方法的时候,会从一个名叫 accountCache 的缓存中查询,如果没有,则执行实际的方法(即查询数据库),
    //并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的 key 就是参数 userName,value 就是 Account 对象。“accountCache”缓存是在 spring*.xml 中定义的名称。
    @Cacheable(value="accountCache")
    public Account getAccountByName(String userName) {
        // 方法内部实现不考虑缓存逻辑,直接实现业务
        System.out.println("real query account."+userName);
        return getFromDB(userName);
    }

开发将缓存视为实现细节,而不是需要测试的功能,但引入缓存后测试是必要的

1、缓存的作用和隐患不是及时能体现出来的
2、缓存的使用姿势也有很大讲究
3、缓存出现问题的后果很严重,错误的使用缓存,可能导致有雪崩的风险,导致数据库承担过多的压力

测试要关注的点

使用姿势对不对

失效策略
主动失效
主动失效是指系统有一个主动检查缓存是否失效的机制,比如通过定时任务或者单独的线程不断的去检查缓存队列中的对象是否失效,如果失效就把他们清除掉,避免浪费。主动失效的好处是能够避免内存的浪费,但是会占用额外的CPU时间。
被动失效
被动失效是通过访问缓存对象的时候才去检查缓存对象是否失效,这样的好处是系统占用的CPU时间更少,但是风险是长期不被访问的缓存对象不会被系统清除。

缓存淘汰
FIFO
先进先出(First In First Out)是一种简单的淘汰策略,缓存对象以队列的形式存在,如果空间不足,就释放队列头部的(先缓存)对象。一般用链表实现。
LRU
最近最久未使用(Least Recently Used),这种策略是根据访问的时间先后来进行淘汰的,如果空间不足,会释放最久没有访问的对象(上次访问时间最早的对象)。比较常见的是通过优先队列来实现。
LFU
最近最少使用(Least Frequently Used),这种策略根据最近访问的频率来进行淘汰,如果空间不足,会释放最近访问频率最低的对象。这个算法也是用优先队列实现的比较常见。

缓存对象
需要有足够的内存用于缓存。
缓存中每个对象的大小是多少?
缓存中的最大对象数是多少?
当缓存已满并且需要向其添加一个对象时会发生什么?

缓存更新的策略
https://blog.csdn.net/hukaijun/article/details/81010475

持续的监控

中间件的表现
-CPU,内存指标,持续观测
-是否有频繁的更新缓存(缓存更适用于读多写少的业务)
-是否有某个异常过大的key
-大数据量情况下,缓存的更新和命中率
数据初始化
-如果在应用程序启动时进行了初始化,那么在缓存最大数量的对 象时需要花费多长时间?
-应用程序可以在初始化期间处理请求吗?
-如果在发出请求时缓存对象,那么缓存未命中或直写事务的响应时间是否可以接受?

异常的情况

1、缓存数据和数据库数据的短暂不一致性是否能接受
2、是否配置了缓存数据的持久化(redis异常重启)
3、缓存失效的常见问题

缓存雪崩
雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。
解法:过期时间设置时错开时间,使用随机数等方式削峰

缓存穿透
举个栗子。数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。
解法:无效数据也建立缓存,避免被重复攻击

缓存击穿
缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
解法:访问数据库时添加分布式锁,更新了缓存后再释放,后续请求即可使用缓存;或者提供未 获得锁时的降级方案

缓存效果的验证

1、可以请求一些数据以使其被缓存,然后使后备存储无法访问,并请求相同的数据。
2、可以请求数据,然后在后备存储中更改数据,然后再次请求,并且该数据不应更改
3、可以请求数据,修改数据后,使后备存储不可用,再次请求数据,应该是更新后的数据
4、可以请求数据,删除对应数据后,查看redis数据,应该是删除状态或被删除
5、review 更新缓存相关代码(先删除缓存再更新数据库,并做延迟更新)
	https://blog.csdn.net/hukaijun/article/details/81010475
6、校验缓存淘汰参数配置
7、校验过期时间配置

更广泛的含义

前端缓存
	浏览器缓存
		https://blog.csdn.net/csdnnews/article/details/89324384
	APP的本地缓存
数据库缓存
	索引(思路类似)
CDN缓存
	https://blog.csdn.net/qq_41807489/article/details/90266230
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:27:35  更:2022-03-16 22:28:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:52:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码