redis5.0集群搭建(两台服务器)

news/2024/5/2 17:37:18/文章来源:https://blog.csdn.net/craftsman2020/article/details/128130348

文章目录

      • 1. 前言
      • 2. 配置两台机器内网互联
      • 3. redis安装
      • 4. redis集群5.0之前和5.0之后版本的区别
        • 4.1 redis5.0之前的版本创建集群
        • 4.2 redis5.0之后的版本创建集群
        • 4.3 redis5.0之前的版本需要依赖ruby环境
      • 5. redis5.0集群搭建
        • 5.1 创建redis-cluster目录
        • 5.2 将之前的redis.conf拷贝至8001目录
        • 5.3 修改redis.conf
        • 5.4 redis.conf常用配置说明
        • 5.5 拷贝redis.conf到各个节点并修改端口
        • 5.6 分别启动6个redis实例
        • 5.7 创建集群
        • 5.8 验证集群
        • 5.9 查看集群信息
        • 5.10 查看集群节点
        • 5.11 关闭集群
      • 6. 相关问题
        • 6.1 搭建Redis集群遇到的问题:Waiting for the cluster to join......
        • 6.2 [ERR] Node 192.168.2.180:8001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
        • 6.3 Could not connect to Redis at 192.168.3.23:8004: Connection timed out
        • 6.4 Could not connect to Redis at 192.168.2.180:8001: Connection refused
      • 7. redis-cli常用命令参数
      • 8. 相关文章

1. 前言

目的:redis集群搭建
redis版本:redis5.0.8
两台机器:华为云低配Linux机器
用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master、3 salve 环境。
两台虚拟机都是Huawei Cloud EulerOS 2.0 ,一台 EulerOS (IP:192.168.2.180),一台 EulerOS (IP:192.168.3.23) 。

2. 配置两台机器内网互联

华为云两台机器内网互联
https://blog.csdn.net/craftsman2020/article/details/128127525

3. redis安装

Linux安装部署Redis
https://blog.csdn.net/craftsman2020/article/details/122851974

4. redis集群5.0之前和5.0之后版本的区别

4.1 redis5.0之前的版本创建集群

redis5.0之前使用redis-trib.rb作为创建集群的命令,基于ruby语言实现,依赖于ruby环境

  • 创建集群指令
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6378 127.0.0.1:6377 127.0.0.1:6376 127.0.0.1:6375 127.0.0.1:6374

4.2 redis5.0之后的版本创建集群

redis5.0之后使用redis-cli作为创建集群的命令,基于c语言实现,因为redis本身是基于c实现的,所以5.0之后的集群搭建不依赖其他环境,相比于5.0之前的版本,搭建简易了许多。

  • 创建集群指令
redis-cli --cluster create  127.0.0.1:6379 127.0.0.1:6378 127.0.0.1:6377 127.0.0.1:6376 127.0.0.1:6375 127.0.0.1:6374 --cluster-replicas 1
  • 在5.0之后的版本中无法再使用之前版本中的指令创建集群
问题描述:WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead

redis

4.3 redis5.0之前的版本需要依赖ruby环境

若使用docker搭建集群,此处较为简单
apt install ruby -y
若非docker搭建的需要升级ruby版本,redis需要ruby版本在2.3以上,yum安装的为2.0版本
#安装依赖
yum install -y ruby ruby-devel rubygems rpm-build
#安装rvm升级ruby
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
#安装ruby2.3以上版本
rvm install 2.3.4  
#安装redis
gem install redis

5. redis5.0集群搭建

redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,三主三从,搭建集群的步骤如下:

5.1 创建redis-cluster目录

分别在两台服务器下的redis安装目录下(/usr/local/redis/)创建redis-cluster目录

cd  /usr/local/redis/
mkdir  redis-cluster

在redis-cluster下分别创建8001,8002,8003 // 8004,8005,8006目录

# A机器创建目录
cd /usr/local/redis/redis-cluster
mkdir 8001 8002 8003 
# 同理,切到B机器创建目录
mkdir 8004 8005 8006

5.2 将之前的redis.conf拷贝至8001目录

cp /usr/local/redis/redis.conf  /usr/local/redis/redis-cluster/8001/

5.3 修改redis.conf

1)daemonize yes
2)port 8001(分别对每个机器的端口号进行设置)
3)dir /usr/local/redis/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
4)cluster-enabled yes(启动集群模式)
5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
6)cluster-node-timeout 5000
7) bind 127.0.0.1(去掉bind绑定访问ip信息, 注释掉,或改为0.0.0.0也可)
8) protected-mode no (关闭保护模式)
9)appendonly yes
如果要设置密码需要增加如下配置:
10)requirepass xxx (设置redis访问密码)
11)masterauth xxx (设置集群节点间访问密码,跟上面一致)

5.4 redis.conf常用配置说明

配置项说明

  • daemonize yes: 开启Redis的守护进程,redis服务在后台运行

  • port 8001: redis端口号,每个配置文件设置自己的端口号;本文档分别配置为 8001、8002 … 8006;

  • dir /usr/local/redis-cluster/8001/:设定数据文件存放位置,必须指定不同目 录位置,否则会丢失数据;

  • cluster-enalbed yes: 启动集群模式;默认是被注释掉的,取消注释;

  • cluster-config-file nodes-8001.conf: 集群节点信息文件。
    默认为 nodes-6379.conf,将6379修改为本节点端口号即可。
    注意 :尽管有此选项的名称,但这不是用户创建、也不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够在启动时重新读取它。该文件列出了群集中其他节点,它们的状态,持久变量等等。由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。

  • cluster-node-timeout 5000: 单位:毫秒; Redis群集节点可以不可用的最长时 间,而不会将其视为失败。如果主节点超过指定的时间不可达,它将由其从属设备进行 故障切换。并且每个无法在指定时间内到达大多数主节点的节点将停止接受查询。

  • bind 127.0.0.1 192.168.11.15:
    127.0.0.1表示当前主机可通过127.0.0.1和 localhost访问本机节点;
    192.168.11.15是当前主机IP,能够让其它服务器节点访问,否则无法创建集群;
    如果bind为0.0.0.0 或者注释掉bind,表示所有机器都可以通过当前主机IP访问;

  • protected-mode no:redis3.2版本后新增protected-mode配置,默认是yes,即 开启;no:外部网络可直接访问;yes:需配置bind ip或者设置访问密码;

  • appendonly yes: 开启AOF持久化(Redis能在发生服务器电源故障或操作系统仍 然正常运行但Redis进程莫名挂掉的情况下,只丢失1秒的数据);

:如要设置密码,则需添加如下两个配置项

  • requirepass XXX: 设置Redis访问密码;
  • masterauth XXX: 设置集群节点间访问密码,与requirepass中一致。

5.5 拷贝redis.conf到各个节点并修改端口

将修改好的8001的配置文件分别拷贝至8002-8006,修改响应的端口,文件名

cp /usr/local/redis/redis-cluster/8001/redis.conf /usr/local/redis/redis-cluster/8002/
cp  /usr/local/redis/redis-cluster/8001/redis.conf /musi/software/redis-cluster/8003/
scp /usr/local/redis/redis-cluster/8001/redis.conf root@192.168.1.22:/usr/local/redis/redis-cluster/8004/
scp  /usr/local/redis/redis-cluster/8001/redis.conf root@192.168.1.22:/usr/local/redis/redis-cluster/8005/
scp  /usr/local/redis/redis-cluster/8001/redis.conf root@192.168.1.22:/usr/local/redis/redis-cluster/8006/

新拷贝的五个文件仅修改配置项:port、dir、cluster-config-file 即可

5.6 分别启动6个redis实例

redis-server /usr/local/redis/redis-cluster/8001/redis.conf
redis-server /usr/local/redis/redis-cluster/8002/redis.conf
redis-server /usr/local/redis/redis-cluster/8003/redis.conf
redis-server /usr/local/redis/redis-cluster/8004/redis.conf
redis-server /usr/local/redis/redis-cluster/8005/redis.conf
redis-server /usr/local/redis/redis-cluster/8006/redis.conf

5.7 创建集群

redis-cli -a 123456--cluster create --cluster-replicas 1 192.168.2.180:8001 192.168.2.180:8002 192.168.2.180:8003 192.168.3.23:8004 192.168.3.23:8005 192.168.3.23:8006

5.8 验证集群

连接A机器任意一个节点

redis-cli -a 123456 -c -h 192.168.2.180 -p 8001  -a 123456

redis集群去B机器任意一个节点取值

redis-cli -a xxx -c -h 192.168.3.23 -p 8005 -a 123456

redis集群

5.9 查看集群信息

cluster info

  • cluster_known_nodes:6 # 六个节点
  • cluster_size:3 # 集群的大小为3,主从算一个

5.10 查看集群节点

cluster node

5.11 关闭集群

  • 逐个进行关闭,使用命令:
redis-cli -a 123456 -c -h 192.168.2.180 -p 8001 shutdown
redis-cli -a 123456 -c -h 192.168.2.180 -p 8002 shutdown
redis-cli -a 123456 -c -h 192.168.2.180 -p 8003 shutdown
redis-cli -a 123456 -c -h 192.168.3.23 -p 8004 shutdown
redis-cli -a 123456 -c -h 192.168.3.23 -p 8005 shutdown
redis-cli -a 123456 -c -h 192.168.3.23 -p 8006 shutdown
  • 用脚本关闭
#!/bin/bash
#所有服务器节点的hostname
allnodes=('cnode-1' 'cnode-2' 'cnode-3')
#端口号开始
PORT=7001
#结束端口号
ENDPORT=7003
#密码,如果redis没配置密码可省略
PASSWROD=123456
while [ $((PORT < ENDPORT)) != "0" ]; dofor ip in ${allnodes[@]};do#判断某个端口是否已被占用,如果是,则执行关闭命令count=`ssh $ip lsof -i:$PORT | wc -l`if [ $count -gt 0 ];thenecho "Stopping Redis $ip:$PORT"ssh $ip redis-cli -p $PORT -a $PASSWROD shutdown 2>/dev/nullelseecho "no redis $ip:$PORT"fidonePORT=$((PORT+1))
done
exit 0

6. 相关问题

6.1 搭建Redis集群遇到的问题:Waiting for the cluster to join…

cluster遇到这种情况大部分是因为集群总线的端口没有开放!

集群总线
每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。 16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。

解决方案
知道了问题所在, 自然就知道如何去解决了, 只需要将开启Redis端口对应的 集群总线端口即可。例如: 6379 + 10000 = 16379。所以开放每个集群节点的客户端端口和集群总线端口才能成功创建集群!
注意:所有redis集群机器都要放开对应的redis客户端端口和集群总线端口
如果你是在虚拟机上搭建redis集群、那么你直接关闭防火墙即可解决。

systemctl stop firewalld.service  关闭防火墙
systemctl disable firewalld      永久关闭防火墙

但如果你是在云服务器上搭建的redis集群,那么你就需要去安全组放开对应的redis集群总线端口。
华为云服务器的端口开放设置如下图:
在这里插入图片描述

6.2 [ERR] Node 192.168.2.180:8001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

cluster nodes
在给redis集群环境添加节点时候遇到一个问题,提示新增的Node不为空。

解决方法

  • 1. 将需要新增的节点下aof、rdb等本地备份文件删除;

appendonly yes# The name of the append only file (default: "appendonly.aof")appendfilename "appendonly.aof"

dir就是设置备份文件目录的,如果没设置,在哪文件夹下开启过服务,那个文件夹下就会生成一个dump.rdb.

# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /usr/local/redis/redis-cluster/8004################################# REPLICATION #################################
  • 2. 同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;
cluster-config-file nodes-8004.conf# Cluster node timeout is the amount of milliseconds a node must be unreachable
# for it to be considered in failure state.
# Most other internal time limits are multiple of the node timeout.
#
cluster-node-timeout 15000
  • 3. 再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:
    172.168.2.180:8001> flushdb #清空当前数据库

我的dir目录设置在/usr/local/redis/redis-cluster/800x/, 删除如下图:
在这里插入图片描述
删除aof和cluster-config-file所在的文件
在这里插入图片描述
清空各节点数据库
redis-cluster完成上面几个操作之后,再重新创建节点,成功。
在这里插入图片描述注:这种情况可能发生在每次非正常关闭redis集群的时候。

6.3 Could not connect to Redis at 192.168.3.23:8004: Connection timed out

可能的原因之一是端口号没开放
如果是华为云服务器,登录华为云,在安全组中配置,操作如下:
在这里插入图片描述

6.4 Could not connect to Redis at 192.168.2.180:8001: Connection refused

创建集群时,报Could not connect to Redis at 192.168.2.180:8001: Connection refused。

  1. 首先,考虑是对应节点的redis服务没有开,开启即可。
  2. 其次,bind 127.0.0.1 是否注释。注释了,表示默认谁都可以连接。将其注释或者改为0.0.0.0也可。
  3. 再次,protected-mode 是否已经设置为no。在没有设定bind ip,且没有设密码的情况下,Redis只允许接受本机的响应。

我们想要其他机连接我们的Redis服务,有三种方式:

  1. 想办法让Redis运行在protected-mode为no的模式。
  2. 如果protected-mode为yes,那么我们可以在Redis服务上设置bind,也就是我们的一台机器有几个ip,指定我们的服务绑定监听本机的哪个ip。
  3. 如果protected-mode为yes,除了设置bind外,亦可通过设置密码的形式,也即是设置参数requirepass,从而达到可以从其他机器访问的目标。
  1. 最后,查看防火墙是否关闭
    在这里插入图片描述
    或者开放指定端口号,我这是本地测试,为了方便直接关闭防火墙,但是生产环境不要这样做

7. redis-cli常用命令参数

redis-cli我们最常用的三个参数就是-h、-p、-a选项,分配用来指定连接的redis-server的host、port和登录密码。
通过redis-cli –help发现,redis-cli还提供了其他很多的参数和功能。

  1. -x
    -x选项从标准输入(stdin)读取最后一个参数。 比如从管道中读取输入:
echo -en "chen.qun" | redis-cli -x set name
  1. -r -i
  • -r 选项重复执行一个命令指定的次数。
  • -i 设置命令执行的间隔。
    比如查看redis每秒执行的commands(qps)
redis-cli -r 100 -i 1 info stats | grep instantaneous_ops_per_sec
  1. -c
    开启reidis cluster模式,连接redis cluster节点时候使用。

  2. -rdb
    获取指定redis实例的rdb文件,保存到本地。

redis-cli -h 192.168.44.16 -p 6379 --rdb 6379.rdb
    • -slave
      模拟slave从master上接收到的commands。slave上接收到的commands都是update操作,记录数据的更新行为。
  1. -scan和- -pattern
    是用scan命令扫描redis中的key,- -pattern选项指定扫描的key的pattern。相比keys pattern模式,不会长时间阻塞redis而导致其他客户端的命令请求一直处于阻塞状态。

redis-cli --scan --pattern 'chenqun_*'
  1. -pipe
    这个一个非常有用的参数。发送原始的redis protocl格式数据到服务器端执行。
    比如下面的形式的数据(linux服务器上需要用unix2dos转化成dos文件)。
    linux下默认的换行是\n,windows系统的换行符是\r\n,redis使用的是\r\n.
echo -en '*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | redis-cli --pipe

参考:http://redis.io/topics/mass-insert

  1. -bigkeys
    对redis中的key进行采样,寻找较大的keys。是用的是scan方式,不用担心会阻塞redis很长时间不能处理其他的请求。执行的结果可以用于分析redis的内存的只用状态,每种类型key的平均大小。
redis-cli --bigkeys
  1. -eval
    执行指定lua脚本的。
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3

8. 相关文章

  • 华为云两台机器内网互联
  • Linux安装部署Redis

Redis集群的搭建,追加服务启停脚本
https://blog.csdn.net/alwaysbefine/article/details/109790828

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

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

相关文章

javascript包管理工具npm、pnpm、webpack

目录 npm package.json 常见的属性 main属性 scripts属性 dependencies属性 devDependencies属性 其他属性 依赖版本管理 package-lock.json npm install 原理 npx webpack 内置模块path​编辑 基本使用 css-loader postcss-loader postcss-preset-env webpack…

[附源码]Python计算机毕业设计Django付费自习室管理小程序

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

Express 3 快速入门 - Express 应用程序生成器

Express Express 中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Express3 快速入门 - Express 应用程序生成器3.1 演示3.2 重新创建myapp Express 应用3 快速入门 - Express 应用程序生成器 3.1 演示 通过应用生成器工具 express-gene…

【测试面试】测试开发面试算法高频题,这些题你会多少?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试开发是近几年行…

您的推特营销选对群控了吗

作为跨境电商从业者&#xff0c;我们都知道&#xff0c;如果平台检测到违规&#xff0c;最多的是多账号关联。平台怎么判定我们的账号是否关联呢&#xff1f;一个重要的依据是浏览器的指纹信息。 一、进行站外引流的困难有哪些&#xff1a; 国内用户在推广海外社交媒体时&…

02【SpringMVC的工作流程】

文章目录二、SpringMVC的工作流程2.1 SpringMVC的三大组件2.1.1 HandlerMapping&#xff1a;2.1.2 HandlerAdapter&#xff1a;2.1.3 ViewResolver&#xff1a;2.2 SpringMVC源码分析2.2.1 准备工作2.2.2 查看DispatcherServlet的继承体系&#xff1a;2.2.3 通过映射器获取执行…

Apifox很难不爱

一、背景 项目开发我们都知道在一个项目团队中是由很多角色组成&#xff0c;最常见团队的就是前端开发工程师、客户端开发工程师、服务端开发工程师组成一个团队&#xff0c;团队之间进行合作&#xff0c;一般我们都离不开API接口管理和测试&#xff0c;API接口管理可以理解为前…

高等数学基础概念的Python开发实现

一般的数学算式math函数库就可以解决了&#xff0c;如果是涉及到高等数学极限&#xff0c;微积分等知识&#xff0c;就需要用到sympy科学计算库&#xff0c;它是专门用来解决数学的运算问题的。 Sympy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统&…

基于非支配排序遗传算法的多目标水光互补优化调度附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

产品经理必备的能力有哪些?

从一名普通的产品经理到一名优秀的产品经理要经历什么&#xff1f;哪些又是产品经理必备的能力&#xff1f;产品经理对能力的需求也不尽相同&#xff0c;在不同的团队合作模式下&#xff0c;还必须懂得各种能力。 一、业务分析能力 数据分析能力该是什么样的呢 1、有数据意识…

SCP命令在不同远程服务器之间发送文件(指定端口)

最近想把数据集放在另一个服务器上&#xff0c;但是如果先下载到本地然后再上传过去&#xff0c;则需要浪费好久时间。 特总结下如何快捷的通过命令完成不同远程服务器之间的文件传输&#xff0c;以及遇到的问题。 SCP命令 Linux scp 命令用于 Linux 之间复制文件和目录。1 s…

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 前言 在之前的文章中,由于忘记介绍使用的rtp推流方式都是TS流方式,RTP方式推流没讲,本章作为之前文章(JavaCV音视频开发宝典:rtsp拉流并使用转码方式转推到rtp)的补充。 注意:本文不需要…

Java+JSP+MySQL基于SSM的在线投票系统-计算机毕业设计

项目介绍 随着社会的发展&#xff0c;人们在处理一些问题的时候不同意见越来越多&#xff0c;这源于人们对思想的解放和对社会的认识。所以在处理同一问题上&#xff0c;为了征求不同人的意见在线投票系统诞生了。 基于SSM的在线投票系统以钦州学院为背景&#xff0c;运用在校…

论文投稿指南——中文核心期刊推荐(计算机技术)

>>>深度学习Tricks&#xff0c;第一时间送达<<< &#x1f680; 写在前面 &#x1f431;‍&#x1f3cd; 本期开始&#xff0c;小海带会定期推荐各专业领域的中文核心期刊及论文投稿网址&#xff0c;供大家参考交流 ~ 《中文核心期刊要目总览》是学术界对某…

微信开发者工具 / 反编译工具CrackMinApp 下载安装

微信开发者工具 / 反编译工具CrackMinApp 下载安装 文章目录微信开发者工具 / 反编译工具CrackMinApp 下载安装前言一、微信开发者工具下载安装二、反编译工具CrackMinApp安装三、导入反编译后的文件四、友情提示总结前言 微信开发者工具介绍&#xff1a;微信提供的微信小程序…

一篇个人陈述应该包括这三个内容

大家好呀&#xff0c;申请季正如火如荼地进行着&#xff0c;不知道大家都忙碌得怎么样了呢&#xff1f;今天我们来聊聊个人陈述Personal statement,的撰写&#xff0c;包括一篇个人陈述应该包括哪些部分。 申请时&#xff0c;除了学习成绩等“硬背景”&#xff0c;个人陈述(PS…

[SpringMVC]第三篇:作用域传参

四大域: PageContext对象(不常用) 作用域范围:当前jsp页面内有效 request对象(经常用) 作用域范围:一次请求内。 作用: 解决了一次请求内的资源的数据共享问题 session对象(登录,会话时会用) 作用域范围:一次会话内有效。 说明:浏览器不关闭,并且后台的session不失效&#xff…

内容、文档和流程数字化如何支持精益原则

内容、文档和流程数字化如何支持精益原则 无论您身处哪个行业&#xff0c;想要在业务中取得真正的成功就必须把客户放在所有决策的中心位置&#xff0c;以便您能够给客户提供最佳服务。同时公司以最高效的方式向前发展也很重要。幸运的是&#xff0c;有一种方法可以确保两者兼而…

Java企业微信对接

最近项目中要对接企业微信&#xff0c;实现通讯录数据同步&#xff0c;即在企业端添加编辑删除用户&#xff0c;部门数据要同步到微信端&#xff0c;同时微信端添加编辑删除用户&#xff0c;部门数据要同步到企业端&#xff0c;实现数据同步功能&#xff0c;需要调用企业微信AP…

五款朴实无华却又能极大提升办公效率的软件

最近后台收到好多小伙伴的私信&#xff0c;今天继续推荐五款小工具&#xff0c;都是免费使用的&#xff0c;大家可以去试试看。 1.光追动画制作——Luxion KeyShot Luxion KeyShot是一款互动性的光线追踪与全域光渲染3D渲染与动画制作软件&#xff0c;内置丰富多样的材质&…