环境
- LinuxVM(centos8)
下载
安装
下载&解压
[root@centos]# wget https://download.redis.io/releases/redis-6.0.10.tar.gz
2021-02-04 10:36:07 (1.79 MB/s) - 已保存 “redis-6.0.10.tar.gz” [2271970/2271970])
-rw-r--r--. 1 root root 2271970 1月 12 22:35 redis-6.0.10.tar.gz
[root@centos]# tar -zxvf redis-6.0.10.tar.gz
drwxrwxr-x. 7 root root 4096 1月 12 22:25 redis-6.0.10
编译
编译参数
prefix=/usr/local/redis #执行redis安装位置
MALLOC=/usr/lib64/libjemalloc.so.1 #通过rpm可查
[root@centos]# cd redis-6.0.10
[root@centos]# make prefix=/opt/redis
[root@centos]# make install
cd src && make install
make[1]: 进入目录“/opt/redis-source/redis-6.0.10/src”
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: 离开目录“/opt/redis-source/redis-6.0.10/src”
[root@centos]# cd /opt/redis
[root@centos redis]# ll
drwxr-xr-x. 2 root root 134 2月 4 14:58 bin
解决Linux依赖问题
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash
配置
拷贝
redis.conf
到redis配置目录(此处无必要)
[root@centos redis]# cp /opt/redis-source/redis-6.0.10/redis.conf /opt/redis/
[root@centos redis]# ll
drwxr-xr-x. 2 root root 134 2月 4 14:58 bin
-rw-r--r--. 1 root root 85560 2月 4 14:58 redis.conf
[root@centos redis]# vim redis.conf
可参照一下进行配置
- bind:redis服务监听IP地址,默认127.0.0.1
- protected-mode:是否开启保护模式,默认YES,开启需要密码
- port:redis服务监听端口,默认6379
- tcp-backlog:tcp最大连接数,受限于
/proc/sys/net/core/somaxconn
Linux内核设置,若设置大于somaxconn则使用somaxconn值,默认511,somaxconn默认128- unixsocket:指定用于监听传入连接的Unix套接字的路径,默认不监听
- timeout: 客户端超时断开链接时间,单位秒,默认0,不启用
- tcp-keepalive:服务端和客户端连接保持参数,默认300,单位秒,每隔300s服务端会向客户端发送ack,确保客户端存在
- daemonize:是否以守护模式启动,是否后台运行,默认no
- supervised:通过upstart和systemd管理Redis守护进程,默认no
- pidfile: pid写入文件路径,redis启动时会吧pid写入这个文件,默认路径/var/run/redis_6379.pid
- loglevel:日志级别,debug,verbose,notice,warning
- logfile:日志文件路径,当指定为空字符串时为标准输出,如果redis已守护进程模式运行,那么日志将会输出到 /dev/null
- syslog-enabled:是否启用系统日志记录器,默认no
- syslog-ident:系统日志标识,默认redis
- syslog-facility:指定系统日志工具,USER或者LOCAL0到LOCAL7之间,默认local0
- databases:设置数据库数,默认16
- always-show-logo:显示ASCII logo,默认yes
- save:保存db到硬盘,可设置多条
- example: save 900 1 若900秒后一个key被更改,则保存
- stop-writes-on-bgsave-error:若启用RDB快照,最后一次保存失败,则停止保存。默认yes
- rdbcompression:是否在dump .rdb的时候启用字符串压缩。如果想节约一点CPU资源的话,可以设置为no,默认yes
- rdbchecksum:是否在RDB文件末添加CRC64校验
- dbfilename:rdb文件名,默认dump.rdb
- rdb-del-sync-files:在未启用持久性的情况下删除复制中使用的RDB文件,默认no
- dir:工作目录,默认当前目录
- replicaof:使用copyof来使Redis实例成为另一个Redis服务器的副本,两个参数,IP即主节点IP,POST即主节点端口,示例
replicaof 127.0.0.1 6379
- masterauth:主节点密码
- masteruser:用于复制操作的用户,指定user时,服务从节点将使用新的校验方式对主节点进行身份验证
- replica-serve-stale-data:当从节点失去与主节点的连接时,或者仍在进行复制时,设置yes,从节点仍然回复客户端请求,数据可能异常。设置no,对以下下命令返回错误(SYNC with master in progress)
INFO, REPLICAOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE,UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, HOST and LATENCY
- replica-read-only:是否只读
- repl-diskless-sync:是否启用无盘复制,无盘复制指通过socket传输rdb,不接触磁盘文件,有盘复制是指直接发送rdb文件。
- repl-diskless-sync-delay:无盘复制等待延迟时间,默认5s,配置0无需等待
- repl-diskless-load:从节点接受副本方式,设置disabled,先将rdb写入本地磁盘,后读入db,设置on-empty-db,在安全的情况下使用无盘负载,直接从socket中读入数据写入db,设置swapdb,将数据保留在内存中,可能发送oom
- repl-ping-replica-period:设置从节点到主节点ping时间间隔,默认10s
- repl-timeout:复制超时时间
- repl-disable-tcp-nodelay:可以设置两个参数,设置yes,使用更少的数据包和带宽发送副本,这样可能出现副本数据延迟,可达40毫秒,设置no,将减少副本数据延迟,这将消耗更多的带宽
- repl-backlog-size:设置复制挤压大小,默认1mb
- repl-backlog-ttl:副本挤压释放时间
- replica-priority:副本优先级,选择优先级最低的升级为主节点
- min-replicas-to-write和min-replicas-max-lag:两个设置同时使用,如果连接的副本少于{min-replicas-to-write}个,并且延迟小于或等于{min-replicas-max-lag}秒,则主节点可能会停止接受写入,任意一个设置0,将禁用该功能
- acllog-max-len:ACL日志最大条数,默认128
- requirepass:服务密码
- maxclients:最大客户端数
- maxmemory:内存使用限制,超过执行key淘汰策略
- maxmemory-policy:设置key淘汰策略如以下:
- volatile-lru:最近最少使用设置了过期时间的key
- allkeys-lru:最近最少使用的key
- volatile-lfu:最少使用设置了过期时间的key
- allkeys-lfu:最少使用的key
- volatile-random:设置了过期时间的key中随机
- allkeys-random:所有key随机
- volatile-ttl:过期时间较小的key
- noeviction:不删key,写操作返回错误
- maxmemory-samples:淘汰策略样本大小
- replica-ignore-maxmemory:设置从节点是否忽略内存设置
- active-expire-effort:可以设从1到10,数值越大系统将以其更大值使用更多的CPU,更长的周期(并且从技术上讲可能会引入更多的延迟),并且将减少仍存在于系统中的已过期密钥的数量
- lazyfree-lazy-eviction:设置淘汰key是否阻塞式处理
- lazyfree-lazy-expire:设置删除过期key是否阻塞式处理
- lazyfree-lazy-server-del:设置覆盖操作时是否阻塞式处理
- replica-lazy-flush:设置从节点重新同步时是否阻塞式处理
- lazyfree-lazy-user-del:设置用户操作删除key是否阻塞式处理
- io-threads:设置IO线程数
- io-threads-do-reads:设置IO线程是否可以执行读操作
- oom-score-adj:启用此功能可使Redis根据其进程主动控制其所有进程的oom_score_adj值,可选参数
- no:请勿更改oom-score-adj
- yes:Alias to "relative" see below.
- absolute:oom-score-adj-values中的值按原样写入内核
- relative:服务器启动时,使用相对于oom_score_adj的初始值的值,然后将其限制在-1000到1000的范围内。因为通常初始值为0,所以它们通常与绝对值匹配
- oom-score-adj-values:配合oom-score-adj使用
- appendonly:配置是否开始AOF
- appendfilename:配置AOF文件名称,默认appendonly.aof
- appendfsync:持久化数据刷新方式,可配置如下:
- everysec:默认选项,每秒一次
- no:由操作系统控制,需要时刷新,快速
- always:每次写入AOF后,安全
- no-appendfsync-on-rewrite:配置BGSAVE或BGREWRITEAOF进行时,是否使用主进程写AOF
- auto-aof-rewrite-percentage:AOF重写比例,设置0禁用重写功能
- auto-aof-rewrite-min-size:AOF重写文件最小大小
- aof-load-truncated:设置在redis服务启动时,AOF文件不完整事动作:
- yes:继续启动,加载现有的AOF文件,并显示错误信息
- no:拒绝启动,需修复AOF文件后才可启动
- aof-use-rdb-preamble:配置重写AOF时是否使用RDB同步码重写AOF
- lua-time-limit:Lua脚本的最大执行时间(以毫秒为单位)
- cluster-enabled:配置启用集群
- cluster-config-file:redis集群节点配置文件名
- cluster-node-timeout:redis集群节点超时时间,单位毫秒
- cluster-replica-validity-factor:集群节点恢复数据计算因子
- cluster-migration-barrier:分配后剩余migration barrier个从节点的主节点会触发节点分配
- cluster-require-full-coverage:集群节点一个不可用,是否集群不可用,设置yes集群不可用
- cluster-replica-no-failover:设置防止主节点故障时,从节点对主节点进行故障转移,可以进行手动转移
- cluster-allow-reads-when-down:设置节点在集群关闭期间可以提供读
- cluster-announce-ip:节点IP
- cluster-announce-port:节点端口
- cluster-announce-bus-port:总线端口
- slowlog-log-slower-than:设置showlog记录慢命令时间
- slowlog-max-len:设置showlog长度
- latency-monitor-threshold:监视记录执行时间超过固定毫秒的记录
- notify-keyspace-events:设置事件通知
- gopher-enabled:设置gopher协议支持
- hash-max-ziplist-entries:编码格式设置
- hash-max-ziplist-value:编码格式设置
- list-max-ziplist-size:设置list最大大小和最大元素数,负数设置大小,证书设置最大条数
- list-compress-depth:列表压缩设置
- set-max-intset-entries:集合key编码格式转换设置
- zset-max-ziplist-entries:编码格式设置
- zset-max-ziplist-value:编码格式设置
- hll-sparse-max-bytes:HyperLogLog稀疏数据结构字节限制设置
- stream-node-max-bytes:stream 的最大内存开销字节数
- stream-node-max-entries:stream 的最大项数量
- activerehashing:默认每1秒10次消耗1ms来做rehashing来释放内存,会增加请求的延时,如果你对延时敏感,则设置no,默认yes
- client-output-buffer-limit:客户端缓存区设置,共计4个参数,依次是客户端类型、最大限制、最小限制、最小限制持续时间。客户端类型有
normal
,replica
,pubsub
,当达到此限制时,将断开链接。- client-query-buffer-limit:客户端查询缓存区大小
- proto-max-bulk-len:redis批量请求大小
- hz:调节可以让redis再空闲时间更多的做一些任务,调整范围1~500
- dynamic-hz:设置yes,则根据客户端连接数可以自动调节hz
- aof-rewrite-incremental-fsync:设置yes每生成32mb数据就进行fsync写入,设置on则一次性写入
- rdb-save-incremental-fsync:设置yes每生成32mb数据就进行fsync写入,设置on则一次性写入
- lfu-log-factor:小于0则启动失败
- lfu-decay-time :小于0则启动失败
- activedefrag:配置主动碎片整理
- active-defrag-ignore-bytes:开始碎片整理最小大小
- active-defrag-threshold-lower:开始碎片整理最小比例
- active-defrag-threshold-upper:碎片超过比例,尽最大清理
- active-defrag-cycle-min:清理内存碎片占用 CPU 时间的比例不低于此值,保证清理能正常开展
- active-defrag-cycle-max:清理内存碎片占用 CPU 时间的比例不高于此值。一旦超过则停止清理,从而避免在清理时,大量的内存拷贝阻塞 Redis,导致其它请求延迟
- active-defrag-max-scan-fields:将处理的sethashzsetlist字段的最大数目
- jemalloc-bg-thread:配置启用jemalloc清除线程
- server_cpulist:配置serverIO进程指定CPU
- bio_cpulist:配置serverBIO进程指定CPU
- aof_rewrite_cpulist:配置AOF重写线程指定CPU
- bgsave_cpulist:配置bgsave线程指定CPU
- ignore-warnings:配置忽略系统警告
以上配置项仅供参考
启动
#启动命令 redis-server [redis配置文件]
[root@centos redis]# bin/redis-server redis.conf
1322:C 08 Feb 2021 16:09:59.986 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1322:C 08 Feb 2021 16:09:59.986 # Redis version=6.0.10, bits=64, commit=00000000, modified=0, pid=1322, just started
1322:C 08 Feb 2021 16:09:59.986 # Configuration loaded
1322:M 08 Feb 2021 16:09:59.988 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.10 (00000000/0) 64 bit
.-`` .-```. ```/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1322
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1322:M 08 Feb 2021 16:09:59.993 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1322:M 08 Feb 2021 16:09:59.993 # Server initialized
1322:M 08 Feb 2021 16:09:59.993 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1322:M 08 Feb 2021 16:09:59.993 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never').
1322:M 08 Feb 2021 16:09:59.994 * Ready to accept connections
关闭
[root@centos]# ps -ef | grep redis
root 1322 1280 0 16:09 pts/0 00:00:00 bin/redis-server 127.0.0.1:6379
root 1354 1330 0 16:13 pts/1 00:00:00 grep --color=auto redis
[root@centos]# kill -9 1322