jenkins 中pipeline相关语法学习

news2025/8/16 16:59:09

jenkins基础

Jenkins介绍

持续集成,就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础。
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也意味着每天可能会发生多次集成。
每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
目的:
持续、自动地构建/测试软件项目。
监控软件开放流程,快速问题定位及处理,提示开放效率。

Jenkins的工作原理: 即是将源代码从gitlab上拷贝一份到本地,然后根据设置的脚本进行构建,一般则都是采用dockerfile的形式,进行本地打包构建测试.

Jenkins pipeline 总体介绍

pipeline是一套运行在jenkins上的工作流框架,将原本独立运行单个或者多个节点的任务链接起来,实现单个任务难以完成的复杂流程与可视化.
pipeline 是jenkins2.X 最核心的特性, 帮助jenkins 实现从CI 到 CD与 DevOps的转变
pipeline 提供一组可扩展的工具, 通过 pipeline domain specific language syntax 可以到达pipeline as code 目的

pipiline as code : jenkinsfile 存储在项目的 源代码库

jenkins pipeline 入门
pipeline 支持两种语法

-  Declarative 声明式

-  Scripted pipeline 脚本式
pipline的五大特性:
在这里插入图片描述

pipeline基本结构

pipeline{
    agent any 
    stages{
        stage('build'){
            steps{
                echo 'hello steps'
            }
        }
    }
}

pipeline语法

其中最顶层的pipeline是必须要有的,
agent
用来指定pipeline的执行节点,一般放在顶层,支持几个不同参数:

  1. any: 表示可以在任意节点或者代理上执行这个pipeline
  2. none:表示表示不会为整个pipeline指定执行节点,需要每部分的stage指定
  3. label: 在标签指定的可用代理上执行 pipeline 或 stage,比如 agent {label “label”} 表示流水线或者阶段可以运行在任何一个具有 label 标签的代理节点上。
  4. 自定义工作空间:代理节点的标签新增了一个特性,允许为流水线或阶段指定一个自定义的工作空间,用 customWorkspace 指令来指定。和 label 功能类似。
    POST
    post部分是用来指定pipeline或者stage执行完毕后执行的一些操作,比如发送邮件、环境清理等。post 部分在 Jenkins 代码中是可选的,可以方到顶层agent也可以在stage中,
  5. always : 当pipeline执行完成后,必须要执行的动作,不管成功还是还失败
  6. success: 当 pipeline 执行完毕后且构建结果为成功状态时才会执行的操作。
  7. failure: 当 pipeline 执行完毕后且构建结果为失败时执行的操作,比如发送错误日志给相关人员
  8. changed: 当 pipeline 执行完毕后且构建状态和之前不一致时执行的操作。
  9. aborted: 当手动被停止
  10. unstable: 构建不稳定时执行的操作
pipeline {
    agent any
    stages {
        stage ("Build") {
            bat "dir"
        }
    }
    post {
        always {
            script {
                echo "post always "
            }
        } 
        success{
            script {
                echo "post success"
            }
        } 
        failure{
            script {
                echo "post failure"
            }
        }
    }
}

stages/stage/steps
stages: 是单个阶段的操作封住到stages中,stages中可以有多个stage
stage : 一个单独的阶段,实际上所有实际工作都将包含在一个或多个 stage 指令中。stage{…} 里面有一个强制的字符串参数,用来描述这个 stage 的作用,这个字符串参数是不支持变量的,只能你自己取名一个描述字段。
steps: 一个stage下至少有一个steps,可以在 steps 下写调用一个或者几个方法,也就是两三行代码。
注意:
在声明式中,有且仅有一个stages,
一个 stage{…} 必须有且只有一个 steps{…}, 或者 parallel{…} 或者 stages {…},多层嵌套只支持在最后一个 stage{…} 里面。
在声明式语法中只支持 steps,不支持在 steps {…} 里面嵌套写 step{…}。

pipeline {
    agent any 
    stages {
        stage('build') {
            steps {echo 'build'}
        }
        stage ('test'){
            steps {echo "${JAVA_HOME}"
            }
        }
    }
}

environment
作用就是通过键值对的方式,定义整个脚本使用的环境变量

pipeline {
    agent any
    environment {
        test = true
    } 
    stages {
        stage('build') {
            steps {
                script{
                    if(test == true) {
                    // 一些特定的操作
                        echo 'sucess'
                    }
                }
            }
        }
    }
}

options
options指令在pipeline中是可选的,用来指定一些属性和值,这些预定义的的选项可以应用到整个脚本中,

  1. retry: 表示Jenkins中的job执行失败后继续进行几次尝试,可以放到顶层pipeline中也可以放到stage中,
    options {
     retry(3)
    }
    
  2. buildDiscarder: 保留指定数量的流水线的执行,包含控制台的输出. 会在工作空间中保存制品和执行日志,如果执行次数太多的会话,这些内容会占用很多的存储空间,使用该参数后会只保留最近指定次数的构建结果,自动清理之前的内容。
  3. checkoutToSubdirectory 作用:指定检出到工作空间的子目录中。Jenkins 从代码管理库中拉取代码时默认检出到工作空间的根目录,如果想修改的话可以用此参数。
  4. disableConcurrentBuilds: 用来阻止脚本同时执行多个
  5. timeout: 为流水线设置一个超时时间,
    pipeline {
    agent any
    options {
        timeout(time:10, unit:'HOURS')
    }
    stages {
        stage('test') {
            steps {
                // 步骤
            }
        }
    }
}
  1. skipDefaultCheckout 作用:删除隐式的 checkout scm 语句,因此可以从 Jenkinsfile 定义的流水线中跳过自动的源码检出功能

parameters

parameters用来在pipeline中实现参数化构建,也就是根据用户指定的不同的操作,pipeline支持很多种类型的参数,有字符串参数,布尔选择参数,下拉多选参数等。

  1. 字符串参数 开始构建前需要用户输入字符串,比如 ip 或者 url。
pipeline {
    agent any
    parameters {
        string(name: 'DEPLOY_ENV', defaultValue: 'release', description: '')
    }
}
  1. 布尔值参数
    作用:定义一个布尔类型参数,在执行构建前用户在 Jenkins UI 上选择是还是否,选择是执行这部分代码,否则会跳过这部分。比如:执行完毕后环境的清理工作。
    pipeline {
    agent any
    parameters {
    booleanParam(name: ‘DEBUG_BUILD’,defaultValue: true, description: ‘’)
    }
    }

  2. 文本参数
    支持写很多行的字符串:
    pipeline {
    agent any
    parameters {
    text {name:‘Welcome_text’, defaultValue: ‘One\nTwo\nThree\n’,description: ‘’ }
    }
    }

  3. 选择参数
    作用:支持用户从多个选择项中选择一个值用来表示这个变量的值。比如:选择服务器类型、选择版本号等
    pipeline {
    agent any
    parameters {
    choice (name: ‘ENV_TYPE’, choices: [‘test’, ‘dev’, ‘product’], description:‘testmeans test env,….’)
    }
    }
    文件参数
    参数化构建 UI 上提供一个文件路径的输入框,Jenkins 会自动去根据用户提供的网络路径去查找并下载
    pipeline {
    agent any
    parameters {
    name: ‘FILE’, description: ‘Some file to upload’)
    }
    }
    密码参数
    密码(password)参数就是在 Jenkins 参数化构建 UI 提供一个暗文密码输入框。 需要登录到服务器做自动化操作,为了安全起见,
    pipeline {
    agent any
    parameters {
    password(name: ‘PASSWORD’, defaultValue: ‘test’, description: ‘A secret password’)
    }
    }

tool

定义自动安装和放置工具的路径。
对于 agent none,这个关键字将被忽略,因为没有任何节点或者代理可以用来安装工具。此指令主要是为了三大工具(jdk、gradle、maven)提供环境变量服务。一旦配置完成,tools 指令可以让我们指定的工具需要在我们已经选择的代理节点上自动安装在配置路径下。
pipeline {
agent any
tools {
jdk ‘jdk1.8’
}
stages {
stage(‘test’) {
steps {
sh ‘java -version’
}
}
}
}
左侧的 jdk 是流水线模型中定义的特殊字符串,目前,在声明式流水线中可以指定的合法的工具类型如下:ant、git、gradle、jdk、maven、jgit 等。

右侧的 jdk8 映射的是全局工具配置中的名称字段(管理 Jenkins → Global ToolConfiguration 中预配置)。例如,上面代码我写了 jdk1.8,那么必须在 Jenkins 管理–>全局工具配置中有别名为 jdk1.8 配置。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXOjqAUI-1668744102908)(./images/2022-11-16-18-43-27.png)]

一旦这样设置后,jdk 工具会被自动安装到指定的路径下,然后我们可以在流水线步骤中简单的使用 jdk1.8 字符串替代 JAVA_HOME 路径,Jenkins 会把它映射到我们系统中安装的 JDK。
pipeline{
agent any
parameters {
string(name: ‘gradleTool’, defaultValue: ‘gradle3’, description: ‘gradle version’)
}
tools{
gradle “${params.gradleTool}”
}
}
说明:如果需要输入一个特定的版本来使用,这个 tools 指令可以使用一个参数的值。
注意:当前生命式语法有一个局限就是当这个流水线第一次运行时,Jenkins 不能识别出该构建需要一个参数,需要先手动构建一次。

when

when{…}是写在stage{}里面一条控制,允许pipeline根据给定的条件来决定是否执行某个阶段,when指令必须至少包含一个条件,也可以包含多个条件,这和子条件嵌套在一个allof条件中一样.

更复杂的条件结构可使用嵌套条件建:not,allOf 或 anyOf,嵌套条件可以嵌套到任意深度。

branch
当前正在构建的分支,与给出的分支模式匹配时执行,适用于多分支结构
when {branch ‘master’}
environment
当指定的环境变量与给定的值相同时执行。
when { environment name: ‘DEPLOY_TO’, value: ‘production’ }
expression
当给定的 Groovy 表达式返回 true 时执行。
when { expression { return params.DEBUG_BUILD } }
not
当嵌套条件为 false 时执行,必须包含一个条件。
when { not { branch ‘master’ } }
allOf
当所有嵌套条件都为真时执行,必须至少包含一个条件。
when {
allOf {
branch ‘master’;
environment name: ‘DEPLOY_TO’,
value: ‘production’
}
}

anyOf
当至少一个嵌套条件为真时执行,必须至少包含一个条件。
when { anyOf { branch ‘master’; branch ‘staging’ } }
buildingTag
如果 pipeline 所执行的暧昧被打了 tag 则执行。
when { buildingTag() }
测试代码:

pipeline{
    agent any 
    environment {
        quick_test = false 
    }
    <!-- 单个操作的阶段, -->
    stages {
            stage('Examplie build'){
                <!-- 单个构建阶段 -->
                steps {
                    <!-- 具体执行阶段,执行具体的方法 -->
                    script { 
                        <!--  -->
                        echo "hello world"
                    }
                }

            },
            stage('Example Deploy'){
                when {
                    expression {
                        <!-- 表示当给定的Groovy 表达式返回 true 时执行。 -->
                        return (quick_test == 'true')
                    }
                }
                steps {
                    <!-- 被执行 -->
                    echo "Deploy"
                }
            }
    },
}
script
作用:用来在声明式流水线中写非声明式代码的地方,允许你定义一定代码块/闭包用来囊括非声明式的语法,其实就是在 script 中写 Groovy 代码。比如 if...else 等语句。

tiggers
用来指定使用什么类型的触发器来自动启动流水线的构建,
注意: 这些触发器不适用与多分支的流水线,github组织类任务,

  1. cron: 按照指定的周期规律执行流水线,与crontab类似
triggers {
    cron ('0 0 0 * * ')
}
  1. upstream 由上游的任务构建完毕后才会触发本任务的执行,
triggers {
    upsteam threshold: 'UNSTABLE',upstreamProjects : 'jobA,jobB'
}
说明: upstreamProjects: 指定上游任务的名称,有多个任务时用逗号分隔. 
threshold: 指定上游的执行结果是什么值的时候进行触发,
    1,success: 
    2,unstable: 存在失误但不至于构建失败
    3,failuer: 构建失败.
  1. pollSCM: 轮询代码仓库,定期访问仓库代码是否有更新,有变化就执行,但 但是在一定的构建时间内,如果有多次代码提交,当构建失败时无法马上知道是哪一次的提交导致的,所以这个指令不是很常用, 所以一般用webhook,当有代码提交的时候主动通知到 Jenkins。

parallel

声明性管道中的阶段可能只有一个parallel部分,其中包含要并行运行的嵌套阶段的列表,需要注意的是一个阶段都必须有且只有一个 steps,stages,parallel,或matrix。,
这里是不可能进行嵌套的parallel或matrix块内,stage ,如果该指令,stage指令嵌套在一个parapllel 或matrix阻塞本身,然后,stage一个内指令,parallel或matrix 块可以使用的所有其他的功能stage,包括: agent tools,when等.

pipeline {
    agent any
    stages {
        stage('Non-Parallel Stage') {
            steps {
                echo 'This stage will be executed first.'
            }
        }
        stage('Parallel Stage') {
            when {
                branch 'master'
            }
            failFast true
            parallel {
                stage('Branch A') {
                    agent {
                        label "for-branch-a"
                    }
                    steps {
                        echo "On Branch A"
                    }
                }
                stage('Branch B') {
                    agent {
                        label "for-branch-b"
                    }
                    steps {
                        echo "On Branch B"
                    }
                }
                stage('Branch C') {
                    agent {
                        label "for-branch-c"
                    }
                    stages {
                        stage('Nested 1') {
                            steps {
                                echo "In stage Nested 1 within Branch C"
                            }
                        }
                        stage('Nested 2') {
                            steps {
                                echo "In stage Nested 2 within Branch C"
                            }
                        }
                    }
                }
            }
        }
    }
}

此外,可以在parallel阶段,对于他们中任何一个发生故障的情况下,将所有都进行终止,加入选项: failFast true 到stage 含有 parallel中,添加的另一个选项 failfast是在管道定义中添加一个选项: parallelsAlwaysFailFast()

pipeline {
    agent any
    options {
        parallelsAlwaysFailFast()
    }
    stages {
        stage('Non-Parallel Stage') {
            steps {
                echo 'This stage will be executed first.'
            }
        }
        stage('Parallel Stage') {
            when {
                branch 'master'
            }
            parallel {
                stage('Branch A') {
                    agent {
                        label "for-branch-a"
                    }
                    steps {
                        echo "On Branch A"
                    }
                }
                stage('Branch B') {
                    agent {
                        label "for-branch-b"
                    }
                    steps {
                        echo "On Branch B"
                    }
                }
                stage('Branch C') {
                    agent {
                        label "for-branch-c"
                    }
                    stages {
                        stage('Nested 1') {
                            steps {
                                echo "In stage Nested 1 within Branch C"
                            }
                        }
                        stage('Nested 2') {
                            steps {
                                echo "In stage Nested 2 within Branch C"
                            }
                        }
                    }
                }
            }
        }
    }
}

pipeline中获取shell命令的标准输出或者状态

  1. 获取标准输出
result = sh resturnStdout: true,script: "shell cmd"
result =result.trim()
//简单写法
result = sh(script: "<shell command>", returnStdout: true).trim()
  1. 获取执行状态
result = sh(script: "<shell command>", returnStatus: true).trim()

pipeline对git的操作

通过jenkins的pipeline方式从远程的git仓库上拉取脚本执行,需要的参数,拉取的分支,拉取的位置,以及代码保存的位置

<!-- 代码段 -->
git {
     branch: "master",
     credentialsID: "/root",
     url :'git地址',

}

pipeline内置基础

文件目录相关步骤

  • deleteDir: 删除当前目录,
  • dir 切换到目录,
  • fileExists :判断指定的文件是否存在, fileExists(‘/tmp/a.jar’)判断/tmp/a.jar文件是否存在,可以判断相对路径,结果是布尔型,
  • isUnix: 判断是否为unix系统,
  • pwd 确认当前目录,
  • writeFile 将内容写入指定文件中. 支持file,text,encoding
  • readFile 读取指定文件,以文本形式返回,参数: file, encodeing

可以在pipeline中定义相关函数,定义方式与Python定义方式类似.

参考链接:
https://www.cnblogs.com/ssgeek/p/12856067.html
https://www.cnblogs.com/juno3550/p/14693530.html#base

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

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

相关文章

Docker踩坑,又涨知识了

背景 新上线一个批处理功能&#xff0c;基于Docker发布的。上线之后出现一个问题&#xff0c;Docker批处理生成的文件目录&#xff0c;别的应用程序无法访问。 之前也在使用Docker&#xff0c;但并未涉及到文件共享的问题&#xff0c;还真没留意到。经过一系列排查&#xff0…

第二章 模型评估与选择(上)

2.1 经验误差与过拟合 通常我们把分类错误的样本数占样本总数的比例为”错误率”&#xff0c;精度1-错误率。模型的实际预测输出与样本的真实输出之间的差异称为“误差”&#xff0c;模型在训练集上的误差称为“训练误差”或“经验误差”,在新样本上的误差称为“泛化误差” 当…

uni-app框架

目录 什么是uniapp 为什么学uniapp uni-app目录结构 uniapp开发规范 pages.json页面的基本配置 pages页面配置 pages对象的属性 globalStyle全局配置 配置基本tabbar tabbar的基本属性 condition启动模式配置 具体属性 组件的基本使用 text文本组件 view组件 …

【历史上的今天】11 月 18 日:DNS 发明者出生;按键式电话问世;比尔·盖茨开始编程

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 11 月 18 日&#xff0c;在 1928 年&#xff0c;华特迪士尼&#xff08;Walt Disney&#xff09;和他终身的助手阿维尔克合作创造了后来闻名世界的“米老鼠”的…

MySQL (8)

MySQL (8) 前言 &#xff1a; 知识点回顾 &#xff1a; 上文我们已经了解到了我们的事务 , 知道了事务是将诺干个独立的操作打包成一个整体 &#xff0c; 如 1 1 此时想将这个结果写到纸上 &#xff0c;那么 1 1 计算 可以看做一个操作&#xff0c; 将答案 2 写 到纸上 也是…

酪氨酸激酶、自噬等抗肿瘤抑制剂

TPCA-1 TPCA-1 是一种有效&#xff0c;选择性的 IKK-2 抑制剂&#xff0c;IC50 值为 17.9 nM。TPCA-1 也是 STAT3 磷酸化、DNA 结合以及反式激活的有效抑制剂。 表皮生长因子受体 (EGFR) 是治疗 EGFR 突变型非小细胞肺癌 (NSCLC) 的有效靶点。然而&#xff0c;一些 EGFR 突变表…

独家,阿里技术人限产的MySQL高级笔记及面试宝典,简直开挂

又逢“金九银十”&#xff0c;年轻的毕业生们满怀希望与忐忑&#xff0c;去寻找、竞争一个工作机会。已经在职的开发同学&#xff0c;也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而&#xff0c;面试人群众多&#xff0c;技术市场却相对冷淡&#xff0c;…

【Linux】深刻理解进程概念、进程状态、进程常用指令和系统调用

文章目录1、什么是进程?1.1 PCB的概念1.2 程序加载到内存2、初识进程2.1 进程相关的指令2.2 进程相关的系统调用3、进程状态3.1 运行、阻塞和挂起状态3.2 具体的Linux进程状态3.3 僵尸进程3.4 孤儿进程1、什么是进程? 从程序说起&#xff0c;我们写好的程序在经过编译链接最…

【cmake】cmake应用:安装和打包

【cmake】cmake应用&#xff1a;安装和打包 在本系列前序的文章中已经介绍了CMake很多内容&#xff0c;在CMake应用&#xff1a;CMakeLists.txt完全指南一文中简略介绍了安装和打包&#xff0c;本文会更加深入地介绍CMake的安装和打包功能。【cmake】cmake应用&#xff1a;安装…

分享500道我在“金九银十”收集的Java架构面试题

前段时间&#xff0c;字节跳动官方就发布消息称在武汉扩招至5000人&#xff0c;放出了2000个岗位名额。可见&#xff0c;互联网大厂岗位需求仍然奇缺。 在已经过去的“金九银十”&#xff0c;我有许多朋友就已经成功的跳槽&#xff0c;有的还在家等候下一步的面试通知。我托朋…

【计算机扫盲】计算机的基础操作你知多少?

计算机的高级操作 控制面板 ​ 控制面板&#xff08;control panel&#xff09;是Windows图形用户界面的一部分&#xff0c;可通过开始菜单访问。它允许用户查看并操作基本的系统设置&#xff0c;比如添加/删除软件&#xff0c;控制用户帐户&#xff0c;更改辅助功能选项。 …

CAS号:60535-02-6,二肽Met-Trp

血管紧张素-1转换酶(ACE)非竞争性抑制剂IC₅₀9.8 μM。 编号: 154290中文名称: 二肽Met-Trp英文名: Met-TrpCAS号: 60535-02-6单字母: H2N-MW-OH三字母: H2N-Met-Trp-COOH氨基酸个数: 2分子式: C16H21N3O3S1平均分子量: 335.42精确分子量: 335.13等电点(PI): 6.11pH7.0时的净电…

服装连锁店管理系统 服装连锁店如何高效管理 服装连锁店管理怎么走捷径

服装连锁店管理繁杂&#xff0c;难以把控&#xff0c;好在有“捷径”可走。 开服装连锁店的老板&#xff0c;来看看这是不是你的“头痛”日常&#xff1a; 新品上市&#xff0c;加盟店全上了&#xff0c;但无法迅速判断出畅销品和滞销品&#xff0c;搜集数据速度慢&#xff0c;…

Coursera自动驾驶1.4——车辆建模

文章目录一、运动学建模&#xff08;二维&#xff09;1.坐标系转换2.两轮机器人运动学建模3.两轮自行车运动学建模&#xff08;1&#xff09;后轴参考点&#xff08;2&#xff09;前轴参考点&#xff08;3&#xff09;重心参考点二、基本动力学模型&#xff08;2D&#xff09;1…

中台和微服务有什么区别?

中台不就是微服务吗&#xff1f;这种说法实际上混淆了中台与微服务的定义&#xff0c;要说清楚这个问题&#xff0c;就要先了解&#xff0c;什么是中台&#xff1f;什么是微服务&#xff1f;中台和微服务之间有什么样的关系&#xff1f; 什么是中台 来自阿里官方的定义&#x…

【强化学习】TensorFlow2实现DQN(处理CartPole问题)

文章目录1. 情景介绍2. DQN&#xff08;Deep Q Network&#xff09;核心思路&#xff1a;3. DQN算法流程4. 代码实现以及注释5. 实验结果文章阅读预备知识&#xff1a;Q Learning算法的基本流程、TensorFlow2多层感知机的实现。1. 情景介绍 CartPole问题&#xff1a;黑色小车上…

【并发编程五】c++进程通信——信号量(semaphore)

【并发编程五】c进程通信——信号量&#xff08;semaphore&#xff09;一、概述二、信号量三、原理四、过程1、进程A过程2、进程B过程五、demo1、进程A2、进程B六、输出七、windows api介绍1. 创建信号量 CreateSemaphore()2. 打开信号量 OpenSemaphore()3. 等待 WaitForSingle…

一种基于IO口的模拟串口(LOG)实现方法

一、使用背景 当MCU的串口不够用时&#xff0c;可以通过IO模拟的方式将任意一个具有输出功能的管脚配置为串口输出&#xff0c;从而方便开发和调试。 二、实现原理 通过IO口模拟串口发送波形&#xff0c;配置对应的波特率等信息&#xff0c;然后映射printf函数&#xff0c;从…

基于粒子群优化算法的冷热电联供型综合能源系统运行优化(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

redis 支持的数据类型

Redis 数据库支持五种数据类型。 字符串&#xff08;string&#xff09; 哈希&#xff08;hash&#xff09; 列表&#xff08;list&#xff09; 集合&#xff08;set&#xff09; 有序集合&#xff08;sorted set&#xff09; 位图 ( Bitmaps ) 基数统计 ( HyperLogLogs ) 字…