MCU 参考
微控制单元,俗称单片机
micro python
在单片机上运行的精简python版本
socket 通信
粘包,少包,数据在内存中的存储字节序列解析及封装,包括 socket 优化及多进程时 socket 与惊群的效应问题解决办法
关于通信协议最基础的你必须知道 MQTT 协议及 MQTT-SN 协议的解释及封装和算法,我们的传感器设备大部分是 MQTT-SN 和字节流通信协议。
用到的时候后续补充
知识图谱
MCU 参考
微控制单元,俗称单片机
micro python
在单片机上运行的精简python版本
socket 通信
粘包,少包,数据在内存中的存储字节序列解析及封装,包括 socket 优化及多进程时 socket 与惊群的效应问题解决办法
关于通信协议最基础的你必须知道 MQTT 协议及 MQTT-SN 协议的解释及封装和算法,我们的传感器设备大部分是 MQTT-SN 和字节流通信协议。
用到的时候后续补充
参考github
要安装或更新nvm,应运行安装脚本。为此,您可以手动下载并运行脚本,也可以使用以下cURL或Wget命令:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
运行以上任一命令将下载一个脚本并运行它。该脚本会将nvm存储库克隆到〜/ .nvm,并尝试将以下代码段中的源代码行添加到正确的配置文件(〜/ .bash_profile,〜/ .zshrc,〜/ .profile或〜/ .bashrc)
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
更换镜像
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
安装node
nvm install node 安装默认版本
nvm install 12.16.2 安装指定版本
npm修改镜像地址 https://www.cnblogs.com/susu8/p/9208826.html
npm config set registry http://registry.npm.taobao.org
nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out
文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
nohup(选项)(参数)
--help:在线帮助;
--version:显示版本信息。
程序及选项:要运行的程序及选项。
使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
该指令表示不做挂断操作,后台下载
nohup wget site.com/file.zip
下面命令,会在同一个目录下生成一个名称为 nohup.out
的文件,其中包含了正在运行的程序的输出内容
nohup ping -c 10 baidu.com
PHP示例
nohup xxx.php &
<?php
// Fork the current process
$pid = pcntl_fork();
// If pid is negative, an error occurred
if ($pid == -1) {
exit("Error forking...\n");
}
// If pid is 0, this is the child process
elseif ($pid === 0) {
// Make the child process a new session leader
if (posix_setsid() === -1) {
exit("Error creating new session...\n");
}
$dir = '../../../vendor/mydaemon.log';
// Open a log file for writing
$log = fopen($dir, 'w');
// Loop indefinitely
while (true) {
// Write a message to the log file
fwrite($log, "Daemon is running...\n");
// Sleep for 5 seconds
sleep(5);
}
//close the standard input, output, and error streams respectively.
//REF:https://www.php.net/manual/zh/wrappers.php.php
//REF:https://www.php.net/manual/zh/features.commandline.io-streams.php
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
}
// If pid is positive, this is the parent process
else {
// Exit the parent process
exit('Exit the parent process');
}
使用一种技术,就要遵循它的规范,尤其是在没有完全了解实现原理的时候,不能随意的DIY否则就会进入坑中
不明原因(可能的原因同事对框架做了修改)导致在控制器构造方方中使用$this->middleware()方法,terminate中间件没有生效,最后在路由中使用->middleware() 方法中间件生效
极客时间学习笔记
简介
elasticsearch是用java语言开发的基于lucene的全文搜索引擎。
特性
高可用,可扩展的分布式系统
服务可以用性-允许有节点停止服务
数据可用性-部分节点丢失不会丢失数据
扩展性-请求量提升/数据不断增长(将数据分不到多有节点上),水平扩容
分布式架构
不同的集群通过不同的名字区分,默认名字 “elasticsearch”,可以通过配置文件或者命令行启动时中 -E cluster.name = xxx 设定 配置文件
一个集群可以有一个或多个节点
节点
节点是一个elasticsearch的实例,本质上是一个java的进程,一台机器可以运行多个节点,生产环境建议一台机器只运行一个elasticsearch实例
每个节点都有自己的名字,通过配置文件,或者启东时 -e node.name = xxx 指定,节点启动后会分配一个UID,保存在data目录下
Master-eligible nodes 和 Master Node
每个节点启动后,默认就是一个master eligible 节点(可以通过配置关闭 node.master:false)
每一个Master-eligible节点都可以参加选主流程,成为Master节点
第一个Master-eligible节点启动时会将自己选举为Master节点
每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态(大哥说了算,保持数据一致性)
集群状态中存储了必要信息 :所有节点的信息;所有索引和相关Mapping与Setting信息;分片路由信息
Data node 和 Coordinaing Node
Data node 保存数据的节点,负责保存分片数据,数据扩展时起重要作用(待补充)
Coordinating Node
负责接受Client请求,将请求分发到合适的节点,最终把结果汇总到一起,每个节点默认都起到Coordinating Node的职责
其他的节点类型
Hot & Warm Node 不同配置的Data Node,用来实现Hot & Warm 架构 降低集群部署成本,Hot高配置机器,Warm低配置机器。
Machine Learning Node 负责跑机器学习 Job ,用来做异常检测
Tribe Node 连接不同的Es集群并支持将这些集群当成一个单独集群处理后续版本将会废弃,5.3开始使用Search across clusters替代
配置节点类型
开发环境一个节点可以承担多种角色
生产环境设置单一的角色节点(dedicated node)
节点类型 | 配置参数 | 默认值 |
maste eligible | node.master | true |
data | node.data | true |
ingest | node.ingest | true |
coordinating only | 无 | 每个节点默认都是coordinating节点设置其他类型全部为false |
machine learning | node.ml | true(需 enable x-pack) |
分片(Primary shard & Replica Shard)
主分片,用以解决数据水平扩展的问题,通过主分片,可以将数据分布到集群内的所有节点之上
副本分片,用以解决数据高可用的问题。分片是主分片的拷贝
分片的设定
对于生产环境中分片的设定,需要提前做好容量规划
分片数设置过小
分片数设置过大,7.0开始,默认主分片设置成1,解决了over-sharding的问题
查看集群状态
GET _cluster/health
{
"cluster_name" : "elasticsearch",
"status" : "yellow",//green主分片与副分片都正常 yellow主分片全部分配正常,有副本分片未能正常分配,red有主分片未能分配,例如当服务器磁盘容量超过85%去创建新的索引时
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 7,
"active_shards" : 7,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 1,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 87.5
}
系统快照软件Timeshift
GUI主题
硬件驱动
工具类
快捷方式编写
WPS设置语言不跟随系统
新建一个空白文档,右上角A图标打开设置语言功能 ,不跟随系统,设置为中文
flameshot添加快捷方式 指令 flameshot gui 如图
chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable
sudo apt-get update && sudo apt-get install qbittorrent
开发工具
filezilla apt install filezilla
dia画图软件
sudo apt-get install dia
sudo snap install redis-desktop-manager --edge
redinav redis-gui工具
umbrello uml建模工具
sudo apt install umbrello
phpstorm
Nodepad++
sudo snap install notepad-plus-plus
Typora
wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -
# add Typora's repository
sudo add-apt-repository 'deb https://typora.io/linux ./'
sudo apt-get update
# install typora
sudo apt-get install typora
安装钉钉
https://github.com/nashaofu/dingtalk
https://github.com/nashaofu/dingtalk/issues/382
原型工具
github release 加速下载网站
国外资源加速下载的方案
原理同百度网盘和迅雷的离线下载,
首先购买一台国外的vps,要求带宽不能太差,同时,国内连这个vps也不能太慢
1先将资源下载到vps上
2用ftp或scp将文件下载到本地
参考
注意事项
安装TopIcons Plus 商店里有
解决中文乱码
不知道从哪个版本开始,Ubuntu安装wine QQ后中文会变成方块。。。原因是wine QQ使用文泉驿字体, 此字体已不随机附带, 随机字体为Noto系列字体。
解决方法为安装对应字体
sudo apt install fonts-wqy-microhei fonts-wqy-zenhei
需注意文泉驿字体归于universe分支, 意味不受Canonical支援, 可能需要在apt sources中添加universe分支
sudo add-apt-repository universe
希望可以将字体并入dependencies中, 免去此麻烦。
解决微信无法发送图片
sudo apt install libjpeg62:i386
TIM 安装 PPAPI FLASH
sudo apt-get install pepperflashplugin-nonfree
sudo update-pepperflashplugin-nonfree --install
微信更新问题
如果出现微信提示跟新问题执行这一条语句即可 可能存在问题。
wget -qO- https://deepin-wine.i-m.dev/setup.sh | sudo sh
覆盖文件升级方式,这个简单有效
https://blog.csdn.net/ysy950803/article/details/104045975
存在问题图片一直发送中,发不出去
Ubuntu 20.04 安装wechat
wget -O- https://deepin-wine.i-m.dev/setup.sh | sh
sudo apt-get install deepin.com.wechat
ubuntu20.04
推荐使用这个deepinwine
卸载重装后如果出现依赖问题参考
https://github.com/zq1997/deepin-wine/issues/220
新版 deepin-wechat 截图崩溃
ubuntu 安装JDK
https://blog.csdn.net/weixin_38924500/article/details/106215048
安装搜狗输入法
官网版,20.04测试无效不好用,太坑了
https://pinyin.sogou.com/linux/help.php
Ubuntu20.04踩坑记录
无法进入设置中心,搜所不到setting
sudo dpkg -l|grep gnome-control-center
sudo dpkg -l|grep ubuntu-desktop
查询软件是否存在,如果不存在则执行重装
sudo apt install --reinstall gnome-control-center //重装控制中心
sudo apt -f install ubuntu-desktop //安装ubuntu桌面
卸载liboffices
https://jingyan.baidu.com/article/bad08e1e244b2109c85121f1.html
Snap core 无法更新解决 snap has no updates available
//更新一下所有软件,排除更新问题
sudo apt update && sudo apt upgrade
//杀死gnome-software进程
killall gnome-software
//重启电脑
reboot
参考链接
https://askubuntu.com/questions/1321217/ubuntu-store-snap-update-fails
https://askubuntu.com/questions/1321097/snapd-runtime-environment-update
ubuntu22.04 支持华硕笔记本开启背光键盘
fn+f7 亮灯建
ubuntu pro 更新提示问题
最简单的方法删除
mkdir -p relocated_apt
sudo mv /etc/apt/apt.conf.d/20apt-esm-hook.conf ~/relocated_apt/.
引导修复工具
#安装
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
#卸载
sudo apt-get -y autoremove boot-repair
sudo add-apt-repository -r ppa:yannubuntu/boot-repair
sudo apt-get update
装双系统时,可以用来在grub中添加或修复windows boot项
Surface Go 安装ubuntu
生产环境部署配置
Web服务器
Apache服务器
负载均衡指南
LVS
Keepalived
Nginx upstream
Lua脚本学习笔记
关系型数据库(RDBMS)
全文索引指南
MongoDB常用(ES可替代)
消息队列中间件(Message Quene)指南
RabbitMQ常用
RocketMQ常用
如何设计SDK和类库
简介
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,管理PHP进程池。用于接受处理来自WEB服务器(nginx)的请求.
PHP-FPM会创建一个master进程用于管理work进程(fork或killwork进程)和转发请求。work进程会竞争的接受请求,接收成功后,解析FastCGI协议执行脚本,处理完成,等待下一个请求(同步阻塞IO)。
PHP-FPM 对于高并发的处理能力不强。高并发业务推荐使用swoole 或 workman相关生态。
配置项说明 官方文档
#PID 文件的位置
pid = run/php-fpm.pid
#错误日志目录
error_log = log/php-fpm.log
#日志等级
log_level = warning
#用于设定平滑重启的间隔时间。这么做有助于解决加速器中共享内存的使用问题,可用单位:s(秒),m(分),h(小时)或者 d(天)
emergency_restart_interval = 60s
#如果子进程在 emergency_restart_interval 设定的时间内收到该参数设定进程数量的 SIGSEGV 或者 SIGBUS退出信息号,则FPM会重新启动;
emergency_restart_threshold = 30
#子进程接受主进程复用信号的超时时间
process_control_timeout = 5s
#设置 FPM 在后台运行。设置“no”将 FPM 保持在前台运行用于调试
daemonize = yes
emergency_restart 配置解释,在60s内收到30个子进程的SIGSEGV或SIGBUS退出信号,则重启fpm
process_control_timeout场景,例如当父进程发送终止信号时,子进程正在处理某些事情的时候。十秒的时间,他们会有一个更好的机会完成任务并且优雅地退出
进程池监听配置
#进程池名称
[yangliuan]
#设置进程池接受 FastCGI 请求的地址,可用格式为:'ip:port','port','/path/to/unix/socket',每个进程池都要设置
listen = /dev/shm/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = yangliuan
listen.group = yangliuan
listen.mode = 0666
user = yangliuan
group = yangliuan
TCP Socket 链接方式127.0.0.1:9000 ,可以跨机器通讯 ,使用 Nginx 做负载均衡做 PHP 服务器集群,应用服务器只需要安装php就可以了
Unix Socket 链接方式 /dev/shm/php-cgi.sock,只能本机通讯 ,Nginx 和 FPM 必须都在同一台服务器上,速度比较快而且消耗资源少(差距不会太大 0.1% ~ 5% 的差别),这种情况做集群的话,应用服务器需要同时安装nginx和php
/dev/shm 是linux tmpfs文件系统,数据存储和读取直接使用内存,速度快
对应nginx监听方式
fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
进程池模式
fpm 的运行模式有三种:ondemand 按需创建,dynamic 动态创建,static 固定数量
ondemand
ondemand 初始化时不会创建待命的进程。并且会在空闲时将进程销毁,请求进来时再开启。是一种比较 节省内存 的 FPM 运行方式,不过因为其频繁创建和销毁进程,性能表现不佳。
应用场景:一般是在共享的 VPS 上使用。内存小的机器上。
相关参数
#秒数,多久之后结束空闲进程;默认是 10 秒,超过 10 秒即销毁
pm.process_idle_timeout = 10s
#最大并存进程数,超过此值将不再创建
pm.max_children = 50
#每个进程最多处理多少个请求,超过此值将自动销毁
pm.max_requests = 1000
dynamic
动态创建,这个是默认选项,也是比较灵活的选项。兼顾稳定和快速响应。因为一直保证有「空闲进程」可供使用,所以 dynamic 的配置,相比 ondemand 进程要同时创建,响应速度还是比较快的。然而在还是避免不了频繁创建和销毁进程对系统造成的消耗
应用场景:一台服务器上跑多个php项目,平常访问量不多。
相关配置:
#FPM 启动时创建的进程数
pm.start_servers = 10
#最大并存进程数,超过此值将不再创建
pm.max_children = 50
#空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.min_spare_servers = 10
#空闲进程数最大值,如果空闲进程大于此值,则进行清理
pm.max_spare_servers = 40
#每个进程最多处理多少个请求,超过此值将自动销毁
pm.max_requests = 1000
dynamic模式 进程数量公式
处理请求中的进程数量 + pm.max_spare_servers = pm.max_children
超过最大进程数后,新来的请求将会阻塞等待,php-fpm日志会出现 server reached pm.max_children setting (n), consider raising it 警告日志。n为配置的pm.max_children最大进程数值
static
固定进程数量是性能最好,省去了创建和销毁进程的开销,资源利用率最高的运行方式,一般在要求单机性能最高的时候使用
应用场景:PHP 服务器集群,希望每台机器都能物尽其用;本地lnmp开发环境,保证占用内存固定
相关配置:
#FPM 启动时创建的进程数,并且会一直保持这个数
pm.max_children = 50
#每个进程最多处理多少个请求,超过此值将自动销毁
pm.max_requests = 1000
该模式需要计算评估一般场景下,每个进程占用多少内存,以及每台机器的总内存。然后根据情况配置。
使用ab压力测试工具或jmeter工具,对访问频率较高的页面和请求进行的正常流量情况下的压力测试。
然后使用如下命令进行统计,查看内存使用情况,单个php进程占用进程数
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep php-fpm
要求不严谨的情况下,可以根据经验和项目的业务场景的代码对每个进程数进行粗略估算,例如一个常用接口查询请求下占用多少内存,然后在计算。
最大进程数量计算公式
pm.max_children = 可用内存 / 每个进程暂用内存大小
可用内存不是本机所有内存,要除去其他程序运行,例如nginx,mysql,等其它服务的内存。
调试期间,要在生产环境中实战观察,一般建议使用 80% 的内存使用率,留 20% 给内存泄露的空间和其他软件运行。
最后是 pm.max_requests
值,需要我们观察应用是否有 内存泄漏。现代的 PHP 程序,尤其是 Laravel ,会依赖于非常多的扩展包,这些扩展包代码质量参差不齐,多少会出现内存泄漏的问题。如果内存泄露不严重,那么把值设置高一点,让单个进程在存活期间多处理一些请求,如果内存泄露比较严重,应当酌情设置低一点。否则会出现系统内存不够用,然后去使用 Swap 物理内存 的窘境。
如果代码质量非常高,不会出现发生内存泄露的情况,可以将其设置为 pm.max_requests=0 可以避免过高的 PM 开销
请求的生命周期设置
#设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 'max_execution_time' 因为某些特殊原因没有中止运行的脚本有用
request_terminate_timeout = 600
非分片上传大文件时,需要用到
请求慢日志设置
#当一个请求该设置的超时时间后,就会将对应的 PHP 调用堆栈信息完整写入到慢日志中,0关闭
request_slowlog_timeout = 60
#慢日志路径
slowlog = var/log/slow.log
#慢日志记录脚本堆栈的深度
request_slowlog_trace_depth = 20
文件打开限制
#设置文件打开描述符的 rlimit 限制
rlimit_files = 51200
#设置核心 rlimit 最大限制值。可用值:'unlimited',0 或者正整数
rlimit_core = 0
worker进程开启日志记录
catch_workers_output = yes
参考
centos
安装
方式一
yum update
yum install -y supervisor
//yum安装会自动创建systemd脚本,可用systemd管理
systemctl enable supervisord //开机自启
systemctl disable supervisord //禁用开机自启
systemctl start supervisord//启动supervisor
systemctl reload supervisord //重新加载配置
systemctl stop supervisord //停止supervisor
方式二
yum update
yum install -y python-setuptools
easy_install supervisor
echo_supervisord_conf >/etc/supervisord.conf //创建配置文件
需要自己配置systemd脚本
ubuntu
sudo apt-get install supervisor
service supervisor status|start|stop|enable|disable
常用命令
supervisord -c /etc/supervisord.conf //指定配置文件启动
supervisorctl stop programxxx //停止某一个进程
supervisorctl start programxxx //启动某一个进程
supervisorctl restart programxxx //重启某个进程
supervisorctl status //查看进程状态
supervisorctl stop groupworker //重启所有属于名为 groupworker 这个分组的进程(start,restart 同理)
supervisorctl stop all //停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl reload //载入最新配置文件,停止原有进程并按新的配置启动所有进程
supervisorctl update //根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
配置文件示例 (laravel项目为例)
#进程组名称
[program:laravel-worker-queue]
#进程名称
process_name=%(program_name)s_%(process_num)02d
#程序执行命令
command=/php-path/bin/php /www/www.youdomain.com/current/artisan queue:work redis --sleep=3 --tries=3
#supervisor启动后自动启动
autostart=true
#退出后自动重启
autorestart=true
#程序运行用户
user=www-data
#supervisor启动进程数量
numprocs=5
#如果为true,则将进程的 stderr 输出发送回其 stdout 文件描述符上的 supervisord(在 UNIX shell 术语中,这相当于执行 /the/program 2>&1)
redirect_stderr=true
#日志大小
stdout_logfile_maxbytes=10MB
#日志数量
stdout_logfile_backups=20
#日志目录
stdout_logfile=/www/www.youdomain.com/current/storage/logs/worker.log
Redis必须是以文件路径作为第一个参数开始 redis-server /path/to/redis.conf 需要内存大小时,可以指定通常以1k 5GB 4M的形式出现,以此类推: 1k => 1000字节 1kb => 1024字节 1m => 1000000字节 1mb => 1024 * 1024字节 1g => 1000000000字节 1gb => 1024 * 1024 * 1024字节 单位不区分大小写,因此1GB 1Gb 1gB都是相同的 ==INCLUDES========================================================== 在此处包含一个或多个其他配置文件。如果你这很有用有一个标准模板,可以转到所有Redis服务器,但也需要自定义一些每服务器设置。包含文件可以包括the other files,所以明智地使用它。 通知选项“include”不会被命令“CONFIG REWRITE”重写 来自admin或Redis Sentinel。由于Redis总是使用最后一次处理line作为配置指令的值,你最好把include包括在内在此文件的开头,以避免在运行时覆盖配置更改。 include /path/to/local.conf include /path/to/other.conf ==MODULES===========================================================启动时加载模块。 如果服务器无法加载模块它会中止。可以使用多个loadmodule指令。 loadmodule /path/to/my_module.so loadmodule /path/to/other_module.so ==NETWORK========================================================== 如果未指定“bind”配置指令,则Redis将监听来自服务器上所有可用ip的连接。可以使用只听一个或多个选定的ip bind 192.168.1.100 10.0.0.1 bind 127.0.0.1 ::1 bind 0.0.0.0 监听所有 port 6379 监听端口 默认情况下启用保护模式。 只有当您确定希望其他主机的客户端连接到Redis 时,即使未配置任何身份验证,也不应使用“bind”指令明确列出特定的接口您应该禁用它. 开启远程访问需要将此选择项改为no protected-mode yes 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。 tcp-backlog 511 Unix socket. 指定以redis unix socket方式运行的 unixsocket /tmp/redis.sock //路径 unixsocketperm 700 //权限建议 777 客户端空闲超时时间,0表示禁用 timeout 0 tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值。 tcp-keepalive 300 daemonize是用来指定redis是否要用守护线程的方式启动。 daemonize 设置yes或者no区别daemonize:yes
:redis采用的是单进程多线程的模式。当redis.conf中选项daemonize设置成yes时,代表开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。daemonize:no
: 当daemonize选项设置成no时,当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出 daemonize yes 是否通过upstart或systemd管理守护进程。默认no没有服务监控,可选项有no ,upstart, systemd, auto supervised no pid文件在redis启动时创建,退出时删除。最佳实践为配置该项。 pidfile /var/run/redis_6379.pid #配置日志级别。选项有debug, verbose, notice, warning loglevel notice 日志名称。空字符串表示标准输出。注意如果redis配置为后台进程,标准输出中信息会发送到/dev/null logfile /usr/local/redis/var/redis.log 是否启动系统日志记录。 syslog-enabled no 指定系统日志身份。 syslog-ident redis 指定syslog设备。必须是user或LOCAL0 ~ LOCAL7之一。 syslog-facility local0 设置数据库个数。默认数据库是 DB 0 可以通过SELECT where dbid is a number between 0 and 'databases'-1为每个连接使用不同的数据库。 databases 16