一个破单机,也要用远程缓存?

大家好,豆小匠终于开始Coding了,这期来聊聊实战相关的杂谈。

正文开始!


作为编程萌新的时候,总想着把程序做复杂,堆技术栈。

但是程序是为场景服务的,比如,我想提高接口的响应速度,应该怎么做呢?

一个简单粗暴的方法就是加内存型的数据库,比如Redis,Memcache等。

那么怎么加?Redis单机实例?Redis集群?

等等,我现在就一台服务器额…

或许后端服务和Redis部署在同一台服务器,速度还能快不少。

但是这样的话,为什么不把数据直接存到内存呢!


简单测试下Redis缓存和本地缓存的性能差异:

package cache_testimport ("context""log""testing""github.com/patrickmn/go-cache""github.com/redis/go-redis/v9"
)var localCache *cache.Cache
var redisCache *redis.Clientfunc TestMain(m *testing.M) {// 初始化一个默认永不过期的本地缓存localCache = cache.New(cache.NoExpiration, cache.NoExpiration)// 连接本地启动的redisredisCache = redis.NewClient(&redis.Options{Addr:     "127.0.0.1:6379",Password: "",DB:       0,PoolSize: 100,})_, err := redisCache.Ping(context.Background()).Result()if err != nil {log.Fatalf("redis client init failed: %v", err)}m.Run()
}func BenchmarkRedisCacheStore_Get(b *testing.B) {b.StopTimer()ctx := context.Background()redisCache.Set(ctx, "key", "value", 0)b.StartTimer()for i := 0; i < b.N; i++ {redisCache.Get(ctx, "key")}
}func BenchmarkLocalCacheStore_Get(b *testing.B) {b.StopTimer()localCache.Set("foo", "bar", cache.NoExpiration)b.StartTimer()for i := 0; i < b.N; i++ {localCache.Get("foo")}
}
redis cache测试结果local cache测试结果
goos: windowsgoarch: amd64pkg: github.com/anjude/backend-superone/test/cache_testcpu: AMD Ryzen 7 6800H with Radeon GraphicsBenchmarkRedisCacheStore_GetBenchmarkRedisCacheStore_Get-16 31167 34784 ns/opPASSgoos: windowsgoarch: amd64pkg: github.com/anjude/backend-superone/test/cache_testcpu: AMD Ryzen 7 6800H with Radeon GraphicsBenchmarkLocalCacheStore_GetBenchmarkLocalCacheStore_Get-16 217163282 5.389 ns/opPASS

让ChatGPT解读下↓↓↓

大概意思就是Redis缓存每次获取时间是本地缓存的6455倍。(不同机器测试有差异)


看着服务器上运行的Redis,降本增效这么简单?

本地缓存这么nb,只能玩单机吗?

当然,不是了…


应该说,什么场景适合使用本地缓存。

下面描述这个场景:

  1. 频繁读取的数据。
  2. 对读取速度敏感的数据。
  3. 相对稳定不经常变化的数据。
  4. 能容忍一定延迟更新的数据。

不一定完全满足上述的条件,只是满足的越多,越适合使用本地缓存。

频繁读取和读取速度敏感的数据很容易理解,使用本地缓存就是为了快,还可以缓解远程共享缓存的压力。

但是如果我们的服务器多起来了,每台实例都缓存有一份数据,如果数据有更新,同步到其他实例的成本就会升高。

如果能满足第三点相对稳定的数据,我们仍旧可以使用本地缓存,否则使用远程共享缓存。

那么第四点呢,这个数据实在太稳定了,稳定到我们可能不需要第一时间察觉到它的更新,这时候甚至不需要实例间的同步,只需要实例定时刷新这个数据就行。

比如一杯豆浆的价格,常年都是2元,某一天升到3元,我5分钟刷新一次价目表,最多延迟个5分钟才更新价格,其实还可以接受的。


这期就喵到这!收!

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

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

相关文章

Vue3集成json-editor-vue3

安装依赖 npm install json-editor-vue3 --save引入 main.js import "jsoneditor";具体模块 import JsonEditorVue from json-editor-vue3;代码实现 <json-editor-vue ref"jsonEditor" class"editor" v-model"state.addFormField.p…

Linux应用层点亮硬件的LED灯

一 应用层操作硬件的两种方法 应用层想要对底层硬件进行操控&#xff0c;通常可以通过两种方式&#xff1a; /dev/目录下的设备文件&#xff08;设备节点&#xff09;&#xff1b;/sys/目录下设备的属性文件。 具体使用哪种方式需要根据不同功能类型设备进行选择&#xff0c;通…

docker应用实例及dockerfile

实际应用 神经网络项目由x86cpu的linux环境移到arm cpu架构上运行&#xff0c;使用docker进行测试以及环境配置。 docker load -i 镜像压缩文件.tar docker load -i命令用于从一个压缩的镜像存档文件&#xff08;通常是以.tar扩展名结尾&#xff09;中加载镜像到本地Docker引擎…

API支付接口

在数字化时代&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;支付接口已成为电子商务和移动支付领域的核心技术。它们作为软件之间的桥梁&#xff0c;使得商家能够无缝地整合各种支付服务&#xff0c;从而为消费者提供…

vscode设置vue3代码格式化

vscode设置vue3代码格式化 vscode设置vue3代码格式化 下载插件设置格式化时选用的插件实际使用 使用Prettier默认配置使用Prettier添加自定义配置使用Volar 完整配置文件参考链接 下载插件 可以使用Volar或Prettier 设置格式化时选用的插件 mac&#xff1a;【shift】【op…

【C++】类与对象 I

类与对象 I &#xff1a; 前言&#xff1a;&#xff08;C&#xff09;面向过程 和&#xff08;C&#xff09;面向对象 初步认识前言&#xff1a;类的引入一、类的介绍二、类的定义&#xff08;一&#xff09;class 语法&#xff08;二&#xff09;类的两种定义方式&#xff1a;…

【MySql系列】深入解析数据库索引

写在前面 MySQL索引是数据库中一个关键的概念&#xff0c;它可以极大地提高查询性能&#xff0c;加快数据检索速度。但是&#xff0c;要充分发挥索引的作用&#xff0c;需要深入理解它们的工作原理和使用方式。 在本文中&#xff0c;我们将深入解析MySQL索引&#xff0c;探讨它…

JavaWeb——CSS3的使用

目录 1. CSS概述 2. CSS引入方式 3. CSS颜色显示 4. CSS选择器 4.1. 元素&#xff08;标签&#xff09;选择器 4.2. id选择器 4.3. 类选择器 4.4. 三者优先级 5. 盒子模型 1. CSS概述 CSS&#xff0c;全称为“Cascading Style Sheets”&#xff0c;中文译为“层叠样式…

除了http还有哪些通信协议?

除了HTTP协议外&#xff0c;还存在许多其他通信协议。以下是一些常见的通信协议&#xff1a; 1&#xff1a;HTTPS&#xff1a;HTTPS&#xff08;HTTP Secure&#xff09;是HTTP的安全版本&#xff0c;通过使用SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff0…

三、Vue3中使用Pinia修改State的方法

修改Pinia仓库的值有5种方式 src/store/index.ts import { defineStore } from pinia; import { Names } from ./store-name; export const useTestStore defineStore(Names.Test, {state:()>{return {current:1111,name: 小满111}},getters:{ // 类似computed计算属性 同…

OpenMediaVault控制台web页面密码重置

要重置 OpenMediaVault&#xff08;OMV&#xff09;Web 控制台的密码&#xff0c;可以使用 omv-firstaid 命令行工具中的相应选项。按照以下步骤进行操作&#xff1a; 以管理员权限登录到 OMV 的命令行界面&#xff08;通过 SSH 或直接登录&#xff09;。 ssh登陆到root用户 运…

ubuntu 怎么安装图形界面

ubuntu 安装图形界面的方法&#xff0c;可以通过以下步骤操作来实现&#xff1a; 1、确认版本首先登录一下服务纯缺器ubuntu&#xff0c;查看系统版本。然后用root账号登录&#xff0c;如下图所示&#xff1a; 2、更新apt-get首先要先更新一下apt-get源&#xff0c;输入apt-g…

k8s实践

k8s作为分布式集群部署方案&#xff0c;是一个主流的部署方案。 1. 服务器配置 至少准备3台服务器&#xff0c;首先修改服务器名称 hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2然后关闭防火墙和selinux s…

Linux安装java jdk配置环境 方便查询

编辑/etc/profile文件&#xff1a; vim /etc/profile 在文件尾部添加如下配置&#xff1a; export JAVA_HOME/usr/local/jdk1.8.0_161/ export CLASSPATH.: J A V A H O M E / j r e / l i b / r t . j a r : JAVA_HOME/jre/lib/rt.jar: JAVAH​OME/jre/lib/rt.jar:JAVA_HOME/l…

HBase学习笔记(2)—— API使用

对HBase中常用的API操作进行简单的介绍 对应HBase学习笔记&#xff08;1&#xff09;—— 知识点总结-CSDN博客中介绍的HBase Shell常用操作 更多用法请参考官网&#xff1a;Apache HBase ™ Reference Guide 依赖导入 <dependencies><dependency><groupId>o…

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层&#xff1f;1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…

Oracle使用块更改跟踪改善增量备份的性能

1.概述 增量备份的块更改跟踪功能&#xff0c;通过在块更改跟踪文件中的每个数据文件中记录更改的块来提高增量备份的性能。 此文件是存储在数据库区域中的小型二进制文件。 RMAN在生成重做时&#xff0c;跟踪更改的块。 如启用了块更改跟踪&#xff0c;则RMAN将使用更改跟踪文…

2023NOIP A层联测31 总结

T1 有一个长为 n n n 的序列 { a i } \{a_i\} {ai​}&#xff0c;你可以操作若干次&#xff1a;选择一个 i i i&#xff0c;花费 c x c_x cx​ 元将 a i a_i ai​ 变为 ⌊ a i x ⌋ ⌊\frac{a_i}x⌋ ⌊xai​​⌋&#xff0c;你总共有 K K K 元。问最终序列的中位数最小…

25.4 MySQL 函数

1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…

[01]汇川IMC30G-E系列运动控制卡应用笔记

简介 IMC30G-E系列产品是汇川技术自主研制的高性能EtherCAT网络型运动控制器&#xff08;卡&#xff09;&#xff0c;同时兼容脉冲轴的控制&#xff1b;IMC30G-E支持点位/JOG、插补、多轴同步、高速位置比较输出、PWM等全面的运动控制功能&#xff0c;具备高同步控制精度。 开发…