[root@node21 redis-4.0.10]$ gcc -v -bash: gcc: command not found [root@node21 redis-4.0.10]$ yum install -y gcc
[root@node21 software]$ wget http://download.redis.io/releases/redis-4.0.10.tar.gz [root@node21 software]$ ll -rw-rw-r-- 1 root root 1738465 June 14 00:51 redis-4.0.10.tar.gz [root@node21 software]$ tar xzf redis-4.0.10.tar.gz -C /opt/module/
[root@node21 software]$ cd /opt/module/redis-4.0.10/ [root@node21 redis-4.0.10]$ make
1)若是没有安装gcc,编译会出现以下错误提示。(若是编译失败,必须删除文件夹,从新解压)html
/bin/sh: cc: command not found make[1]: *** [adlist.o] Error 127 make[1]: Leaving directory `/opt/module/redis-4.0.10/src' make: *** [all] Error 2
2)安装成功node
[root@node21 redis-4.0.10]$ make PREFIX=/opt/module/redis-4.0.10 install
安装完成后,在redis安装目录下会出现一个bin目录,bin目录下有几个可执行文件redis
redis-benchmark ---性能测试工具 redis-check-aof ---AOF文件修复工具 redis-check-rdb ---RDB文件检测工具(快照持久化文件) redis-cli ---命令行客户端 redis-sentinel -> redis-server ---redis哨兵 redis-server ---redis服务器启动命令
[root@node21 redis-4.0.10]$ vi /etc/profile 末未追加以下 export REDIS_HOME=/opt/module/redis-4.0.10 export PATH=$REDIS_HOME/bin:$PATH [root@node21 redis-4.0.10]# source /etc/profile
[root@node21 redis-4.0.10]$ bin/redis-server
前台服务端启动成功后,不能进行其余操做,使用Ctrl+c结束或者服务器关闭redis服务自动结束,此种方式不推荐,成功启动信息以下算法
[root@node21 redis-4.0.10]$ bin/redis-server 5356:C 19 June 22:47:00.955 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 5356:C 19 June 22:47:00.956 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=5356, just started 5356:C 19 June 22:47:00.956 # Warning: no config file specified, using the default config. In order to specify a config file use bin/redis-server /path/to/redis.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.10 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 5356 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 5356:M 19 June 22:47:00.960 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 5356:M 19 June 22:47:00.960 # Server initialized 5356:M 19 June 22:47:00.960 # 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.5356:M 19 June 22:47:00.960 # 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 never > /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.5356:M 19 June 22:47:00.960 * Ready to accept connections
修改redis.conf 将daemonize no 改成 daemonize yes,说明:将Redis设置为后台进程;绑定ip由本地ip换成真机ip,方便对外访问数据库
[root@node21 redis-4.0.10]# vi redis.conf
修改完以后指定配置文件为后台启动缓存
[root@node21 redis-4.0.10]# ./bin/redis-server ./redis.conf
5388:C 19 June 23:09:44.115 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
5388:C 19 June 23:09:44.115 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=5388, just started
5388:C 19 June 23:09:44.115 # Configuration loaded
Redis默认端口6379,经过当前服务进行查看安全
[root@node21 redis-4.0.10]# ps -ef |grep redis
root 5356 1 0 22:47 ? 00:00:02 bin/redis-server *:6379
root 5391 5364 0 23:12 pts/1 00:00:00 grep --color=auto -i redis
[root@node21 redis-4.0.10]# ./bin/redis-cli -h 192.168.100.21 -p 6379 192.168.100.21:6379>
redis-cli连上redis服务后,能够在命令行发送命令 ping,测试客户端和Redis的链接是否正常,若是链接正常会收到回复pong。ruby
192.168.100.21:6379> ping
PONG
强制终止Redis进程可能会致使redis持久化数据丢失bash
[root@node21 redis-4.0.10]# kill -9 5336 #pid须要经过‘ps -aux |grep redis’ 进行查询
正确中止Redis链接方式应向redis发送shutdown指令(关闭默认端口)服务器
[root@node21 redis-4.0.10]# redis-cli -h 192.168.100.21 -p 6379 shutdown
[root@node21 redis-4.0.10]# cd utils/ [root@node21 utils]# ./install_server.sh
查看服务运行状态
[root@node21 utils]# service redis_6379 status
中止Redis服务
[root@node21 admin]# service redis_6379 stop
右侧是官网文档(Redis集群规范) http://redis.io/topics/cluster-spec
右侧是上文连接的翻译文档 http://redisdoc.com/topic/cluster-spec.html#cluster-spec
此处的集群指的是Cluster, 经过分区/分片来实现必定程度的分布式与高可用部署。
Redis 最小集群规划,须要包含至少三个主节点,此处测试部署具备三个主服务器和三个从服务器的六节点群集。计划是在一台机器上模拟一个集群,主节点端口7000,7001,7002, 从节点7003,7004,7005,这和生产环境的集群搭建没本质区别。
建立一个新目录以及redis实例已端口号命名的如下目录
[root@node21 module]# mkdir redis-Cluster [root@node21 module]# cd redis-Cluster [root@node21 redis-Cluster]# mkdir 7000 7001 7002 7003 7004 7005
在每一个节点目录中建立一个文件redis.conf,从7000到7005.做为配置文件的模板,如下是最小的Redis群集配置文件,每一个节点实例配置稍做修改
[root@node21 redis-Cluster]# cd 7000 [root@node21 7000]# vi redis.conf port 7000 #端口7000,7001,7002,7003,7004,7005 cluster-enabled yes #开启集群 cluster-config-file nodes.conf #集群配置信息,开启集群后自动生成 cluster-node-timeout 5000 #请求超时时长 appendonly yes #开启aof日志,它会每次写操做都记录一条日志 daemonize yes #redis后台运行 bind 192.168.100.21 #默认ip为127.0.0.1 须要改成其余节点机器可访问的ip 不然建立集群时没法访问对应的端口,没法建立集群
pidfile /opt/module/redis-Cluster/7000/redis_7000.pid #pidfile文件对应7000,7001,7002,7003,7004,7005
dir /opt/module/redis-Cluster/7000/ #数据文件存放位置对应7000,7001,7002,7003,7004,7005
分别启动6个实例,可执行文件redis-server用以前单机版的,已配过环境变量
[root@node21 redis-Cluster]# redis-server 7000/redis.conf [root@node21 redis-Cluster]# redis-server 7001/redis.conf [root@node21 redis-Cluster]# redis-server 7002/redis.conf [root@node21 redis-Cluster]# redis-server 7003/redis.conf [root@node21 redis-Cluster]# redis-server 7004/redis.conf [root@node21 redis-Cluster]# redis-server 7005/redis.conf
6台实例运行起来后,查看进程,下一步建立集群
[root@node21 redis-Cluster]# ps -ef |grep redis root 9240 1 0 18:11 ? 00:00:00 redis-server 192.168.100.21:7000 [cluster] root 9245 1 0 18:11 ? 00:00:01 redis-server 192.168.100.21:7001 [cluster] root 9265 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7002 [cluster] root 9270 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7003 [cluster] root 9275 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7004 [cluster] root 9280 1 0 18:14 ? 00:00:00 redis-server 192.168.100.21:7005 [cluster]
redis安装目录src中redis-trib.rb完成集群建立,redis-trib.rb命令须要安装gem redis模块才能运行,gem redis须要Ruby环境
[root@node21 redis-Cluster]# yum install ruby rubygems -y [root@node21 redis-Cluster]# gem install redis
建立新集群命令:命令create,选项--replicas 1
意味着咱们但愿每一个建立的主服务器都有一个从服 其余参数是我要用于建立新集群的实例的地址列表。
[root@node21 src]# pwd /opt/module/redis-4.0.10/src [root@node21 src]# ./redis-trib.rb create --replicas 1 192.168.100.21:7000 192.168.100.21:7001 192.168.100.21:7002 192.168.100.21:7003 192.168.100.21:7004 192.168.100.21:7005
建立命令运行界面以下,主要是分配主从和槽位数
>>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.100.21:7000 192.168.100.21:7001 192.168.100.21:7002 Adding replica 192.168.100.21:7004 to 192.168.100.21:7000 Adding replica 192.168.100.21:7005 to 192.168.100.21:7001 Adding replica 192.168.100.21:7003 to 192.168.100.21:7002 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: 2b2a9cab4591508e44290a1fd16781e5c9099010 192.168.100.21:7000 slots:0-5460 (5461 slots) master M: 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 192.168.100.21:7001 slots:5461-10922 (5462 slots) master M: 4728f1d7da089b6ec9c20f8c9907652536ee5804 192.168.100.21:7002 slots:10923-16383 (5461 slots) master S: 73f894c5ddca484f5b72fd7f1f08612e50681133 192.168.100.21:7003 replicates 4728f1d7da089b6ec9c20f8c9907652536ee5804 S: 7f09c99b30f16ed583f9e144c75e2bb065c0528d 192.168.100.21:7004 replicates 2b2a9cab4591508e44290a1fd16781e5c9099010 S: 23d31961a1ad249b4af1d9f7be6cf3abc1b82f0a 192.168.100.21:7005 replicates 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.. >>> Performing Cluster Check (using node 192.168.100.21:7000) M: 2b2a9cab4591508e44290a1fd16781e5c9099010 192.168.100.21:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 73f894c5ddca484f5b72fd7f1f08612e50681133 192.168.100.21:7003 slots: (0 slots) slave replicates 4728f1d7da089b6ec9c20f8c9907652536ee5804 S: 7f09c99b30f16ed583f9e144c75e2bb065c0528d 192.168.100.21:7004 slots: (0 slots) slave replicates 2b2a9cab4591508e44290a1fd16781e5c9099010 S: 23d31961a1ad249b4af1d9f7be6cf3abc1b82f0a 192.168.100.21:7005 slots: (0 slots) slave replicates 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 M: 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 192.168.100.21:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) M: 4728f1d7da089b6ec9c20f8c9907652536ee5804 192.168.100.21:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
集群客户端链接方式 redis-cli -c
[root@node21 redis-Cluster]# redis-cli -c -h 192.168.100.21 -p 7000 192.168.100.21:7000> set foo bar -> Redirected to slot [12182] located at 192.168.100.21:7002 OK 192.168.100.21:7002> get foo "bar" 192.168.100.21:7002> keys * 1) "foo" 192.168.100.21:7002> exit [root@node21 redis-Cluster]# redis-cli -c -h 192.168.100.21 -p 7000 192.168.100.21:7000> keys * (empty list or set) 192.168.100.21:7000> get foo -> Redirected to slot [12182] located at 192.168.100.21:7002 "bar" 192.168.100.21:7002>
不加-c会报错以下
[root@node21 redis-Cluster]# redis-cli -p 7000 192.168.100.21:7000> set foo bar (error) MOVED 12182 192.168.100.21:7002
咱们可使用如下命令识别集群并使其崩溃:
[root@node21 redis-Cluster]# redis-cli -h 192.168.100.21 -p 7000 cluster nodes | grep master 2b2a9cab4591508e44290a1fd16781e5c9099010 192.168.100.21:7000@17000 myself,master - 0 1532157916000 1 connected 0-5460 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 192.168.100.21:7001@17001 master - 0 1532157917389 2 connected 5461-10922 4728f1d7da089b6ec9c20f8c9907652536ee5804 192.168.100.21:7002@17002 master - 0 1532157917000 3 connected 10923-16383
如上,7000,7001和7002都是主服。让咱们使用DEBUG SEGFAULT命令崩溃节点7002 :
[root@node21 redis-Cluster]# redis-cli -h 192.168.100.21 -p 7002 debug segfault Error: Server closed the connection
7002的从服7003节点部分日志信息以下
8417:S 21 Jul 13:51:43.245 * Background AOF rewrite finished successfully 8417:S 21 Jul 15:27:45.370 # Connection with master lost. 8417:S 21 Jul 15:27:45.371 * Caching the disconnected master state. 8417:S 21 Jul 15:27:45.595 * Connecting to MASTER 192.168.100.21:7002 8417:S 21 Jul 15:27:45.595 * MASTER <-> SLAVE sync started 8417:S 21 Jul 15:27:45.595 # Error condition on socket for SYNC: Connection refused 8417:S 21 Jul 15:27:46.604 * Connecting to MASTER 192.168.100.21:7002 8417:S 21 Jul 15:27:46.605 * MASTER <-> SLAVE sync started 8417:S 21 Jul 15:27:46.605 # Error condition on socket for SYNC: Connection refused 8417:S 21 Jul 15:27:47.999 * Connecting to MASTER 192.168.100.21:7002 8417:S 21 Jul 15:27:47.999 * MASTER <-> SLAVE sync started 8417:S 21 Jul 15:27:47.999 # Error condition on socket for SYNC: Connection refused 8417:S 21 Jul 15:27:49.008 * Connecting to MASTER 192.168.100.21:7002 8417:S 21 Jul 15:27:49.008 * MASTER <-> SLAVE sync started 8417:S 21 Jul 15:27:49.008 # Error condition on socket for SYNC: Connection refused 8417:S 21 Jul 15:27:50.023 * Connecting to MASTER 192.168.100.21:7002 8417:S 21 Jul 15:27:50.023 * MASTER <-> SLAVE sync started 8417:S 21 Jul 15:27:50.024 # Error condition on socket for SYNC: Connection refused 8417:S 21 Jul 15:27:51.032 * FAIL message received from 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 about 4728f1d7da089b6ec9c20f8c9907652536ee5804 8417:S 21 Jul 15:27:51.032 * Connecting to MASTER 192.168.100.21:7002 8417:S 21 Jul 15:27:51.032 * MASTER <-> SLAVE sync started 8417:S 21 Jul 15:27:51.032 # Start of election delayed for 699 milliseconds (rank #0, offset 7992). 8417:S 21 Jul 15:27:51.032 # Cluster state changed: fail 8417:S 21 Jul 15:27:51.033 # Error condition on socket for SYNC: Connection refused 8417:S 21 Jul 15:27:51.738 # Starting a failover election for epoch 7. 8417:S 21 Jul 15:27:51.749 # Failover election won: I'm the new master. 8417:S 21 Jul 15:27:51.750 # configEpoch set to 7 after successful failover 8417:M 21 Jul 15:27:51.750 # Setting secondary replication ID to 8ef669a5f5a6e6efafed75005ca9426d539c4c47, valid up to offset: 7993. New replication ID is bec5f6f31031 1deaa4aff371b7244cd131f594fe8417:M 21 Jul 15:27:51.750 * Discarding previously cached master state. 8417:M 21 Jul 15:27:51.750 # Cluster state changed: ok
客户端测试:7002的数据自动跳转到7003上
[root@node21 redis-Cluster]# redis-cli -c -h 192.168.100.21 -p 7000 192.168.100.21:7000> get foo -> Redirected to slot [12182] located at 192.168.100.21:7003 "bar" 192.168.100.21:7003>
查看集群节点状态
[root@node21 redis-Cluster]# redis-cli -h 192.168.100.21 -p 7000 cluster nodes 2b2a9cab4591508e44290a1fd16781e5c9099010 192.168.100.21:7000@17000 myself,master - 0 1532158988000 1 connected 0-5460 73f894c5ddca484f5b72fd7f1f08612e50681133 192.168.100.21:7003@17003 master - 0 1532158987255 7 connected 10923-16383 7f09c99b30f16ed583f9e144c75e2bb065c0528d 192.168.100.21:7004@17004 slave 2b2a9cab4591508e44290a1fd16781e5c9099010 0 1532158987558 5 connected 23d31961a1ad249b4af1d9f7be6cf3abc1b82f0a 192.168.100.21:7005@17005 slave 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 0 1532158988769 6 connected 69d97b0c7c3c1587f0e4ed0abb82c01fa66a5478 192.168.100.21:7001@17001 master - 0 1532158987558 2 connected 5461-10922 4728f1d7da089b6ec9c20f8c9907652536ee5804 192.168.100.21:7002@17002 master,fail - 1532158065392 1532158064562 3 disconnected
7002再启动,又成为集群中的从服。
使用add-node命令将新节点的地址指定为第一个参数,并将集群中随机存在节点的地址指定为第二个参数,redis-trib在运行以前也会检查集群的状态。
# ./redis-trib.rb add-node 192.168.100.21:7006 192.168.100.21:7000
当添加新节点为主节点时,
如今可使用resharding功能为此节点分配哈希槽redis-trib
,从新分区,具体参考官方文档,这里不详述了。
添加新副本分配给指定的主副本
./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 192.168.100.21:7006 192.168.100.21:7000
解决gem install redis 由于网络问题形成链接超时的问题,把gem镜像换成国内淘宝的
[root@node21 redis-Cluster]# gem sources -l *** CURRENT SOURCES *** https://rubygems.org/ [root@node21 redis-Cluster]# gem sources --remove https://rubygems.org/ https://rubygems.org/ removed from sources [root@node21 redis-Cluster]# gem sources -a https://ruby.taobao.org/ https://ruby.taobao.org/ added to sources [root@node21 redis-Cluster]# gem sources -l *** CURRENT SOURCES *** https://ruby.taobao.org/
[root@node21 redis-Cluster]# gem install redis Fetching: redis-4.0.1.gem (100%) ERROR: Error installing redis: redis requires Ruby version >= 2.2.2.
我这里CentOS7.5默认安装的Ruby版本为2.0,需升级为2.2.2以上(ruby -v),先安装RVM,用RVM升级Ruby
1、sudo yum install curl 安装curl 2、http://www.rvm.io/ 官网首页就能够看到 $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 3、下载rvm $ \curl -sSL https://get.rvm.io | bash -s stable 4、查找配置文件 find / -name rvm.sh 5、配置文件生效 source /etc/profile.d/rvm.sh 6、下载rvm依赖 rvm requirements 7、查看rvm库ruby版本 rvm list known 8、安装ruby指定版本 rvm install ruby-2.5.1 9、使用ruby版本默认 rvm use 2.5.1 default
10.gem install redis
集群数据不为空,Node 192.168.100.21:7001 is not empty
[root@node21 src]# ./redis-trib.rb create --replicas 1 192.168.100.21:7000 192.168.100.21:7001 192.168.100.21:7002 192.168.100.21:7003 192.168.100.21:7004 192.168.100. 21:7005>>> Creating cluster [ERR] Node 192.168.100.21:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
清空数据,在将每一个节点下aof、rdb、nodes.conf本地备份文件删除 ,从新建立便可成功
[root@node21 src]# redis-cli -h 192.168.100.21 -p 7001 192.168.100.21:7001> flushdb OK
Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf,配置项说明以下:
1. Redis默认不是以守护进程的方式运行,能够经过该配置项修改,使用yes启用守护进程
daemonize no
2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,能够经过pidfile指定
pidfile /var/run/redis.pid
3. 指定Redis监听端口,默认端口为6379,
port 6379
4. 绑定的主机地址
bind 127.0.0.1
5.当 客户端闲置多长时间后关闭链接,若是指定为0,表示关闭该功能
timeout 300
6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose
7. 日志记录方式,默认为标准输出,若是配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null
logfile stdout
8. 设置数据库的数量,默认数据库为0,可使用SELECT <dbid>命令在链接上指定数据库id
databases 16
9. 指定在多长时间内,有多少次更新操做,就将数据同步到数据文件,能够多个条件配合
save <seconds> <changes>
Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,若是为了节省CPU时间,能够关闭该选项,但会致使数据库文件变的巨大
rdbcompression yes
11. 指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
12. 指定本地数据库存放目录
dir ./
13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof <masterip> <masterport>
14. 当master服务设置了密码保护时,slav服务链接master的密码
masterauth <master-password>
15. 设置Redis链接密码,若是配置了链接密码,客户端在链接Redis时须要经过AUTH <password>命令提供密码,默认关闭
requirepass foobared
16. 设置同一时间最大客户端链接数,默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件描述符数,若是设置 maxclients 0,表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息
maxclients 128
17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将没法再进行写入操做,但仍然能够进行读取操做。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
maxmemory <bytes>
18. 指定是否在每次更新操做后进行日志记录,Redis在默认状况下是异步的把数据写入磁盘,若是不开启,可能会在断电时致使一段时间内的数据丢失。由于 redis自己同步数据文件是按上面save条件来同步的,因此有的数据会在一段时间内只存在于内存中。默认为no
appendonly no
19. 指定更新日志文件名,默认为appendonly.aof
appendfilename appendonly.aof
20. 指定更新日志条件,共有3个可选值:
no:表示等操做系统进行数据缓存同步到磁盘(快)
always:表示每次更新操做后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)
vm-enabled no
22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap
23. 将全部大于vm-max-memory的数据存入虚拟内存,不管vm-max-memory设置多小,全部索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,实际上是全部value都存在于磁盘。默认值为0
vm-max-memory 0
24. Redis swap文件分红了不少的page,一个对象能够保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,做者建议若是存储不少小对象,page大小最好设置为32或者64bytes;若是存储很大大对象,则可使用更大的page,若是不 肯定,就使用默认值
vm-page-size 32
25. 设置swap文件中的page数量,因为页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。
vm-pages 134217728
26. 设置访问swap文件的线程数,最好不要超过机器的核数,若是设置为0,那么全部对swap文件的操做都是串行的,可能会形成比较长时间的延迟。默认值为4
vm-max-threads 4
27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
glueoutputbuf yes
28. 指定在超过必定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)
activerehashing yes
30. 指定包含其它的配置文件,能够在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有本身的特定配置文件
include /path/to/local.conf