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

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言:
redis部署集群常见的一般有三种模式:主从模式,Sentinel(哨兵模式),Redis Cluster(高可用Cluster集群),根据不同的需求可自定义选择部署方式。

Redis 主从模式(Replication)
优点:
数据备份:主节点的数据会复制到从节点,提供了数据冗余和一定程度的故障恢复能力。
读写分离:可以将读操作分散到从节点上执行,减轻主节点的压力,提高系统的读取性能。
扩容:通过添加从节点可扩展只读操作的能力。
缺点:
无自动故障转移:当主节点发生故障时,需要人工介入进行故障切换,并更新客户端指向新的主节点。
写性能瓶颈:所有写操作必须在主节点完成,因此主节点成为系统写入的瓶颈。
数据同步延迟:主从之间存在一定的数据同步延迟,可能导致短时间内从节点数据不一致。

Sentinel(哨兵)模式
优点:
高可用性:Sentinel 系统能够自动检测主节点是否下线,并自动完成故障转移,选举新的主节点。
监控与通知:Sentinel 可以持续监控Redis服务器的状态并发送通知。
配置中心:客户端可以通过连接Sentinel来获取当前主节点的信息,无需硬编码主节点地址。
缺点:
复杂性增加:相较于主从模式,增加了Sentinel集群的部署、管理和维护成本。
网络问题敏感:由于依赖于Sentinel之间的通信,网络问题可能会影响故障转移的正确性和效率。
资源消耗:每个Sentinel实例都需要占用一定的系统资源。

Redis Cluster(集群模式)
优点:
分布式存储:数据分布在多个节点上,支持水平扩展,提供更大的存储容量和更高的吞吐量。
自动分片:通过哈希槽分区实现数据的自动分片和负载均衡。
自动故障转移:支持节点间自动故障转移和数据迁移,提高了整个系统的可用性。
缺点:
数据迁移开销:在添加或删除节点时,可能会触发大规模的数据迁移,影响集群性能。
客户端兼容性要求:部分操作如跨slot键操作、批量操作等,在Cluster模式下受到限制,客户端需支持Cluster特性才能正常使用。
更复杂的运维:相对于单机和主从模式,集群模式对运维人员的技术要求更高,且集群配置相对复杂。

主从模式适合简单场景下的数据备份和读写分离需求,但不适合需要自动故障转移和高度扩展的应用。
哨兵模式为了解决主从模式中自动故障转移的问题而设计,适用于对高可用性有较高要求的场景。
集群模式则针对大规模数据处理和高并发场景,提供了良好的水平扩展能力和自动化管理功能。

演示版本: 此教程不记录redis的安装过程
系统:anolis8.4虚拟机(阿里的龙蜥系统,可以看成相当于centos8系统)
redis:7.0.14

开始部署: 以下演示都在同一台机器,实际的生产环境还是建议配置到多台机器中
------------------------------我是昏割线------------------------------主从模式:
可以部署最简单的一主一从,也可以部署一主多从,下面以一主一从为例,主端口6379,从端口6380。
准备好一个安装好的redis,因为我是安装好redis后,只拷贝了需要的目录与文件,所以只有bin和etc两个目录,同时创建好存放数据的文件夹,以及日志文件夹,日志看自己需求需不需要配置,etc下就是redis的配置文件。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

配置主节点redis_6379.conf配置文件:
支持后台运行:

daemonize yes

日志路径:看自己需求,也可以不配置

logfile "/home/l/kxm/serv/redis_PS/redis/log"

指定数据存放位置:默认配置是"./",集群模式下必须指定路径,不然容易丢失数据

dir /home/l/kxm/serv/redis_PS/redis/data_6379

配置从节点redis_6380.conf配置文件:
复制主配置文件:

cp redis_6379.conf /home/l/kxm/serv/redis_PS/redis/etc/redis_6380.conf

配置replicaof节点:从配置要比主配置多一个replicaof节点配置,用于绑定主节点。
replicaof 主节点ip 主节点redis端口,例:

replicaof localhost 6379

这里特别说明一下,因为我是做演示,主从都配置在同一台机器上,最开始ip写的是指定ip,比如192.168.xxx.xxx这种,这样行不通,从节点一直连不上主节点,后面发现写成localhost或者127.0.0.1是没问题的。

批量修改6379关键字:因为是复制的6379的配置,把从节点配置中所有6379都改成6380

vim redis_6380.conf
:%s/6379/6380/g

到这里配置完成,启动两个redis:我的目录比较长,其实就是redis-server redis.conf命令

/home/l/kxm/serv/redis_PS/redis/bin/redis-server /home/l/kxm/serv/redis_PS/redis/etc/redis_6379.conf
/home/l/kxm/serv/redis_PS/redis/bin/redis-server /home/l/kxm/serv/redis_PS/redis/etc/redis_6380.conf

查询所有启动的redis:

ps -ef|grep redis

正常运行:
在这里插入图片描述
分别进入主从节点redis:

redis-cli -p 6379
redis-cli -p 6380

进入后验证:

info Replication

主节点:role:master,代表主节点;connected_slaves:1,已连接一个从节点;
在这里插入图片描述
从节点:role:slave,代表从节点;master_link_status:up,代表主节点可用,如果是down,代表不可用,可能原因:网络问题,主节点下线,replicaof配置错误,密码验证失败;
在这里插入图片描述
我这里没有配置密码,需要密码的自行配置requirepass选项:
在这里插入图片描述
在主节点中,添加数据:

set a 1

在从节点中,获取数据:能获取到值为1,那就部署完了。

get a

注意:
1.主节点可读可写,从节点只读。
2.如果把从节点的数据删除,重启从节点后,会自动复制主节点的数据。
3.如果把主节点数据删除,从节点数据同样会删除。
4.如果主节点挂掉,需要手动重新配置主节点。

------------------------------我是昏割线------------------------------哨兵模式:
哨兵模式也是遵从主从模式,但是哨兵模式最少必须要配置三个节点,也就是1主2从,可以先按照上面主从模式的方法先配置好三个节点并启动redis.
在这里插入图片描述
相比于主从模式,哨兵模式下多了个redis-sentinel
在这里插入图片描述
在这里插入图片描述

节点配置好后,现在开始配置哨兵
在etc配置目录下创建sentinel_26379.conf文件,这就是哨兵的配置文件,并在文件中填写以下配置:

# 端口
port 26379# 后台运行
daemonize yes# 进程文件:程序启动后会自动把进程文件写进run目录中
pidfile "/home/l/kxm/serv/redis_sentinel/redis/run/sentinel_26379.pid"# 日志文件
logfile "/home/l/kxm/serv/redis_sentinel/redis/log/sentinel_26379.log"# 数据目录
dir "/home/l/kxm/serv/redis_sentinel/redis/data_6379"# 如果设置了密码
# sentinel auth-pass mymaster <password># 客观下线的判断节点数:这里注意,如果是部署在同一台机器中,这里只能写指定ip或者127.0.0.1,不能写localhost
sentinel monitor mymaster 127.0.0.1 6379 2# 主观下线的等待时间
sentinel down-after-milliseconds mymaster 30000# 限制从节点向新主节点发起复制并发数
sentinel parallel-syncs mymaster 1# 故障转移超时时间
sentinel failover-timeout mymaster 180000

26379配置好后,复制出26380和26381,并把文件中26379关键字改成对应文件的关键字,到此哨兵配置完成。

分别启动哨兵:其实就是redis-sentinel sentinel.conf命令

/home/l/kxm/serv/redis_sentinel/redis/bin/redis-sentinel /home/l/kxm/serv/redis_sentinel/redis/etc/sentinel_26379.conf
/home/l/kxm/serv/redis_sentinel/redis/bin/redis-sentinel /home/l/kxm/serv/redis_sentinel/redis/etc/sentinel_26380.conf
/home/l/kxm/serv/redis_sentinel/redis/bin/redis-sentinel /home/l/kxm/serv/redis_sentinel/redis/etc/sentinel_26381.conf

验证:

ps -ef|grep redis

在这里插入图片描述

redis-cli -p 6379 info Replication

在这里插入图片描述

redis-cli -p 26379 sentinel master mymaster

在这里插入图片描述
成功启动后,配置文件会有改变:
在这里插入图片描述
注意:
1.主节点可读可写,从节点只读,这跟主从模式是一样的。
2.如果某个从节点挂掉,其他的主从结构依旧可正常运行,如果所有从节点挂掉,主节点依旧可正常运行,等从节点恢复后,会自动复制主节点数据。
3.如果主节点挂掉,哨兵会在从节点中自动选择一个作为主节点,如果之前的主节点恢复,之前的主节点会变成新的从节点,哨兵并不会恢复之前的主节点。
4.相比于主从模式,哨兵模式更智能,但是在实际的生产环境中,包括主从模式也一样,如果主节点挂掉,其实是有概率丢失数据的,虽然哨兵模式会自动更换节点,但这是有一个过程的,并不是一瞬间完成

------------------------------我是昏割线------------------------------高可用Cluster集群模式:
严格来说Cluster集群才是真正的集群,Cluster集群模式至少要部署两台机器才能叫做高可用,而且从节点不能与主节点在同一台机器,这里演示还是在一台机器上演示。
Cluster集群模式最少要配置6个节点,最少要三主三从。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置redis_6381.conf:
后台运行:

daemonize yes

日志:

logfile "/home/l/kxm/serv/redis_cluster/redis/log/redis-6381.log"

数据目录:

dir /home/l/kxm/serv/redis_cluster/redis/data_6381

启动集群模式:redis新版本中自带cluster-enabled集群配置,放开注释就行

cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 15000

注意,Cluster集群模式不需要像主从模式和哨兵模式那样配置replicaof,后面启动集群时会自己创建主从关系。

复制其他五个节点的配置:复制完成后,记得把这些配置中的6381关键字改成对应文件的关键字

cp redis_6381.conf redis_6382.conf
cp redis_6381.conf redis_6383.conf
cp redis_6381.conf redis_6384.conf
cp redis_6381.conf redis_6385.conf
cp redis_6381.conf redis_6386.conf

先启动redis:还是redis-server redis.conf命令

/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6381.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6382.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6383.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6384.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6385.conf
/home/l/kxm/serv/redis_cluster/redis/bin/redis-server /home/l/kxm/serv/redis_cluster/redis/etc/redis_6386.conf

创建集群:
此命令会根据ip地址的排序决定谁是主节点,谁是从节点,默认前面是主节点,后面是从节点,前面三个是主节点,后面三个是从节点。
注意–cluster-replicas 1配置,意思是每个主节点有多少个从节点,三主三从就是1,每个主节点有一个从节点;三主六从就是2,每个主节点有两个从节点;三主九从就是3,每个主节点有三个从节点,以此类推。

redis-cli --cluster create localhost:6381 localhost:6382 localhost:6383 localhost:6384 localhost:6385 localhost:6386 --cluster-replicas 1

出现以下提示是提示我们主从在同一台机器上,这里演示就输入yes跳过:
在这里插入图片描述

创建完成后,会显示以下界面,写的很清楚了,有三主三从:
在这里插入图片描述
验证:

ps -ef|grep redis

在这里插入图片描述
查看主从关系;

redis-cli --cluster check localhost:6381

在这里插入图片描述
普通方式登录:没有转发机制,假设在6381上获取6382的key,会报错

redis-cli -h localhost -p 6381

集群方式登录:推荐这种方式,默认开启转发机制,假设在6381上获取6382的key,会自动转发,然后成功获取

redis-cli -h localhost -p 6381 -c

获取集群关系:

redis-cli -h localhost -p 6381 -c cluster slots | xargs -n8 | awk '{print $3":"$4"->"$6":"$7}' | sort -nk2 -t ':'|uniq

在这里插入图片描述

到这里部署已完成,可以登录某个主节点后测试:

set a1 1
set a2 2
set a3 3
set a4 4

在这里插入图片描述
在这里插入图片描述

你会发现,每写入一个数据后,会分配到别的主节点上去,说明集群正常运行,数据分布在多个节点上,支持水平扩展存储方式,实现了真正意义上的集群。

注意:
1.不管哪个从节点挂掉,对整体集群运行没有影响,从节点恢复后,会自动复制主节点数据
2.不管哪个主节点挂掉,对整体集群运行没有影响,从节点会变成新的主节点,主节点恢复后,会变成新的从节点,但这是有一个过程的,并不是一瞬间完成
3.如果某个主节点和它的从节点同时挂掉,那么整个集群将变得不可用,这就是前面为什么说最少配置两台机器,而且主节点和从节点不能在同一台机器的原因。
4.相比于主从模式和哨兵模式,Cluster集群模式可以说是实现了真正意义上的集群,不仅仅支持自动故障转移,也支持自动分片和分布式存储。但是,redis集群是没有绝对数据安全的,只能说相比于主从和哨兵模式,Cluster集群模式大大提高了数据的安全性,减少了数据丢失的可能性,但并不代表绝对不会丢失数据,在某些特定情况,也是会存在数据不统一和丢失数据的情况,只是说这种几率很小。

相关文章:

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言&#xff1a; redis部署集群常见的一般有三种模式&#xff1a;主从模式&#xff0c;Sentinel&#xff08;哨兵模式&#xff09;&#xff0c;Redis Cluster&#xff08;高可用Cluster集群&#xff09;&#xff0c;根据不同的需求可自定义选择部署方式。 Redis 主从模式&…...

072:vue+mapbox 点击某图层feature,高亮这部分

第072个 点击查看专栏目录 本示例是介绍如何在vue+mapbox中点击某图层feature,高亮这部分。思路是通过点击,获取点击部分的feature信息,生成一个新的source和layer,如果这个图层不为空,则清除之,相当于点击了别的地方,原有的高亮会删除掉,在别的地方高亮。 直接复制下…...

2024年最新安全且稳定的大数据传输方式

随着大数据时代的兴起&#xff0c;数据传输的速度和效率已经成为企业竞争的关键因素。到了2024年&#xff0c;大数据传输领域迎来了新的趋势和挑战&#xff0c;同时也涌现出了一系列创新的解决方案。本文将深入探讨这些新趋势和解决方案&#xff0c;意在帮助企业更好地迎接大数…...

Docker 数据卷容器

docker在容器中管理数据主要有两种方式&#xff1a; 数据卷&#xff08;Volumes&#xff09;挂载主机目录&#xff08;Bind mounts&#xff09; 而每个容器的数据都是独立的&#xff0c;数据跟随着容器的生命周期。如mysql容器&#xff0c;如果容器被删除了所有的数据都会丢失…...

深度学习记录--梯度检验

数值逼近 为了对梯度进行检验&#xff0c;需要计算近似误差值来接近梯度 对于单边误差和双边误差公式&#xff0c;其中双边误差与真实梯度相差更小&#xff0c;故一般采用双边误差公式 双边误差 公式&#xff1a; 梯度检验(gradient checking) 对于成本函数&#xff0c;求出…...

ERP进出库+办公用品管理系统

系统架构 简介系统架构部分页面结构图UML逻辑图办公用品入出库 简介 本系统适用于ERP企业公司职员关于系统化的申请相关办公用品&#xff0c;提高整体系统整合行&#xff0c;加大上下级之间的联系&#xff0c;规避因人员过多&#xff0c;而浪费人力在简单重复的工作中&#xf…...

Redis 笔记一

概览 1.Redis核心数据存储结构 2.Redis底层String编码int&embstr&raw 3.Redis底层压缩列表&跳表&哈希表 4.Redis底层Zset实现压缩列表和跳表如何选择 5.基于Redis实现微博&抢红包&12306核心业务 辅助学习&#xff1a;Redis 教程 | 菜鸟教程 1.Redis为什…...

学习记录687@spring data jpa 动态传递list参数并判断list是否为空

实际应用中需要在spring data jpa中使用原生sql&#xff0c;传递的参数是list&#xff0c;要根据list判断是否为空来判断是否要使用这个参数。 尝试了很多方法&#xff0c;比如size、length、is null、!null等等&#xff0c;都要报错&#xff0c;比如could not extract Result…...

寒假刷题第五天

PTA甲级 1022 Digital Library 大模拟 #include<iostream> #include<unordered_map> #include<unordered_set> #include<vector> #include<set>using namespace std;unordered_map<string , set<int>>ti , au , key , pub , year…...

Leetcode454四数相加Ⅱ(java实现)

今天&#xff0c;我们分享的题目是Leetcode454四数相加Ⅱ&#xff0c;我们先来看题目&#xff1a; 首先可以从题意中大体得知&#xff0c;也是从某个集合中找有没有符合条件的元素。遇见这种类型的题目我们可以考虑用哈希表&#xff0c;本题我们选取的是map集合&#xff0c;因…...

mysql 容器化安装(docker)离线和在线

前言&#xff1a;在部署hive或airflow 升级过程中&#xff0c;总需要一个对应的数据库存储元数据&#xff0c;一个轻量级的mysql容器刚刚好。轻量、可快速移植、具有隔离性。 文章目录 1、查看机器版本2、安装 docker3、启动docker 服务4、docker 常用命令docker5、拉取mysql …...

2. FPGA的电路结构概述

文章目录 1. 引言2. FPGA的一般结构2.1 概要2.2 FPGA三部分构成间的关系&#xff1a; 3. 小结 1. 引言 结构决定原理。原理未必决定结构。理解FPGA结构&#xff0c;进而能阐明其工作原理很有必要。FPGA产品的风云变换&#xff0c;其基本结构保持相对不变。 2. FPGA的一般结构…...

【Qt】Qt配置

需要云服务器等云产品来学习Linux的同学可以移步/-->腾讯云<--/-->阿里云<--/-->华为云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、Qt SDK下载 二、配置环境变量 三、新建工程(QWidget) 四、QWidg…...

查看Linux系统内存、CPU、磁盘使用率和详细信息

一、查看内存占用 1、free # free -m 以MB为单位显示内存使用情况 [rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 11852 1250 8668 410 1934 9873 Swap: 601…...

HttpServletRequest getServerPort()、getLocalPort() 、getRemotePort() 区别

getRemotePort() 、getServerPort()、getLocalPort() request.getServerPort()、request.getLocalPort() 和 request.getRemotePort() 这三个方法都是获取与HTTP请求相关的端口信息的 客户端(如浏览器)通过某个随机分配的网络连接端口(7070) 向服务器发送HTTP请求( http://exam…...

NVIDIA jetson编译opencv 源码 python版本

安装 jetson-stats 查看GPU的利用率 sudo apt-get install python3-pip sudo -H pip3 install jetson-stats 运行 jtop 进行查看 opencv 编译python版本 编译命令 cmake -D CMAKE_INSTALL_PREFIX/usr/local/opencv-4.6.0 -D CMAKE_BUILD_TYPERELEASE -D WITH_OPENGLON -D …...

TCP的三次握手,四次挥手

三次握手 第一次握手&#xff1a;客户端发送SYN报文&#xff0c;井发送seq为x序列号给服务端&#xff0c;等待服务端的确认第二次握手&#xff1a;服务端发送SYNACK报文&#xff0c;并发送seq为Y的序列号&#xff0c;在确认序列号为x1第三次握手&#xff1a;客户端发送ACK报文&…...

ElasticSearch高阶使用

目录 一、match_all 二、 text和keyword的区别 三、match、term的区别 四、exists query 五、 ids query 六、range query范围查询 七、prefix query前缀查询 八、 wildcard query通配符查询 九、 fuzzy query模糊查询 十、match query匹配查询 十一、multi_match q…...

美易官方:盘前:道指期货跌0.4% “恐怖数据”将发布

盘前&#xff1a;道指期货跌0.4% “恐怖数据”将发布 在今日的盘前交易中&#xff0c;道琼斯工业平均指数期货小幅下跌0.4%&#xff0c;市场正在等待即将发布的“恐怖数据”——美国零售销售数据。这一数据被视为衡量美国经济健康状况的重要指标&#xff0c;因此备受关注。 由于…...

appium之联动pycharm

前置条件&#xff1a; 1.java环境安装好了 2.android-sdk安装好&#xff08;uiautomatorviewer 也可以把这个启动起来&#xff09; 3.appium安装好 4.adb devices查看下设备是否连接 pycharm入门代码--固定写法 from appium import webdriver# 定义字典变量 desired_caps …...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...