Redis代码实践总结

news2024/9/27 7:21:34

一、背景: redis从安装到实践,做一些具体的记录。

1.1 Redis和 RedisStack和Redis Enterprise

redis简介

Redis 是一种开源(BSD 许可)内存中数据结构存储,用作数据库、缓存、消息代理和流引擎
Redis 提供数据结构,例如 字符串、散列、列表、集合、带范围查询的排序集、位图、超级日志、地理空间索引和流
Redis 具有内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,并通过Redis SentinelRedis Cluster自动分区提供高可用性。
您可以对这些类型运行原子操作 ,例如附加到字符串; 增加哈希中的值;将元素推入列表;计算集合的交、 并、差;或获取排序集中排名最高的成员。
为了实现最佳性能,Redis 使用 内存数据集
根据您的使用案例,Redis 可以通过定期将数据集转储到磁盘 或将每个命令附加到基于磁盘的日志来持久保存您的数据。如果您只需要功能丰富的网络内存缓存,您还可以禁用持久性。
Redis 支持异步复制,具有快速非阻塞同步和自动重新连接以及网络分割上的部分重新同步。
Redis 还包括:
交易
发布/订阅
Lua脚本
密钥的生存时间有限
LRU 驱逐键
自动故障转移

总结:

1. 这是从官网摘抄的介绍,实际上点明了redis的用处和使用场景。换句话说,如果我们能知道简介里的这些功能是如何使用的,那redis也就掌握了。

2.一般我称呼redis叫内存数据库。

redisStack简介

除了Redis OSS的所有功能之外,Redis Stack还支持:
1、概率数据结构 ; 2、可查询的 JSON 文档;3、 跨哈希和 JSON 文档查询; 4、时间序列数据支持(摄取和查询),包括全文搜索

Redis Stack 的创建是为了让开发人员能够使用后端数据平台构建实时应用程序,该平台可以在毫秒或更短的时间内可靠地处理请求。

开始使用 Redis Stack 的最佳方法是使用RedisInsight,这是一个用于理解和优化 Redis 数据的可视化工具。

RedisInsight 允许您:

使用浏览器工具直观地查看数据结构,并根据名称空间对键进行分组。
在大多数 Redis Stack 数据结构上使用 CRUD。
利用 Workbench,这是一种高级命令行界面,具有智能命令自动完成功能和复杂的数据可视化功能。
使用 Profiler 工具实时分析 Redis 的流量。
随时使用嵌入式 Redis CLI。
使用内存分析工具分析内存使用情况。
使用 Slowlog 工具识别并排除瓶颈。

总结: 看介绍,这是给我们提供了一个可见页面和更多工具用来观测和使用redis的桌面UI工具。从运维的角度来说, 看起来不错。但我还没用过。试过后会补充一些介绍的。

Redis Enterprise

企业级 Redis,可在本地和云中(在 AWS、Google Cloud 或 Azure 上)使用。Redis Enterprise 简化了操作、扩展和多租户,包括许多集成(例如 Kubernetes),并提供多层支持。

总结: 看起来不错,但也许你在跨国外企工作时,才有必要使用它。毫无疑问。它和阿里的redis内存数据库Tair一样,都是收费的。当你作为项目经理时,你才需要考虑这两者的收费标准。

二、开始使用 Redis

2.1 安装和调试

学习在linux上安装就可以了。

  1. 安装包下载。
    你可以在redis官网( https://redis.io/download/)或者github(https://github.com/redis/redis)上下载最新版本。 建议选择tar.gz压缩格式的版本包。
    在这里插入图片描述
    在这里插入图片描述

二、选择一个服务器,把包放上去解压,然后运行,最后查看结果。
推荐在/usr/local目录下解压。 解压命令是

tar -xzvf redis-7.2.1.tar.gz

这样你就会有一个redis-7.2.1的文件夹出现了
在这里插入图片描述
接下来是进入redis目录,执行make命令,会有很多编译过程的输出,等几分钟,让它执行完。

cd redis-7.2.1
make
make install

如果编译成功,您将在src目录中找到几个Redis二进制文件,包括:

  • redis-server:Redis 服务器本身
  • redis-cli是与 Redis 交互的命令行界面实用程序。

启动和停止

#前台启动
redis-server
#后台启动  
redis-server&

Ctrl-c可以停止redis
在这里插入图片描述
在这里插入图片描述

总结: 上面的操作可以对照官网执行,一般这样就可以得到一个启动的redis了。下面是一些多的实践部分。上面图片执行redis-server启动命令后,启动日志里出现了三个warning,下面是解析:

Waring1: 警告表示没有指定配置文件,所以Redis使用默认配置。要使用特定的配置文件,可以使用这个命令指定。

[root@jqvalueadd33 src]# ./redis-server ../redis.conf

在这里插入图片描述
redis.conf文件很重要,有很多参数配置,有的配置我们需要做一些修改。

waring2: 警告表示,尽管Redis试图将TCP的backlog设置为511,但由于系统的/proc/sys/net/core/somaxconn值为128,所以这个设置无法生效。

waring3:警告表示overcommit_memory设置为0可能会在低内存情况下导致背景保存失败。
实际使用中,我建议是忽略掉这个警告。当然,如果你想多了解一些,你可以往下看,不然建议跳过这一部分。

为了修复这个问题,建议在/etc/sysctl.conf中设置vm.overcommit_memory = 1,然后重启或执行指定的命令。
redis官网对这个问题有一些描述,摘抄如下:

Linux 上的后台保存失败并出现 fork() 错误?
简短的回答:echo 1 > /proc/sys/vm/overcommit_memory:)
现在是长篇: forkRedis 后台保存模式依赖于现代操作系统中系统调用的写时复制语义:Redis fork(创建子进程),它是父进程的精确副本。子进程将数据库转储到磁盘上并最终退出。理论上,子进程应该使用与作为副本的父进程一样多的内存,但实际上,由于大多数现代操作系统实现的写时复制语义,父进程和子进程将共享公共内存页面。仅当子页面或父页面发生更改时,页面才会被复制。由于理论上在子进程保存时所有页面都可能发生变化,Linux无法提前知道子进程将占用多少内存,因此如果overcommit_memory如果设置为零,则 fork 将失败,除非有足够多的可用 RAM 来真正复制所有父内存页面。如果您有 3 GB 的 Redis 数据集并且只有 2 GB 的可用内存,它将失败。
设置overcommit_memory为 1 告诉 Linux 放松并以更乐观

下面是我的一些理解:

当我们需要把redis的数据fork到磁盘时,生成一个RDB(Redis数据库快照)文件。 而fork动作会需要linux分配父进程一样多的内存。但实际上使用过程中,父进程和子进程会共享很大一部分内存,而单独使用少部分内存。
overcommit_memory如果设置为零,当物理内存和交换空间不足以分配,那么fork会直接失败,数据持久化到磁盘失败。
overcommit_memory如果设置为1,当物理内存和交换空间不足以分配,会允许fork,持久化会成功,但也有OOM的风险。
overcommit_memory设置:overcommit_memory是Linux内核参数之一,用于控制内存分配策略。它有三个可能的值::
0:表示严格模式,内核将拒绝分配超过物理内存和交换空间总和的内存。这是默认设置。
1:表示按需分配模式,内核允许分配超过物理内存和交换空间总和的内存,但在实际使用时可能会导致OOM(Out of Memory)错误。
2:表示总是允许内存分配,无论物理内存和交换空间的状态如何。
解决方法:为了避免Redis后台保存操作中的fork错误,通常会建议将overcommit_memory设置为1。这允许操作系统更宽松地分配内存,从而更容易执行fork。您可以使用以下命令将overcommit_memory设置为1

fork()动作生成RDB文件的好处:

持久化数据:Redis是一个内存数据库,它将数据存储在内存中以提供高速读写访问。然而,为了确保数据在断电或服务器重启时不会丢失,需要将数据持久化到磁盘上。后台保存是一种将内存中的数据保存到硬盘上的方式,以便在需要时能够恢复数据。
备份数据:后台保存操作的结果是生成一个RDB(Redis数据库快照)文件,该文件包含了Redis数据库的当前状态。这个RDB文件可以用于数据备份和恢复。它提供了一种简单的方法来创建数据库的点对点备份,以防止数据丢失或损坏。
性能优化:由于将数据写入磁盘通常比写入内存慢得多,如果在主线程中执行保存操作,它可能会阻塞Redis服务器的正常响应请求。通过使用后台保存操作,Redis可以将数据保存到磁盘而不会阻塞主进程,从而保持了响应性能。
节省资源:后台保存操作通常是在一个单独的子进程中执行的,这个子进程是通过fork从父进程创建的。由于父进程和子进程共享相同的内存,子进程可以利用写时复制(Copy-On-Write)技术,只有在需要修改数据时才会复制内存页面,因此在保存期间节省了内存资源。
总之,Redis使用fork创建子进程来执行后台保存操作的主要目的是确保数据的持久性、提供备份和恢复功能、优化性能以及节省内存资源。这使得Redis在内存数据库的同时,也具备了数据持久性和可靠性的特性。

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

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

相关文章

2023/9/20 -- C++/QT

时钟: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPaintEvent> #include <QDateTime> #include <QLabel> #include <QTimer> #include <QDebug>QT_BEGIN_NAMESPACE namespac…

WebGL层次模型——多节点模型

目录 多节点模型 MultiJointModel中的层次结构 控制各部件旋转角度的变量 示例程序——共用顶点数据&#xff0c;通过模型矩阵缩放实现&#xff08;MultiJointModel.js&#xff09; MultiJointModel.js&#xff08;按键响应部分&#xff09; MultiJointModel.js&#x…

CentOS 7.5 centos failed to load selinux policy 错误解决方法

这是个 selinux 使能导致的&#xff0c; 关闭即可 在进入到内核选中界面&#xff0c;选中要启动的内核&#xff0c; 按键盘 e 就会进入启动参数界面 进入启动参数界面如图&#xff0c;按上下键找到 UTF8 UTF8如图&#xff0c; 添加 selinux0 添加完成如图&#xff0c; 按 ctr…

编译工具:CMake(八) | cmake 常用指令

编译工具&#xff1a;CMake&#xff08;八&#xff09; | cmake 常用指令 基本指令 基本指令 ADD_DEFINITIONS向 C/C编译器添加-D 定义&#xff0c;比如:ADD_DEFINITIONS(-DENABLE_DEBUG-DABC)&#xff0c;参数之间用空格分割。 如果你的代码中定义了#ifdef ENABLE_DEBUG #end…

OpenCV实现“蓝线挑战“特效

原理 算法原理可以分为三个流程&#xff1a; 1、将视频&#xff08;图像&#xff09;从&#xff08;顶->底&#xff09;或&#xff08;左->右&#xff09;逐行&#xff08;列&#xff09;扫描图像。 2、将扫描完成的行&#xff08;列&#xff09;像素重新生成定格图像…

【JAVA-Day31】深入解析冒泡、选择和插入排序在数组排序中的应用

深入解析冒泡、选择和插入排序在数组排序中的应用 深入解析冒泡、选择和插入排序在数组排序中的应用摘要引言冒泡排序&#xff1a;基本原理和应用场景冒泡排序算法的工作原理什么情况下选择冒泡排序冒泡排序的时间复杂度和空间复杂度 选择排序&#xff1a;精确排序策略和最佳实…

chroma 向量库使用;查询、更新与插入

参考: https://docs.trychroma.com/usage-guide https://blog.csdn.net/weixin_46515328/article/details/131855650 chroma 支持保存文档、向量&#xff0c;和向量的ids值 ##安装 pip install chromadb1、使用 import chromadb##这句可以数据库默认时刻保存&#xff0c;启动…

岭回归与LASSO回归:解析两大经典线性回归方法

文章目录 &#x1f34b;引言&#x1f34b;岭回归&#xff08;Ridge Regression&#xff09;&#x1f34b;实战---岭回归&#x1f34b;LASSO回归&#xff08;LASSO Regression&#xff09;&#x1f34b;实战---LASSO回归&#x1f34b;岭回归和LASSO哪个更容易是直线&#x1f34b…

Cannot read properties of null bug解决方法

项目场景&#xff1a; vue3element plusts。 问题描述 本地运行没有任何错误&#xff0c;在生产环境中&#xff0c;当点击按钮&#xff0c;展示el-dialog时第一次正常&#xff0c;关闭时报错 原因分析&#xff1a; 定位到el-dialog组件&#xff0c;最初认为是dialog中table依…

IMAGEBIND: One Embedding Space To Bind Them All论文笔记

论文https://arxiv.org/pdf/2305.05665.pdf代码https://github.com/facebookresearch/ImageBind 1. Motivation 像CLIP这一类的方法只能实现Text-Image这两个模态的 Embedding 对齐&#xff0c;本文提出的ImageBind能够实现六个模态&#xff08;images, text, audio, depth, t…

进阶指针(一)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 进阶指针&#xff08;一&#xff09; 0.回顾初阶指针1.字符指针1.1 相关面试题 2.数组指针3.指针数组3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4.数组传参和指针传参4.…

linux下解决tomcat错误问题

错误一&#xff1a; Linux下Tomcat启动报错&#xff1a;Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 原因&#xff1a;可能是Linux环境变了&#xff0c;需要在catalina.sh文件里指定JDK路径 解决方式&#xff1a; 在/bin/catalina.sh配置文件中加…

基于springboot+vue的爱心助农网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Linux离线安装telnet

TELNET rmp地址 链接: https://pan.baidu.com/s/1Yl3zt1p3zjp2fYTwByf7dQ?pwdgdcg 提取码: gdcg 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 命令 rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm rpm -ivh telnet-…

autoware.ai docker安装

1.进行docker安装 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88sudo add-apt-reposi…

Unity实战(11):项目非启动状态下使用代码批量替换材质

目录 前言 配置环境 一、场景准备 二、代码演示 三、效果呈现 四、关于Resources.Load()的说明 前言 本文内容为unity在编辑状态&#xff08;非启动状态&#xff09;下使用代码批量替换材质&#xff0c;该方法也适用于其他在编辑状态下对物体的操作需求。 配置环境 win1…

Mysql003:用户管理

前言&#xff1a;本章节讲解的是mysql中的用户管理&#xff0c;包括&#xff08;管理数据用户&#xff09;、&#xff08;控制数据库的访问权限&#xff09;。 目录 1. 查询用户 2. 创建用户 3. 修改用户密码 4. 删除用户 5. 权限控制 1. 查询用户 在mysql数据库中&#xff0…

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间?

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间&#xff1f; 1、在手机上找到「设置」并点击打开&#xff1b; 2、在设置内找到「健康使用手机」并点击进入&#xff1b; 3、开启健康使用手机后&#xff0c;选择孩子使用&#xff1b; 4、在健康使用手机内&#xff0c…

已解决 Java Error: Exception in thread ‘main‘ java.lang.ClassNotFoundException

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

Godot配置C#语言编写脚本(使用VSCode作为外部编辑器)

文章目录 Godot部分查看VSCode的所在位置配置外部编辑器 配置VSCode编写脚本中文注释 其他文章字符编码 Godot部分 打开编辑器-编辑器设置&#xff1b; 查看VSCode的所在位置 右键单击你的VScode快捷方式&#xff0c;选择属性。 这里的目标就是你的VSCode所在的位置。 配…