当前位置: 首页 > news >正文

Redis数据持久化机制 + Go语言读写Redis各种类型值

Redis(Remote Dictionary Server)作为高性能的键值存储系统,凭借其丰富的数据类型和原子性操作,成为现代分布式系统中不可或缺的组件。

1、Redis支持的数据类型

Redis支持的数据类型可归纳为以下9类:

  1. String(字符串)
  2. Hash(哈希表)
  3. List(列表)
  4. Set(集合)
  5. Sorted Set(有序集合)
  6. Bitmap(位图)
  7. HyperLogLog(基数统计)
  8. Geospatial(地理空间)
  9. Stream(流)

2、Go 语言对这些常见数据类型的读写示例

字符串(String)

package mainimport ("fmt""github.com/go-redis/redis/v8"
)func main() {client := redis.NewClient(&redis.Options{Addr: "localhost:6379",})// 写入字符串err := client.Set(ctx, "key1", "value1", 0).Err()if err != nil {fmt.Println("写入错误:", err)}// 读取字符串value, err := client.Get(ctx, "key1").Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", value)
}

哈希(Hash)

func main() {// 写入哈希err := client.HSet(ctx, "hash1", "field1", "value1", "field2", "value2").Err()if err != nil {fmt.Println("写入错误:", err)}// 读取哈希result, err := client.HGetAll(ctx, "hash1").Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", result)
}

集合(Set)

func main() {// 写入集合_, err := client.SAdd(ctx, "set1", "value1", "value2", "value3").Result()if err != nil {fmt.Println("写入错误:", err)}// 读取集合result, err := client.SMembers(ctx, "set1").Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", result)
}

有序集合(Sorted Set)

func main() {// 写入有序集合z := &redis.Z{Score: 10, Member: "value1"}_, err := client.ZAdd(ctx, "zset1", z).Result()if err != nil {fmt.Println("写入错误:", err)}// 读取有序集合result, err := client.ZRangeWithScores(ctx, "zset1", 0, -1).Result()if err != nil {fmt.Println("读取错误:", err)}fmt.Println("读取结果:", result)
}

3、什么是持久化

持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

4、Redis 持久化方式

Redis支持RDB和AOF两种持久化机制:

4.1、RDB(快照方式)

RDB(快照方式): RDB方式是一种快照式的持久化方法,将某一时刻的数据持久化到磁盘中。这种方式就是将内存中数据以快照的方式写入到二进制文件中 ,默认的文件名为dump.rdb

RDB 配置:

 Redis 的配置文件redis.conf中,可以对 RDB 持久化进行相关配置。比如:

save 900 1​
save 300 10​
save 60 10000

上述配置表示:在 900 秒内,如果至少有 1 个键发生了变化,就触发一次 RDB 持久化;在 300 秒内,如果至少有 10 个键发生了变化,触发 RDB 持久化;在 60 秒内,如果至少有 10000 个键发生了变化,也触发 RDB 持久化。​

RDB 优点:

RDB是一个紧凑的单一文件,方便传送,适用于灾难恢复。

与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些。

RDB 缺点:

RDB 持久化是按照一定的时间间隔进行的,如果在两次持久化之间 Redis 发生故障,那么这期间的数据将会丢失。RDB方式需要保存珍整个数据集,是一个比较繁重的工作,通常需要设置5分钟或者更久做一次完整的保存。

4.2、AOF(日志追加)

AOF(日志追加): AOF方式是将执行过的写指令记录下来,当 Redis 重启时,会重新执行 AOF 文件中的命令,从而恢复到故障前的数据状态。这种方式 redis 会将每一个收到的写命令都通过 write 函数追加到文件中

(默认appendonly.aof)

AOF 配置

在redis.conf文件中,通过修改以下配置来启用和配置 AOF 持久化:

appendonly yes​
appendfsync everysec

appendonly yes表示启用 AOF 持久化。appendfsync参数用于设置 AOF 文件的同步策略,有三个可选值:​
always:每执行一条写命令,就立即将其同步到 AOF 文件中,这种方式可以保证数据的完整性,但会影响 Redis 的性能,因为频繁的磁盘 I/O 操作会带来较大的开销。​
everysec:每秒将缓冲区中的写命令同步到 AOF 文件中,这是默认的配置值,在性能和数据安全性之间取得了较好的平衡。​
no:由操作系统决定何时将缓冲区中的写命令同步到 AOF 文件中,这种方式性能最高,但数据安全性最低,因为在操作系统缓冲区数据还未同步到磁盘时,如果服务器发生故障,数据可能会丢失。​

AOF 优点:

  • 数据安全性高:由于 AOF 是实时记录写命令,相比 RDB,它可以最大程度地减少数据丢失,在生产环境中更适合对数据完整性要求较高的场景。​
  • 服务性能影响小:AOF只是追加日志文件,因此对服务器性能影响较小,速度比RDB要快,消耗的内存较少。

AOF 缺点:

  • AOF 文件体积大:随着时间的推移,AOF 文件会不断增大,因为它记录了所有的写命令。这不仅会占用大量的磁盘空间,还会影响数据恢复的速度。即使通过AOF重写(通过删除 AOF 文件中冗余的命令,将其压缩成一个较小的文件),文件体积仍然很大。
  • 数据恢复慢:在恢复数据时,Redis 需要逐条执行 AOF 文件中的命令,相比 RDB 直接加载内存快照文件,AOF 的恢复速度较慢,尤其是当 AOF 文件非常大时。

5、RDB持久化触发机制

触发RDB持久化过程分为手动触发和自动触发:

5.1、手动触发

手动触发持久化的操作有二个:save和bgsave。它们主要区别体现在:是否阻塞 Redis 主线程的执行。

5.2、自动触发

自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。

 

相关文章:

Redis数据持久化机制 + Go语言读写Redis各种类型值

Redis(Remote Dictionary Server)作为高性能的键值存储系统,凭借其丰富的数据类型和原子性操作,成为现代分布式系统中不可或缺的组件。 1、Redis支持的数据类型 Redis支持的数据类型可归纳为以下9类: String&#x…...

HackMyVM-Demons

目录 信息搜集漏洞利用提权 信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.21.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-27 23:38 EDT Nmap scan report for 192.168.21.1 (192.168.21.1) Host is up (0.0016s latency). MAC Add…...

Python Random 模块使用完全指南

一、模块基础与核心功能 1. 模块导入与初始化 所有随机操作需先导入模块: import random # 标准导入方式 import random as rd # 别名导入(推荐)核心原理:默认基于梅森旋转算法生成伪随机数,可通过random.seed()设…...

前端技术有哪些

一、基础技术 HTML 页面结构标记语言,最新版本为 HTML5。 CSS 样式设计语言,扩展技术包括: CSS 预处理器:Sass、Less、Stylus。CSS 框架:Bootstrap、Tailwind CSS、Bulma。原子化 CSS:Windi CSS、UnoCSS。…...

Python二分查找【清晰易懂】

1. 二分查找是什么? 想象你在玩“猜数字”游戏: 对方心里想一个 1~100 的数字,你每次猜一个数,对方会告诉你是“大了”还是“小了”。 最快的方法:每次都猜中间的数!比如第一次猜50,如果大了&…...

【数据分享】基于联合国城市化程度框架的全球城市边界数据集(免费获取/Shp格式)

在全球城市化进程不断加快的今天,如何精准定义和测量“城市”成为关键问题。不同国家和机构采用不同的标准,导致全球城市化水平的统计结果存在较大差异。同时,由于数据来源分散、标准不统一,获取一套完整、可比的全球城市边界数据…...

ExpTimerApcRoutine函数分析之作用是ActiveTimerListHead里面移除定时器_etimer

第一部分: VOID ExpTimerApcRoutine ( IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2 ) /* Routine Description: This function is the special …...

Linux环境下安装部署Docker

windows下连接Linux: 打开终端: //ssh远程连接 ssh root192.168.xx.xx//输入账号密码 root192.168.xx.xxs password: ssh连接成功! 安装Docker: //安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 …...

深度赋能!北京智和信通融合DeepSeek,解锁智能运维无限可能

在数字化飞速发展的今天,传统运维模式面临着设备规模激增、故障复杂度攀升、人工响应滞后等多重挑战。随着DeepSeek、腾讯元宝等AI大模型的兴起,为传统运维模式带来了新的变革。 北京智和信通基于DeepSeek大模型技术,将AI和运维场景深度融合&…...

mysql死锁排查解决

今天数据库突然报错[40001][1213] Deadlock found when trying to get lock; try restarting transaction 一看就是死锁 阿里实列会显示类似sql:UPDATE goods SET num num - 1 WHERE id2 AND num > 1; 一看sql这不是扣减库存操作吗? 为什么这sql会出现死锁??…...

Linux | i.MX6ULL 终结者学习指南(1)

01 一 光盘资料介绍 跟我一起成为嵌入式Linux大佬,开干 02 接下来我们一起学习。 01_开发及烧写工具 (Linux 镜像烧写工具、交叉编译器、裸机镜像制作工具) 1.交叉编译器 (ARM 交叉编译器) 2.裸机镜像制作…...

NX二次开发刻字功能——布尔运算

刻字功能在经历、创建文本、拉伸功能以后就剩下布尔运算了。布尔运算的目的就是实现文本时凸还是凹。这部分内容很简单。 1、首先识别布尔运算的类型,我这里用到一个枚举类型的选项,凸就是布尔求和,凹就是布尔求差。 2、其放置位置为创建拉伸…...

SpringAI与JBoltAI深度对比:从工具集到企业级AI开发范式的跃迁

一、Java生态下大模型开发的困境与需求 技术公司的能力断层 多数企业缺乏将Java与大模型结合的标准开发范式,停留在碎片化工具使用阶段。 大模型应用需要全生命周期管理能力,而不仅仅是API调用。 工具集的局限性 SpringAI作为工具集的定位&#xff1…...

JAVASCRIPT 异步函数:底层原理,fetch,promise实例方法then, catich

什么是异步 所谓“异步函数”通常指这样一种函数:它在编写时会调用异步 API 并在某个时机(可能是定时、可能是等待网络、也可能是其他操作)把结果“异步”地返回。而“回调函数”是异步函数执行完成后会去调用的函数,也就是“等待…...

docker run -p 5000:5000 my-flask-app

docker run -p 5000:5000 my-flask-app代码的意思是: 运行 my-flask-app 容器,并把 Flask 服务器的 5000 端口映射到本机的 5000 端口。 拆解解释 docker run -p 5000:5000 my-flask-app✅ docker run → 运行一个 Docker 容器 ✅ -p 5000:5000 → 端口…...

头文件“stm32f10x.h“与 “stdint.h“和“stdio.h“之间的关系

目录 一、#include "stm32f10x.h"包含#include "stdint"吗? 1、直接包含情况 2、间接依赖情况 3、实际使用建议 二、#include "stm32f10x.h"包含#include "stdio.h"吗? 1、头文件功能与设计目的差异 2、实…...

前端常问的宏观“大”问题详解

HTML5新特性包括那些 HTML5新特性详解 HTML5作为现代网页开发的核心标准,引入了多项革新特性,涵盖语义化标签、多媒体支持、表单增强及新API等,显著提升了网页功能与开发效率。以下是其核心新特性的分类总结: 一、语义化标签 HTML5新增了语义化布局标签,替代传统无意义…...

华为机试练习

挑7_牛客题霸_牛客网 整数转换为字符串String numStr String.valueOf(str); String有一个contains方法,查看是否包含字符串 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String…...

压力测试未覆盖边界条件的后果有哪些

压力测试未覆盖边界条件可能导致的主要后果包括产品稳定性下降、潜在故障隐患未被识别、用户体验下降及企业信誉受损。其中,最直接且明显的后果是产品稳定性下降。产品在极限或边界条件下通常最容易暴露缺陷,如果压力测试未充分覆盖这些边界条件&#xf…...

编程技术水平横向和垂直发展的抉择全方位分析

文章目录 摘要引言一、横向发展的全面分析二、垂直发展的深度剖析三、发展路径的决策模型四、两者结合的协同策略五、行业应用与趋势分析六、结论 摘要 本文全面分析了编程技术发展中横向扩展与垂直深化的战略抉择。通过系统比较两种发展路径的特点、优势、劣势及应用场景&…...

Docker技术系列文章,第十篇——Docker 集群与编排(以 Kubernetes 为例)

本篇内容作为docker系列的收尾之作,之所以选择本篇作为收尾之作,是因为小编觉得 这十篇内容已经满足基础的docker应用中的需求了;关注小编,小编后期还会不定时的更新docker相关的知识点。希望诸君共同努力,都能收获的愈…...

iPhone mini,永远再见了

世界属于多数派,尽管有极少数人对 iPhone mini 情有独钟,但因为销量惨淡,iPhone mini 还是逃不开停产的命运。 据 Counterpoint 的数据,iPhone 12/13 mini 两代机型,仅占同期 iPhone 销量的 5%。 因为是小屏手机&…...

第五周日志-重新学汇编(2)

机器语言 汇编语言(直接在硬件上工作——硬件系统结构): 1.机器语言 每一种微处理器硬件设计和内部结构不同(决定了电信号不同,进而需要不同的机器指令) #早期通过纸带机/卡片机输入计算机,进行运算 2…...

Qt正则表达式QRegularExpression

在 Qt 中,正则表达式是处理文本的强大工具,它能够帮助我们匹配、搜索和替换特定的字符串模式。自 Qt 5 起,QRegularExpression 类提供了对 ECMAScript 标准的正则表达式支持,这使得它在处理各种复杂的字符串任务时变得更加高效和灵…...

Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)

Java-servlet(十)使用过滤器,请求调度程序和Servlet线程 前言一、Servlet 间通信(了解即可)二、Servlet 请求处理:getAttribute 和 getParameter 的区别与应用1.getAttribute 方法2.getParameter 方法 三、…...

【环路补偿】环路补偿的九种类型-mathcad计算书免费下载

环路补偿的九种类型-mathcad计算书免费下载 通过网盘分享的文件:环路补偿的9种类型.xmcd 链接: https://pan.baidu.com/s/1QIwsKsbv-WyyYgGc4P1eqg?pwd4sar 提取码: 4sar --来自百度网盘超级会员v3的分享...

【极速版 -- 大模型入门到进阶】LORA:大模型轻量级微调

文章目录 🌊 有没有低成本的方法微调大模型?🌊 LoRA 的核心思想🌊 LoRA 的初始化和 r r r 的值设定🌊 LoRA 实战:LoraConfig参数详解 论文指路:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE M…...

六十天前端强化训练之第三十二天之Babel 转译配置大师级深度讲解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、核心概念与知识体系详解 1. Babel 工作原理全景解析 二、完整配置方案(带详细注释) 1. 进阶版 .babelrc 配置 2. Webpack 集成配置&#xff08…...

nginx部署前端项目(linux、docker)

引言 在CentOS 7系统上使用docker安装nginx,使用nginx部署一个由Vue开发、打包的项目 docker安装nginx 这里不多赘述,直接上docker-compose.yml代码 nginx:container_name: nginximage: nginx:1.27.2ports:- "80:80"volumes:- /docker/ngin…...

支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施

关键词:支付页面安全、E-Skimming、PCI DSS v4.0.1、第三方脚本、风险管理、持卡人数据、数据安全、第三方服务提供商、TPSP、内容安全、网页监控、恶意脚本攻击 本文为atsec和作者技术共享类文章,旨在共同探讨信息安全的相关话题。转载请注明&#xff…...

配置完nfs后vmware虚拟机下ubuntu/无法联网问题

背景:我在用imx6ull配置完nfs和tftp后,哪怕还原了设置也连不上网,网上的教程都没用,什么配置路由,配置ip,配置什么用户文件,都没用,最后试出来了一个方法,解决问题。 方法…...

【含文档+PPT+源码】基于大数据的交通流量预测系统

项目介绍 本课程演示的是一款基于大数据的交通流量预测系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码…...

关于Qt的各类问题

目录 1、问题:Qt中文乱码 2、问题:启动时避免ComBox控件出现默认值 博客会不定期的更新各种Qt开发的Bug与解决方法,敬请关注! 1、问题:Qt中文乱码 问题描述:我在设置标题时出现了中文乱码 this->setWindowTitle("算法…...

Oracle19C的启动及停止

在 Oracle 19c 中,停止和启动数据库实例是常见的操作。以下是详细的步骤,涵盖单实例和 RAC 环境。 1. 停止 Oracle 19c 数据库实例 1.1 使用 SQL*Plus 停止数据库 连接到数据库实例: sqlplus / as sysdba 停止数据库: 正常关闭…...

端侧设备(如路由器、家庭网关、边缘计算盒子、工业网关等)的典型系统、硬件配置和内存大小

🏠 家用/工业级边缘设备硬件概览 类型常见设备示例CPU 架构内存范围操作系统类型家用路由器TP-Link、小米、华硕、OpenWrtARM Cortex-A7/A964MB~256MBOpenWrt / DD-WRT / Embedded Linux智能家庭网关华为、绿米、天猫精灵、Aqara HubARM Cortex-M/R128MB~512MBEmbedded Lin…...

tcp接发json字符串

因工作需要对接硬件设备,需要通过tcp协议接收发送字符串,而字符串里面全是json字符串,登陆用json对象发送,心跳也用json发送,设备检测到信号后自动推送的也是json字符串,只要登陆后心跳就要每过10秒发送一次,而信号的推送则是在登陆后的任意时间发生.每个json与json之间没有换行…...

string模拟实现-C++

一、目标 string函数是C中常用的库函数,在string中有许多操作函数,对于一些常用的操作函数,我们可以自己模拟实现一下。 实现的操作有: 迭代器 构造函数 拷贝构造函数 析构函数 赋值运算符重载 c_str() size() [ ]运算符重…...

uni-app AES 加密

uni-app 官网没有 加密 API 我们 可以 安装 crypto-js npm install crypto-js他会保存到项目中 node_modules import CryptoJS from ../node_modules/crypto-js //引用AES源码js const keyCode 012345678 //密钥 const ivCode 012345678 //偏移量const key CryptoJS.enc.Ut…...

【STM32】GPIO输入(按键)

目录 一、如何分辨GPIO输入使用什么电频二、输入抖动问题如何消抖三、示例代码 一、如何分辨GPIO输入使用什么电频 先看原理图 即可知道他的初始输入状态需要高电平 判断可知使用上拉输入 二、输入抖动问题如何消抖 电路图中, 按键输入有额外的电容电阻, 是为了消抖 消抖方…...

Manus AI 与多语言手写识别技术解析

Manus AI 与多语言手写识别技术解析 Manus AI 是一家专注于人工智能技术的公司,其多语言手写识别技术在多个领域展现了强大的应用潜力。本文将从技术原理、应用场景、优势与挑战等方面,深入解析 Manus AI 的多语言手写识别技术。 1. 技术原理 (1) 手写…...

每日总结3.28

蓝桥刷题 3227 找到最多的数 方法一&#xff1a;摩尔投票法 #include <bits/stdc.h> using namespace std; #define int long long signed main() { int n,m; cin>>n>>m; int a[m*n]; for(int i0;i<n*m;i) { cin>>a[i]; } int cand…...

NX二次开发刻字功能——预览功能

这个预览功能其实在NX软件中很常见,有利于建模者确定刻字的位置,这个功能早在唐康林老师的超级长方体教程中出现过。我只是学以致用。把该功能集成刻字中。 在勾选预览的同时,如果点击放大镜也就是显示预览结果,要刻字的对象透明度数值为70,同时预览结果文字会变成撤销,如…...

算法 | 2024最新算法:鳑鲏鱼优化算法原理,公式,应用,算法改进研究综述,matlab代码

2024最新鳑鲏鱼优化算法(BFO)研究综述 鳑鲏鱼优化算法(Bitterling Fish Optimization, BFO)是2024年提出的一种新型群智能优化算法,受鳑鲏鱼独特的繁殖行为启发,通过模拟其交配、产卵和竞争机制进行全局优化。该算法在多个领域展现出优越性能,尤其在解决复杂非线性问题中…...

WPF基础知识(续)

六、WPF 中的样式和模板 样式定义&#xff1a; 可以在 XAML 中定义样式来统一 UI 元素的外观和风格。样式可以定义在资源字典中&#xff0c;也可以直接在窗口或控件的Resources属性中定义。例如&#xff0c;定义一个按钮的样式&#xff1a; <Window.Resources><Sty…...

Go 语言 sync 包使用教程

Go 语言 sync 包使用教程 Go 语言的 sync 包提供了基本的同步原语&#xff0c;用于在并发编程中协调 goroutine 之间的操作。 1. 互斥锁 (Mutex) 互斥锁用于保护共享资源&#xff0c;确保同一时间只有一个 goroutine 可以访问。 特点&#xff1a; 最基本的同步原语&#x…...

MybatisPlus(SpringBoot版)学习第四讲:常用注解

目录 1.TableName 1.1 问题 1.2 通过TableName解决问题 1.3 通过全局配置解决问题 2.TableId 2.1 问题 2.2 通过TableId解决问题 2.3 TableId的value属性 2.4 TableId的type属性 2.5 雪花算法 1.背景 2.数据库分表 ①垂直分表 ②水平分表 1>主键自增 2>取…...

集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进

集成开发环境革新&#xff1a;IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境&#xff08;IDE&#xff09; 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码&#xff0c;还能集成版本控制和代码优化等多种功能。如今&#xff0c;随着人工智能&a…...

Qt弹出新窗口并关闭(一个按钮)

参考&#xff1a;Qt基础 练习&#xff1a;弹出新窗口并关闭的两种实现方式&#xff08;两个按钮、一个按钮&#xff09;_qt打开一个窗口另一个关闭-CSDN博客 实现&#xff1a; 一个按钮&#xff0c;点击一次&#xff0c;按钮的名字从open window变为close window&#xff0c;…...

暴力搜索算法详解与TypeScript实战

# 暴力搜索算法详解与TypeScript实战## 什么是暴力搜索&#xff1f;暴力搜索&#xff08;Brute Force Search&#xff09;是算法领域最基础的解题方法之一&#xff0c;其核心思想是**系统性地枚举所有可能的候选解**&#xff0c;并验证每个候选解是否满足问题条件。这种方法不依…...

[识记]Mysql8 远程授权

今天在测试docker时&#xff0c;因更换为Mysql8&#xff0c;使用SQL方式实现远程授权&#xff0c;其方式方法同于Mysql&#xff0c;但语句稍有不同&#xff0c;仅供参考。 登录mysql mysql -u root -p 输入密码: [请依据交互输入你的mysql密码]切换数据库 use mysql;选择需要…...