分布式缓存技术方案
- 格式:docx
- 大小:188.32 KB
- 文档页数:11
技术架构方案第1篇技术架构方案一、背景随着信息化建设的不断深入,我国各行业对技术架构的需求日益增长。
为满足业务发展需求,提高系统稳定性、安全性和可扩展性,本项目将围绕业务目标,结合现有技术资源,制定一套合法合规的技术架构方案。
二、目标1. 满足业务需求,提高系统性能和用户体验。
2. 确保系统稳定、安全、可扩展,降低运维成本。
3. 合法合规,遵循国家和行业标准。
4. 提高开发效率,降低开发成本。
三、技术选型1. 开发语言与框架- 后端:采用Java语言,Spring Boot框架进行开发。
- 前端:采用Vue.js框架,Element UI组件库进行开发。
2. 数据库- 关系型数据库:采用MySQL数据库。
- 非关系型数据库:采用Redis数据库。
3. 中间件- 消息队列:采用RabbitMQ。
- 分布式缓存:采用Redis。
- 分布式服务框架:采用Dubbo。
4. 容器技术- 采用Docker容器技术,实现应用轻量化部署。
5. 云计算- 采用阿里云服务,包括但不限于ECS、RDS、OSS等。
四、系统架构1. 整体架构本方案采用前后端分离的架构模式,后端负责数据处理,前端负责界面展示。
系统架构分为以下几个层次:- 用户层:提供用户操作界面,包括Web端和移动端。
- 前端层:负责接收用户请求,与后端进行数据交互,展示数据。
- 后端层:负责处理业务逻辑,提供数据接口。
- 数据库层:存储系统数据。
- 中间件层:提供消息队列、缓存、分布式服务等支持。
2. 网络架构采用分布式部署,网络架构分为以下三个部分:- 用户访问网络:用户通过互联网访问系统。
- 内部业务网络:内部服务器、数据库、中间件等设备互联。
- 管理网络:用于系统运维管理。
3. 安全架构遵循国家相关法律法规,建立完善的安全架构:- 身份认证:采用用户名密码、手机验证码等方式进行身份认证。
- 权限控制:实现用户、角色、菜单等多维度的权限控制。
- 数据加密:采用SSL加密技术,保证数据传输安全。
微服务数据冗余方案微服务架构的优点之一是能够实现服务的独立部署和扩展。
然而,同时也可能会面临数据冗余的问题。
数据冗余是指同一份数据在不同的微服务中存在多个副本的情况。
虽然数据冗余可以提高性能和可用性,但也会增加复杂性和数据一致性的风险。
在设计微服务架构时,需要充分考虑数据冗余的方案,以平衡各方面的需求。
一、业务数据冗余方案1. 水平切分和数据同步在微服务架构中,通常会根据业务功能将数据库进行水平切分,将相同业务相关的数据分散到不同的服务中。
为了保证数据的一致性,可以通过数据同步的方式来保持数据的一致性。
可以采用多种方式进行数据同步,例如通过消息队列、定时任务或数据库触发器等方式。
2. 分布存储和数据引用将业务数据存储在分布式存储系统中,例如分布式文件系统、分布式数据库等。
服务可以通过引用关系来进行数据访问,避免数据冗余的问题。
例如,可以将公共数据存储在一个服务中,其他服务通过引用该服务的数据来访问。
3. 事件驱动和数据更新采用事件驱动的方式,当数据发生变化时,及时通知相关的服务进行数据更新。
通过事件驱动可以有效减少数据冗余的问题,避免不同服务之间数据不一致的情况。
二、缓存数据冗余方案1. 缓存数据同步在微服务架构中,通常会使用缓存来提高性能和并发访问能力。
缓存数据的冗余问题主要是如何保证缓存和数据库的数据一致性。
可以采用缓存数据同步的方式,当数据库的数据发生变化时,及时将数据更新到缓存中。
可以通过数据库触发器、消息队列等方式进行数据同步。
2. 分布式缓存和数据分片采用分布式缓存系统,可以将缓存数据分散存储在不同的节点中,减少数据冗余的问题。
可以根据数据的一些特征,将数据分片存储在不同的节点中,例如按照数据的类别、地理位置等进行分片存储。
3. 缓存更新策略和数据过期缓存数据的更新策略可以根据具体的业务需求来确定。
可以采用写回策略,即当数据发生变化时,先更新数据库中的数据,然后再更新缓存数据。
可以通过设置缓存的过期时间来保证数据的一致性,一旦数据过期,将立即从数据库中获取最新的数据。
最全面的缓存架构设计(全是干货)1:缓存技术和框架的重要性互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用。
缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力。
我曾经就遇到过因为缓存架构设计不到位,导致了系统崩溃的案例。
2:缓存的技术方案分类1)是做实时性比较高的那块数据,比如说库存,销量之类的这种数据,我们采取的实时的缓存数据库双写的技术方案,双写一致性保障的方案。
2)是做实时性要求不高的数据,比如说商品的基本信息,等等,我们采取的是三级缓存架构的技术方案,就是说由一个专门的数据生产的服务,去获取整个商品详情页需要的各种数据,经过处理后,将数据放入各级缓存中。
3:高并发以及高可用的复杂系统中的缓存架构都有哪些东西1)在大型的缓存架构中,redis是最最基础的一层。
高并发,缓存架构中除了redis,还有其他的组成部分,但是redis至关重要。
•如果你的数据量不大(10G以内),单master就可以。
redis持久化备份方案容灾方案 replication(主从读写分离) sentinal(哨兵集群,3个节点,高可用性)•如果你的数据量很大(1T ),采用redis cluster。
多master分布式存储数据,水平扩容,自动进行master -> slave的主备切换。
2)最经典的缓存数据库读写的模式,cache aside pattern。
读的时候,先读缓存,缓存没有的话,那么就读数据库。
更新缓存分以下两种方式:•数据发生变化时,先更新缓存,然后再更新数据库。
这种适用于缓存的值相对简单,和数据库的值一一对应,这样更新比较快。
•数据发生变化时,先删除缓存,然后再更新数据库,读数据的时候再设置缓存。
这种适用于缓存的值比较复杂的场景。
比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据,并进行运算,才能计算出缓存最新的值的。
SpaceBuilder分布式部署方案适用版本:v3.0版本信息:0.9建立日期:2008-5-21创建人:马志强审核者:批准人:批准日期:编辑软件:Microsoft Office 2003 中文版目录1引言 (3)1.1引用术语与缩写解释 (3)2部署综述 (3)2.1服务器角色与职责 (4)2.2网络设备 (4)3服务器配置 (4)3.1通用配置 (4)3.1.1单点登录配置 (4)3.1.2缓存客户端配置 (5)3.1.3数据库连接字符串配置 (5)3.2web服务器 (6)3.2.1与资源服务器相关配置 (6)3.2.2与文件服务器相关配置 (6)3.2.3与全文检索服务器相关配置 (8)3.2.4自运行任务配置 (8)3.3文件服务器 (10)3.3.1统一配置 (13)3.3.2个别配置 (14)3.3.3WCF附件转换站点的配置: (14)3.4全文检索服务器 (15)3.4.1统一配置 (15)3.4.2个别配置 (16)3.5资源服务器 (16)3.6数据库服务器 (16)3.7缓存服务器 (17)3.8Email发送服务器 (17)4服务器配置建议 (17)4.1合并建议 (17)图表索引:图表1 分布式部署视图 (3)1引言为了使SpaceBuilder可以应对高负载、大数据量的挑战,进行了该方案的编写。
针对不同的数据量及负载会有不同的技术架构,SpaceBuilder是为千万级(单表记录)数据而开发的,因此提供本方案供架构设计以及应用部署人员使用。
SpaceBuilder可以通过部署多台服务器来提升负载,本文档详细介绍如何在多台服务器上进行部署,需要进行哪些设置及注意事项。
1.1引用术语与缩写解释2部署综述图表1 分布式部署视图2.1服务器角色与职责2.2网络设备1.负载均衡:建议采用硬件负载均衡设备;2.如果附件量大并且使用频繁建议采用SAN设备进行附件及索引文件的存储;3服务器配置3.1通用配置3.1.1单点登录配置为了实现分布式部署,首先要实现单点登录(SSO)。
高速缓存系统有哪些_学习技术网主流的高速缓存系统包括: 1. Memcached:简单高性能的分布式内存缓存系统,支持键值对存储。
通过在内存中缓存数据来减轻数据库负载,提高网站速度。
2. Redis:开源的高性能键值对存储系统,支持丰富的数据结构,如字符串、散列、列表、集合、有序集合、位图等。
除了数据缓存,还可以用于消息队列、任务队列等场景。
3. MongoDB:一个开源的NoSQL 文档数据库,具有高性能和高可用性。
它支持的数据结构非常松散,是实现某些缓存系统的不错选择。
4. Aerospike:一个开源的高性能数据库,作为数据库使用可以对其进行缓存。
其通过DRAM+SSD的存储层次提供高速缓存功能。
5. MemcacheDB:兼具memcached和数据库特性的缓存系统。
它完全与Memcached 兼容,但支持数据持久化、异步复制等特性。
6. Hazelcast:一个开源的分布式内存数据网格,具有数据缓存、分布式锁与消息队列等功能。
它可以在多个节点中同步缓存数据,实现高可用的缓存服务。
7. Couchbase:一个面向文档的分布式数据库,具有高性能缓存功能。
它在每台服务器上使用内存进行缓存,并可异步写入磁盘以实现持久化。
8. Infinispan:一个开源的分布式内存数据网格,可以用作分布式缓存系统。
它基于JCache(JSR107)标准,具有缓存、远程过程调用等功能。
9. Ignite:一个高性能的分布式数据库、缓存与处理平台。
它向用户呈现一个单一的分布式内存系统,具有缓存、数据处理等多种功能。
除此之外,还有很多企业级的商用缓存产品,如Gemfire、BigMemory、TimesTen等。
总体来说,高速缓存系统的选择取决于系统的数据结构、一致性、处理能力和存储需求等多方面因素的综合判断。
这需要在具体的软件设计与方案选型中不断学习和提高。
我在这里比较全面地概述了主流开源和商用的高速缓存系统与方案。
分布式接入方案一、引言随着信息技术的快速发展,互联网已成为全球信息交流和传播的主要方式。
越来越多的企业和组织基于互联网展开业务,为了保证安全性、可靠性和灵活性,分布式接入方案得以应用和推广。
本文将介绍什么是分布式接入方案以及其优势,并提供一种可行的分布式接入方案。
二、什么是分布式接入方案分布式接入方案是一种将资源和数据分布在不同地点,并通过互联网连接在一起的技术方案。
其目的是实现对多个地理位置的统一管理和协同工作,提高系统的可靠性、扩展性和性能。
具体而言,分布式接入方案通常由以下几个组件组成:1. 分布式服务器:将系统的资源分布在不同的服务器上,每个服务器负责处理一部分请求并存储相应的数据。
通过负载均衡技术,分布式服务器可以实现对请求的分发和处理,以提高系统的性能和可靠性。
2. 分布式数据库:将数据分布在不同的数据库中,每个数据库存储一部分数据。
通过数据库复制和分片等技术,分布式数据库可以实现数据的分布和共享,以提高系统的可用性和容错性。
3. 分布式文件系统:将文件存储在不同的文件系统中,每个文件系统负责存储一部分文件。
通过文件的分片和备份技术,分布式文件系统可以实现文件的分布和共享,以提高系统的可靠性和可扩展性。
4. 分布式缓存:将系统的缓存数据分布在不同的节点上,每个节点负责缓存一部分数据。
通过缓存的分布和共享,分布式缓存可以提高系统的响应速度和吞吐量。
三、分布式接入方案的优势分布式接入方案具有以下几个优势:1. 高可靠性:由于资源和数据分布在不同的节点上,当某个节点发生故障时,系统仍然可以正常运行。
同时,可以通过备份和复制等技术提供数据的冗余和容错能力,进一步提高系统的可靠性。
2. 可扩展性:通过将系统的资源和数据分布在不同的节点上,分布式接入方案可以实现系统的横向扩展。
当系统的负载增加时,可以通过增加节点来提高系统的处理能力,而无需改变系统的整体架构。
3. 高性能:通过将请求和数据分布在不同的节点上,分布式接入方案可以实现对请求的并发处理和数据的并行处理,以提高系统的性能和响应速度。
分布式部署方案引言分布式系统的概念已经在计算机科学领域中被广泛讨论和应用。
在今天的云计算环境中,分布式部署方案对于应用程序的可伸缩性和可靠性至关重要。
本文将探讨分布式部署方案的概念、优势和常见的实践方法。
什么是分布式部署方案?分布式部署方案是一种将应用程序的不同模块或组件部署在多个计算机或服务器上的方法。
通过将应用程序分解为小的独立单元,每个单元可以在不同的机器上运行,从而实现应用程序的并行处理和负载均衡。
分布式部署方案可以提高应用程序的性能、可靠性和可伸缩性。
分布式部署方案的优势高可靠性分布式部署方案可以提高应用程序的可靠性。
当应用程序中的某个组件或服务器发生故障时,其他组件或服务器可以接管请求并继续提供服务,从而减少应用程序的中断时间。
高性能通过将应用程序的负载分散到多个服务器上,分布式部署方案可以实现并行处理和负载均衡,从而提高应用程序的性能。
每个服务器都可以专注于处理特定的任务,而不会被其他任务阻塞。
可伸缩性分布式部署方案可以根据需求的变化自动地扩展或缩减计算资源。
当请求量增加时,可以动态地增加服务器数量以处理更多的请求,而不会影响应用程序的性能。
相反,当请求量减少时,可以减少服务器数量以节省资源成本。
常见的分布式部署方案1. 容器化方案容器化方案是一种将应用程序打包为容器的方法,每个容器都包含了应用程序的所有依赖项和运行环境。
通过使用容器编排工具,如Docker和Kubernetes,可以在多个服务器上部署和管理容器。
容器化方案提供了一种轻量级、可移植和可复制的部署方式,使得应用程序的迁移和扩展变得更加容易。
2. 微服务架构微服务架构是一种将应用程序分解为小的独立服务的方法。
每个服务都有自己的数据库和业务逻辑,可以独立部署和扩展。
通过使用微服务架构,可以将应用程序拆分为多个小的服务,从而实现更高的灵活性和可伸缩性。
每个微服务可以在不同的服务器上部署,从而实现负载均衡和并行处理。
3. 分布式缓存分布式缓存是一种将数据缓存在多个服务器上的方法。
pivotal gemfire xd的概述与用法Pivotal Gemfire XD 是一个基于Pivotal Gemfire的分布式内存数据网格解决方案。
它主要用于处理大规模数据处理和实时数据流,并且提供了一个高效的分布式缓存和数据管理系统。
Pivotal Gemfire XD 的主要特点包括:1. 分布式架构:可以在多个节点上配置,实现数据的分布式存储和访问,从而提高系统的可扩展性和容错性。
2. 数据一致性:提供了多种复制机制和故障转移机制,可以确保数据的一致性和可靠性。
3. 可扩展性:能够轻松扩展系统,处理大规模的数据。
4. 内存存储:使用内存来存储数据,可以大大提高读写性能。
它支持多种数据类型,如键值对、对象、文档等。
5. 数据管理:支持多种查询和数据管理操作,如读取、写入、更新、删除等。
6. 缓存事件:可以响应缓存事件,如缓存对象的过期、插入和删除等,从而实现对缓存的精细控制。
Pivotal Gemfire XD 可以应用于各种场景,包括但不限于:1. Web应用程序缓存:在Web应用程序中用作缓存层,从而提高读写性能,减少数据库访问次数。
它可以存储静态或动态数据,如网页、应用程序配置等。
2. 黑色产业:可以应用于金融、电力、交通等黑色产业,数据的操作和交易需求往往需要低延迟和高吞吐量,在这种情况下,内存网格缓存技术可以显着提高系统性能。
3. 云原生应用:作为云原生应用的关键技术,为大规模云原生应用提供了性能和可靠性的支持。
它可以在容器中部署,支持多租户和弹性伸缩,提高了云原生应用的可管理性和可靠性。
4. IoT应用程序:在IoT应用程序中,由于需要大量传感器和设备发送大量数据,数据处理和存储的延迟可能成为一个重要的问题。
Pivotal Gemfire可以在边缘设备上提供高速缓存,从而减少延迟,提高了IoT应用程序的性能和响应速度。
实现多级缓存的架构设计方案中生代架构-目录-为什么要做TMC多级缓存解决方案的痛点TMC整体架构TMC本地缓存如何透明整体结构热点发现整体流程数据收集热度滑窗热度汇聚热点探测特性总结实战效果快手商家某次商品营销活动双十一期间部分应用TMC效果展示**功能展望-前言-TMC,即“透明多级缓存(Transparent Multilevel Cache)”,是有赞PaaS团队给公司内应用提供的整体缓存解决方案。
TMC在通用“分布式缓存解决方案(如CodisProxy+Redis,如有赞自研分布式缓存系统zanKV)”基础上,增加了以下功能:∙应用层热点探测∙应用层本地缓存应用层缓存命中统计以帮助应用层解决缓存使用过程中出现的热点访问问题。
-为什么要做TMC-使用有赞服务的电商商家数量和类型很多,商家会不定期做一些“商品秒杀”、“商品推广”活动,导致“营销活动”、“商品详情”、“交易下单”等链路应用出现缓存热点访问的情况活动时间、活动类型、活动商品之类的信息不可预期,导致缓存热点访问情况不可提前预知;缓存热点访问出现期间,应用层少数热点访问key产生大量缓存访问请求:冲击分布式缓存系统,大量占据内网带宽,最终影响应用层系统稳定性;为了应对以上问题,需要一个能够自动发现热点并将热点缓存访问请求前置在应用层本地缓存的解决方案,这就是TMC产生的原因。
-多级缓存解决方案的痛点-基于上述描述,我们总结了下列多级缓存解决方案需要解决的需求痛点:热点探测:如何快速且准确的发现热点访问key数据一致性:前置在应用层的本地缓存,如何保障与分布式缓存系统的数据一致性?效果验证:如何让应用层查看本地缓存命中率、热点key等数据,验证多级缓存效果?透明接入:整体解决方案如何减少对应用系统的入侵,做到快速平滑接入?TMC聚焦上述痛点,设计并实现了整体解决方案。
以支持“热点探测”和“本地缓存”,减少热点访问时对下游分布式缓存服务的冲击,避免影响应用服务的性能及稳定性。
高并发解决方案高并发是指在短时间内,系统接收到大量并发请求的情况。
在互联网应用越来越普及和用户规模不断扩大的现代社会,高并发成为了许多网络服务面临的重要问题。
为解决这一问题,各级企业和技术人员们提出了许多有效的解决方案。
接下来,本文将介绍几种常见的高并发解决方案。
一、负载均衡负载均衡是一种常见且重要的高并发解决方案。
在负载均衡中,系统将流量分配到多个服务器上,以实现对并发请求的分摊。
常用的负载均衡算法有轮询、加权轮询、最少连接等。
这些算法可以根据服务器的性能和负载来动态调整请求的分配。
负载均衡不仅可以提高系统的并发处理能力,还可以增强系统的稳定性和可靠性。
二、分布式缓存分布式缓存也是一种常见的高并发解决方案。
在分布式缓存中,系统将数据缓存在多台服务器上,以减轻数据库的负载压力。
通过将经常访问的数据缓存起来,可以大大提高系统的响应速度和处理能力。
常用的分布式缓存系统有Redis、Memcached等。
通过合理地利用分布式缓存,可以有效地提升系统的并发处理能力。
三、数据库优化数据库是许多系统中的瓶颈所在。
为了提高系统的并发处理能力,可以通过对数据库进行优化来达到目的。
常见的数据库优化方式包括索引优化、分库分表、读写分离等。
通过合理地设计数据库结构和查询语句,可以有效地减少数据库的负载压力,提高系统的并发处理能力。
四、异步处理异步处理也是一种常用的高并发解决方案。
在系统中,有些请求可能需要进行耗时的计算或者调用外部接口,如果同步处理这些请求,会导致系统的响应速度变慢,影响系统的并发能力。
而异步处理可以将这些耗时的任务放入消息队列中,后台线程异步处理,从而提高系统的并发处理能力。
五、分布式架构分布式架构是一种将系统拆分为多个独立的模块,分布在不同服务器上的解决方案。
通过将系统拆分为多个独立的子系统,可以实现对并发请求的并行处理,提高系统的并发能力。
分布式架构可以根据业务特点和负载情况进行灵活的扩展和部署,使系统更加稳定和可靠。
一、背景在高并发的分布式的系统中,缓存是必不可少的一部分。
没有缓存对系统的加速和阻挡大量的请求直接落到系统的底层,系统是很难撑住高并发的冲击,分布式系统中缓存的设计是很重要的一环使用缓存的收益:●加速读写,缓存一般是内存操作,要比传统数据库操作要快的多●降低后端的负载。
缓存一些复杂计算或者耗时得出的结果可以降低后端系统对CPU、IO、线程这些资源的需求●本地缓存远端调用结果,减少服务间的调用,提升服务并发能力目前问题:●目前业务中对缓存的使用并不多,在这次直播活动中,组件性能瓶劲很多,有很大一部分是可以通过缓存加速的●疫情直播活动期间,几个核心服务由于人手、改造难度问题等,最后由罗陈珑做一了个缓存代理服务,把UC、EOMS的部分接口做了缓存代理,这些缓存本来应該由服务提供者来实现的●数据一致性问题,加了缓存之后,随之而来的就是数据一致性的问题,发现有数据不能及时更新●目前大家对缓存使用方式不太统一,有的组件使用本地JVM缓存时封装太复杂,出现问题不好定位,清除缓存也不好做二、目标●降低分布式缓存技术使用门槛,将分布式缓存框架作为微服务开发必备的脚手架,让开发者更易使用,避免因技术门槛而放弃使用缓存梳理核心业务,使用分布式缓存加速服务响应速度,降低服务负载三、分布式缓存方案3.1 @WafCacheable 缓存3.1.1 分布式缓存和本地jvm缓存为了提高接口能力,需要将一些频繁访问但数据更新频率比较低的放入缓存中,不要每次从数据库或其他耗时耗资源的数据源中取。
使用@WafCacheable 注解,缓存过期时间可以根据数据更新频率自由设定,不设置默认为2小时。
@WafCacheable 标记的方法被拦截后,数据获取的优先级:本地jvm缓存>redis缓存> 数据源(DB、RMI、其他耗时耗资源的操作)@WafCacheable使用场景:高频访问低频更新的数据注意:@WafCacheable 对同一个类里的内调方法(A调B, B上加注解不生效),如果直接用this.B(),加在B上的缓存不生效,需要使用${service}.B()调用(${service}指service实例)。
3.1.2 RMI缓存RMI(Remote Method Invocation)是指微服务提供的SDK中FeignClient方式申请的接口,具体参考/noteshare?id=dda3f2af3976689339c9ffa5ba0b0675 RMI上也可以加@WafCacheable注解。
使用场景:对于数据变化频率在2小时以上的,为了减少服务端的请求,提高接口性能缓存方式:本地jvm缓存作用域:客户端/消费者,拦截的包要注意,只拦截以下规则的包命名建议RMI上缓存时间不要超过同一接口service上的过期时间的1/2, 最好设置为1/4.3.1.3 关闭缓存方法1)配置文件中修改●在application.yml中加入waf:cache:enabled: false注意:生产环境禁止关闭缓存●调用rest接口关闭当前结点缓存2)管理接口动态设置3.1.4 缓存配置默认情况下缓存是开启状态,缓存队列大小3W,单个对象20K以下会放入jvm,否则只放入redis,当然也可以通过缓存模式可以强制指定放入jvm.application.yml 配置:waf:cache:enabled: true #控制缓存开关max-object-siz e: 30 #缓存单条对象最大上限大小,单位k b max-queue-si ze: 20000 #缓存队列上限3.1.5 缓存注解的使用3.1.5 手动使用缓存CacheService是封装了jvm缓存和redis缓存,在使用sdk操作缓存时,会同时往jvm和redis都放一份,部分api支持对象大于设置的单个对象大小上限可不放jvm. RedisService封装redis的基本操作,包含分布式锁的操作。
3.2 缓存清除/数据一致性问题缓存能极大的提高系统负载能力,但同时也引入新的问题,数据一致的问题,当一个业务规则或缓存的源数据发生变化时,一般要求被缓存的数据也需要立即更新为最新的数据(少数场景是对数据实时性不敏感或有一定的容忍度)3.2.1 缓存清理的难点●缓存key不确定。
通过@Wafcacheable注解设置的缓存,缓存key的生成策略为如果设置了自定义key 的前缀,则使用自定义key前缀+各个参数拼接而成,如果没有设置自定义key则使用包名+类名+方法名+各个参数拼接而成。
●缓存存在多个节点中。
缓存不仅有微服务提供者内部缓存,还有客户端(消费端)的缓存,一般是在rmi通过@Wafcacheable设置的。
缓存既有jvm缓存也有redis缓存。
jvm缓存存在于每个application中。
这样意味着需要清除所有微服务节点内部的jvm缓存及redis缓存,包括客户端(消费者端)缓存。
3.2.2 LRU+TTL算法缓存更新在被动更新缓存上是采用LRU+TTL组合算法实现缓存更新,也就是说只要缓存达到任一清除条件(缓存过期或LRU)都会被清除LRU算法,当缓存容量不足时(控制了缓存上限,避免OOM),淘汰最久没有被访问过的,始终保持热数据的缓存命中率TTL算法,也就是超时剔除,给缓存数据手动设置一个过期时间,当超过时间后,再次访问时从数据源重新加载并设回缓存期,3.2.3 主动通知缓存更新(立即生效)由上层应用在配置更新后,通过MQ消息通知给微服务,微服务各应用节点以广播消息的方式消费,清除本节点内的缓存。
适用场景:适用数据一致性要求高,对数据不一致容忍度低的场景优点:数据一致性高,实现方式简单,上层应用改动比较小,只需在缓存的数据发生变化后发送一条mq消息缺点:上层应用需要按照清除缓存规则在相应的增、删、改的功能处增加mq消息。
缓存key规则说明:"," 英文逗号表示且的关系,检索同一个key中包含的逗号分隔的多个关键字";" 英文分号表示或的关系,检索封号分隔的多个key.例如:city,010;getAllCity解释:⏹检索缓存key中同时包含city和010字符串的key⏹检索缓存key中包含getAllCity的key.3.3 内置缓存管理3.3.1 开关缓存请求地址/cache/edit请求类型GET接口描述手动控制缓存开关注意:不要轻意关闭整个缓存,目前生产上流量比较大,关闭整个缓存会对数据库有较大压力如需紧级让某个开关生效,可以调用清除缓存的方法单个清缓请求示例http://xxxxx/app/cache/edit?enable=close 关闭缓存http://xxxxx/app/cache/edit?enable=t 开启缓存响应示例true 开启缓存false 关闭缓存3.3.2 打印jvm缓存请求地址app/cache/stack 请求类型GET接口描述以json 格式输出全部jvm缓存,包括key及value 此方法可用于调试缓存内变量请求示例http://xxxxx/app/cache/stack响应示例响应示例{"code": 200,"message": "OK","result": {}}3.3.3 打印jvm缓存队列大小请求地址/cache/stack/size请求类型GET接口描述仅输出jvm内缓存key的个数请求示例http://xxxxx/app/cache/stack/size响应示例{ "size": 3963 }3.3.4 打印所有jvm缓存key请求地址/cache/stack/keys请求类型GET接口描述输出当前进程中所有jvm缓存的key请求示例http://xxxxx/app/cache/stack/keys响应示例3.3.5 模糊搜索缓存中的key请求地址/cache/keys/_search请求类型GET接口描述模糊搜索某个key, 大小写无关请求示例http://xxxxx/app/cache/keys/_search?q=com 响应示例3.3.6 清除全部jvm缓存请求地址/cache/clearjvm请求类型GET接口描述清除全部jvm内存注意:尽量不要使用清除全部jvm内存,可以使用清除特定缓存操作请求示例http://xxxxx/app/cache/clearjvm响应示例响应示例{"code": 200,"message": "OK","result": {}}3.3.7 清除指定key缓存请求地址/cache/clear请求类型POST接口描述清除缓存,可以清除多个缓存请求示例http://xxxxx/app/cache/clear body:["key"]响应示例响应示例{"code": 200,"message": "OK","result": {}}3.3.8 缓存状态请求地址/cache/states请求类型GET接口描述输出当前进程的缓存状态请求示例http://xxxxx/app/cache/states响应参数说明enabled 是否开启缓存maxQueueSize 缓存对列大小maxObjectSize 单个key允许对象最大大小,单位kb响应示例{"enabled": true, "maxQueueSize": 30000, "maxObjectSize": 20}3.3.9 获取缓存中某个key的值/cache/get请求地址GET请求类型输出key对应的值接口描述请求示/cache/get?key={key}例响应示例。