微服务实战系列之Cache(技巧篇)

前言

凡工具必带使用说明书,如不合理的使用,可能得到“意外收获”。这就好比每个人擅长的领域有所差异,如果放错了位置或用错了人,也一定会让 Leader 们陷入两难之地:“上无法肩负领导之重托,下难免失去伙伴之信任”,最终的结局大致是不欢而散

通过前序系列文章,博主对主流Cache工具或者系统做了基础总结,旨在通过一文了解每个工具的特点和差异。
我们经常说理论联系实际,如果只知理论不实践,就和赵括一样,未解敌情轻上阵,只能兵败如山倒。为了合理使用Cache,博主决定通过一文,以实践为指导,掌握正确使用缓存之钥。


  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

通用

无论什么缓存工具或系统,我们常见一般以Key-Value为核心定义缓存。

Q1:如何设置Key

我们已经学习到缓存基本都是以Key-Value设置的,那么如何正确的set key就非常关键。Key一般又以字符串(string)见长,所以是不是可以“肆意而为”了?
就像野马之于草原,逍遥狂奔?那自然不行,容易乐极生悲,此刻急需一个套马杆
Key一般需体现业务含义,一个是可读性,一个是便于检索。

  1. 含义明确
    可以定义具备业务特征的key,比如:center:order:id
  2. 长度适中
    虽然我们可以自主定义key,显然不宜太长,太长自然消耗带宽和吞吐,以致影响用户体验,甚至宕机。所以建议不要超50个字符。
  3. 特殊字符
    尽量避免甚至拒绝使用特殊字符,比如空格等等无意义的字符。
Q2:如何设置Value

知道了如何设置key,那自然还需掌握如何set value。value一般支持的类型较多,比如字符串(string),集合(比如list)等。该如何合理设置Value呢?
比如Redis官方限制不超512M,那我们可以设置为512M吗?如果想试探试探,可以去play一下,否则以满足性能要求为先。这里重点区分两种数据类型:
如果是字符串类型,单条建议不超10K;
如果是集合类型,子元素不超5000个;
如果未按建议执行,超过会怎么样?比如服务带宽是10M,单个value的大小是1M,那么在有限的网络条件下,QPS/TPS势必严重受损,体验在哪里?缓存的意义在哪里?

Q3:如何设置TTL

TTL(Time To Live)是key-value的过期时间。我们在设计缓存键值对的时候,往往容易一概而论,没有根据实际业务场景需要去设置。TTL设置太长,缓存迟迟不更新,除非强制set;TTL设置太短,缓存还没hit,立即被clear了。如此无法体现缓存的意义和价值。所以合理的设置TTL非常重要。

  1. 阶梯性
    通常我们设置TTL时,需考虑时间分散,有所阶梯化,减少copy。比如T+1,太笼统了。
  2. 数据有效期
    贴近业务场景设置TTL,会让缓存更有效能。任何数据均有一定的时间特性,比如你的征信数据,又比如企业的工商登记数据。
    有效的TTL,既能满足业务合理诉求,又能充分利用缓存的高效,如此才是正确的使用方式。

在这里插入图片描述


结语

虽然缓存工具基本也就几种,而且各位盆友(包括博主),一上来就用Redis,因为大家都认可。但是仔细分析几种工具的差异和相同点,无非是在不同场景下形成的固定模式。君不见“缓存穿透、缓存击穿、缓存雪崩”三兄弟经常会出现在我们的工作中。所以如果要更好的使用缓存,或者让缓存更上一层楼,还需略微思考一二。

好了,博主今天聊到这里,GoodNight!
在这里插入图片描述

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

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

相关文章

软件测试基础知识总结

之前有将基础的软件测试知识做了一个总结,但比较潦草,很多内容只是一笔带过,快到年底了,自己也有个写年终知识总结文档的计划,就将基础的理论知识重新整理一番。 有人问我,这些都是能搜索到的知识&#xf…

用IDEA创建Java类时自动生成作者注释等信息

File->settings-->Editor->File and Code Templates->Includes->File Header(双击),然后在右边输入框内输入代码即可 /*** Author 作者名* Date ${DATE} ${TIME}* version 1.0* 注释*/

C++日常遇到的一些坑的总结

一、const 相关 C中const的不同位置的用法 const 修饰符用法总结 二、函数形参没有变量名 三、指针偏移问题 笔记&#xff1a; 包含来自C标准库的头文件&#xff0c;用#inlcude<xxx>&#xff0c;包含不来自C标准库的头文件&#xff0c;用#include"xxx"最…

BitWarden数据迁移以及邮箱SMTP配置

bitwarden 个人密码库&#xff0c;这是我玩nas之后最想推荐的一个东西&#xff0c;今天就来分享一下 之前使用bitwarden都是网上现成的文章照抄&#xff08;能搜到的都是抄来抄去的简直离谱&#xff09;&#xff0c;导致邮箱无法使用、数据库也只是本地的sqlLite很不方便。 前…

分布式版本管理系统---->Git(Linux---centos(保姆式)讲解1)

文章目录: 1:什么是Git以及作用 2.Git的基本操作过程(创建git仓库,配置仓库的配置) 3.git的工作区&#xff0c;暂存区&#xff0c;版本库的关系 4.将文件添加到版本库&#xff1a;git add 与git commit -m命令 5.git log查看日志的引入 6.查看.git文件中的内容 7.修改文件内容查…

15:00的面试,15:06就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

java中BigDecimal里面的subtract函数的意思?

在Java中&#xff0c;BigDecimal类提供了一个名为subtract()的函数&#xff0c;用于执行两个BigDecimal对象的减法操作。该函数返回一个新的BigDecimal对象&#xff0c;表示两个操作数相减的结果。 下面是BigDecimal.subtract()函数的用法示例&#xff1a; java Copy code im…

L1-020:帅到没朋友

题目描述 当芸芸众生忙着在朋友圈中发照片的时候&#xff0c;总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;&#xff0c;是已知朋友圈的个数&#xff1b;随后N行&#…

代码随想录算法训练营第28天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

93. 复原 IP 地址 已解答 中等 相关标签 相关企业 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地…

Java多线程详解(上)——2023/11/23

Process&#xff08;进程&#xff09;与Thread&#xff08;线程&#xff09; 说起进程&#xff0c;就不得不说下程序。程序是指令和数据的有序集合&#xff0c;其本身没有任何运行的含义&#xff0c;是一个静态的概念。而进程则是执行程序的一次执行过程&#xff0c;它是一个动…

基于微服务架构的外卖系统源码开发

在当前互联网时代&#xff0c;外卖行业蓬勃发展&#xff0c;用户对于高效、智能的外卖服务需求不断增加。为了满足这一需求&#xff0c;采用微服务架构的外卖系统成为了开发的主流方向。本文将探讨基于微服务的外卖系统源码开发&#xff0c;涉及到关键技术和示例代码。 1. 微…

伪原创软件盘点,文本处理事半功倍

在工作中&#xff0c;我们常常需要处理大量的文字信息&#xff0c;无论是写作、编辑还是其他文本相关的工作。有时候&#xff0c;为了提高效率&#xff0c;我们可能会需要一些伪原创软件&#xff0c;它们可以帮助我们巧妙地改写文本&#xff0c;使之保留原意的同时呈现出全新的…

Nacos前世今生、安装配置、服务注册源码、整合Springboot实战

一、前言 随着微服务架构的兴起&#xff0c;服务的规模不断增长&#xff0c;对于服务的发现、配置和管理变得越来越复杂。 在这个背景下&#xff0c;Nacos应运而生&#xff0c;以其强大的功能和灵活性成为云原生领域的瑞士军刀之一。 Nacos是一个由阿里巴巴开源的项目&#…

在Spring Cloud中使用组件Zuul网关,并注册到Eureka中去

在上一篇中&#xff0c;我们搭建了Spring Cloud的父子模块&#xff0c;并实现了一个Eureka子模块的启动&#xff0c;可以通过浏览器地址去访问Eureka主页了&#xff0c;相信了解过的童鞋应该看到&#xff0c;主页上并未有任何服务去注册&#xff0c;那么我们就在这篇&#xff0…

SQL怎么优化执行效率更高?

SQL怎么优化执行效率更高&#xff1f; 1.SQL优化的原则是&#xff1a;将一次操作需要读取的BLOCK数减到最低,即在最短的时间达到最大的数据吞吐量。 调整不良SQL通常可以从以下几点切入&#xff1a; 检查不良的SQL&#xff0c;考虑其写法是否还有可优化内容 检查子查询 考虑…

Clickhouse UPDATE 和 DELETE操作

历史&#xff1a; 在OLAP数据库中&#xff0c;可变数据&#xff08;Mutable data&#xff09;通常是不被欢迎的&#xff0c;Clickhouse也是如此&#xff0c;早期版本不支持UPDATE和DELTE操作。在Clickhouse 1.1.54388版本之后才支持UPDATE和DELETE操作&#xff0c;适用于Merge…

字节跳动开源基于SD1.5的 MagicAnimate 一张照片秒变真人舞蹈视频

从今天起&#xff0c;在社交平台上看到的小姐姐舞蹈短视频很可能就是AI生成的。字节跳动新开源基于SD1.5的MagicAnimate&#xff0c;它只需要一张照片和一组动作&#xff0c;就能生成近似真人的舞蹈视频。 项目地址&#xff1a;MagicAnimate使用入口地址 Ai模型最新工具和软件a…

linux部署前端页面(实战)

Linux基本命令&#xff08;学习笔记&#xff09;零基础入门linux系统运维_linux find exec rm_Z_Xshan的博客-CSDN博客 如果linux不熟可以看我之前写的入门教程 感谢支持&#xff01;&#xff01; 一、服务器 这里去购买云服务器&#xff0c;如果是练习可以用虚拟机&#xff…

LeetCode算法题解(动态规划)|LeetCode392. 判断子序列、LeetCode115. 不同的子序列

一、LeetCode392. 判断子序列 题目链接&#xff1a;392. 判断子序列 题目描述&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新…

一文看懂 Linux 内核,清晰明了

Linux内核预备工作 理解Linux内核最好预备的知识点&#xff1a;懂C语言 懂一点操作系统的知识 熟悉少量相关算法 懂计算机体系结构 Linux内核的特点&#xff1a; 结合了 unix 操作系统的一些基础概念。 Linux内核的任务&#xff1a; 1. 从技术层面讲&#xff0c;内核是硬…