redis缓存设计要点随谈

在高并发系统中,缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大量的请求直接落到系统的数据库,系统是很难撑住高并发的冲击。所以缓存设计是系统很关键的一环。

1、缓存更新

缓存的数据一般都是有有效期的,过了一段时间之后就会失效,再次访问时需要重新加载。缓存的失效是为了保证与数据源真实的数据保证一致性和缓存空间的有效利用性。

缓存更新一般分为3种

1、空间有限,当达到最大值时  根据系统的设置规则直接过期的,

比如最少使用、随机等一些过期策略。

2、缓存设置了过期时间的。

3、数据库更新了,主动更新缓存数据的。

一般的话 低一致性要求的符合1和2即可。

高一致性的符合2和3的方式。

2、缓存穿透

缓存穿透指的是查询一个不存在的数据,进而导致每次都落到数据库里面去查询。

1、解决办法主要是缓存一个空数据,并且设置一个较短的有效期,避免每次都命中数据库。

2、针对查询的键key 规则进行校验,比如 id_{N}

N数据   可以对N的格式和范围进行校验,不符合的直接返回,不往下走。

这种一般是在缓存key不存在且数据库不存在的情况下发生。

3、缓存雪崩

缓存雪蹦指的是同一时间大量缓存过期或者缓存不可用,导致大量的请求进入数据层。

针对这种情况一般是 

1 设置缓存的过期时间,一般需要再加些随机数,避免过期时间大家都一样。

2、保证缓存服务的高可用。

3、缓存击穿:

指的是单个key在缓存中查不到,去数据库查询,如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃。

解决办法

1 使用锁机制确保缓存生成过程是单线程在操作,其他线程需等待、重试。

2、利用redis add 特性 直接加锁,其他请求进来,判断是进行中的直接return.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集合的结构示意图

转载于:https://blog.51cto.com/8467007/1364724

Java设计模式(8)组合模式(Composite模式)

Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。Composite比较容易理解,想到Composite就应该想到树形结构图。组合体内这些对象都有共同接…

第1章 数据分析概述

《Python数据分析基础教程》学习笔记。 第1章 数据分析概述 1.1 数据的性质 1.1.1 数据的概念 所谓数据就是描述事物的符号,是对客观事物的性质、状态和相互关系等进行记载的物理符号或者是这些物理符号的组合。 在计算机系统中,各种文字、字母、数字符…

Android之通过adb shell getprop、netstat命令看dns、ip

1、查看dns 1)、输入adb shell 2 )、输入getprop ,查看配置 3)、getprop | grep dns 过滤dns 4) 、getprop | grep dns 输出dns 5) 、修改dns 需要root ,然后输入 adb shell 然后输

python testng_单元测试工具 TestNG 使用

写一篇小文,介绍一下 Java 下单元测试工具 TestNG 的使用,代码在 IDEA 环境在编写。单元测试,顾名思义,对系统中原子性的功能进行测试,一般情况下是单元测试是针对某个功能函数的测试。编写单元测试是系统开发中重要的…

AM335x kernel4.4.12 LCD 时钟翻转设置记录

TI AM335x kernel 4.4.12 LCD display 时钟翻转记录 因为公司硬件上已经确定LCD 转LVDS 转换芯片上确认以上升沿时钟为基准,所以只能在软件上调整相关东西。 入口在: drivers/gpu/drm/tilcdc/tilcdc_drv.c入口函数: module_init(tilcdc_drm_i…

Cache占用过多内存导致Linux系统内存不足问题排查

问题描述Linux服务器内存使用量超过阈值,触发报警。问题排查首先,通过free命令观察系统的内存使用情况,显示如下:total used free shared buffers cached Mem: 24675796 24587144 88652 …

第2章 Python与数据分析

《Python数据分析基础教程》学习笔记。 第2章 Python与数据分析 2.1 Python数据分析常用的类库 类库是用来实现各种功能的类的集合。 -1. NumPy NumPy(Numerical Python)是Python科学计算的基础包,提供以下功能: 快速高效的多维数组对象ndarrray是其…

LSPCI具体解释分析

一、PCI简单介绍 PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的全部设备可在同一时间收到全部的传输内容。总线由电气接口和编程接…

linux之ip route命令

1.基础知识 1.1 路由 (Routing) 1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应…

违反Apache 2.0许可证再分发被指控,火山引擎回应

文 | 白开水不加糖出品 | OSC开源社区(ID:oschina2013)针对有关违反 Apache 2.0 许可证,重新发行 SkyWalking 的指控,火山引擎方面作出回应称:火山引擎相关负责人表示,火山引擎接到社区反馈后&a…

vue 日期格式化返回指定个数月份_vue过滤器实现日期格式化的案例分析

说明今天将要介绍的是vue中的过滤器,并且将实现一个日期格式化的小案例。大家都知道,我们获取当前日期可以通过Date对象获取。下面我将获取当前时间并打印出来。console.log(new Date());我们获取的是一个标准时间,控制台的输出如下所示。在实…

linux网络编程之IP协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)和TCP、UDP协议头结构总结

首先声明,这篇博客是几篇博客转载然后总结在一起的,只当是学习笔记,不在意是什么原创和转载了,学到东西就好。 1、IP协议首部格式(IP协议处余网络层) IP数据报首部图片格式: 最高位在左边,记为0 bit;最低位在右边,记为31 bit 头部代码结构如下 //定义IP首部typede…

无线安全***--启程

无线安全将来会成为一个值得重视的领域,现在无线的普及大大的方便我们的生活,同时在带来的便利的同时也会给我带来新的威胁!下面我来通过cdlinux以及BT5来演示现在比较常见的无线***之战。攻破解我们都知道现在的个人无线局域网基本都会使用w…

Java读取word文件,字体,颜色

在Android读取Word文件时,在网上查看时可以用tm-extractors,但好像没有提到怎么读取Word文档中字体的颜色,字体,上下标等相关的属性。但由于需要,要把doc文档中的内容(字体,下划线,颜…

.NET 20周年软件趋势随想

从2000年微软启动.NET战略时,我还是一位大学生,当年著名的黑客Miguel de Icaza , Miguel 为了寻找GNOME项目开发框架经过充分的调研启动了一个志存高远的项目:Mono,一个Microsoft .NET Framework的自由GNU/Linux实现,我…

第二节 安装CentOS

Linux 第二节一、安装VNware workstation 10二、安装CentOS 1.root/123456 用户登录[rootlocalhost ~]# 2.关机 init 0 3.ifconfig -a:查询ip等信息 4.dhclient :生成自动获取IP 5.手动配置网卡:ipad./setup/编辑网卡配置文件: vi /etc/sysc…

c++ console 取实时输入_灵活使用 console 让 js 调试更简单

译者:前端小智原文: https://medium.com/mattburgess/beyond-console-log-2400fdf4a9d8https://medium.freecodecamp.org/10-tips-to-maximize-your-javascript-debugging-experience-b69a75859329Web开发最常用的高度就是 console.log ,虽然…

windows之DNS7种资源记录和flushdns命令清除DNS缓存以及nslookup解析域名和ipconfig/all命令查看网络配置使用总结

1、DNS7种资源记录 DNS分为正向查找区域和反向查找区域,然后在分为,主要,辅助,存根区域,在这些区域里,又存在着很多的记录,今天,就让我们来看看这些记录:1,A记…

第2章 C语言概述

学习笔记——《C Primer Plus》 第2章 C语言概述2.1 简单的C程序实例2.2 实例解释2.2.1 快速概要1. #include指令和头文件2. main() 函数3. 声明4. 赋值5. printf() 函数5. return 语句2.3 简单程序的结构2.4 多个函数2.1 简单的C程序实例 #include <stdio.h> int main(…