目录php
9、redis介绍
10、redis安装
11、redis持久化
12、redis数据类型
十3、redis经常使用操做
十4、redis操做键值
十5、redis安全设置
十6、redis慢查询日志
十7、php安装redis扩展
十8、redis存储session
十9、redis主从配置
二10、redis集群介绍
二11、redis集群搭建配置
二12、redis集群操做
二十3、扩展html
Redis和Memcached相似,也属于k-v数据存储。node
Redis官网redis.io, 截止于(2018-08-23)当前最新稳定版4.0.11。mysql
支持更多value类型,除了和string外,还支持hash、lists(链表)、sets(集合)和sorted sets(有序集合)linux
redis使用了两种文件格式:全量数据(RDB)和增量请求(aof)。全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。增量请求文件则是把内存中的数据序列化为操做请求,用于读取文件进行replay获得数据,这种相似于mysql binlog。nginx
redis的存储分为内存存储、磁盘存储和log文件三部分git
1.下载redis稳定安装包,当前最新4.0.11github
[root@lnmp-server src]# cd /usr/local/src/ [root@lnmp-server src]# wget http://download.redis.io/releases/redis-4.0.11.tar.gz --2018-08-23 21:23:11-- http://download.redis.io/releases/redis-4.0.11.tar.gz Resolving download.redis.io (download.redis.io)... 109.74.203.151 Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1739656 (1.7M) [application/x-gzip] Saving to: ‘redis-4.0.11.tar.gz’ 100%[==========================================>] 1,739,656 838KB/s in 2.0s 2018-08-23 21:23:14 (838 KB/s) - ‘redis-4.0.11.tar.gz’ saved [1739656/1739656]
2.解压软件包redis
[root@lnmp-server src]# tar -zxvf redis-4.0.11.tar.gz
3.编译安装sql
[root@lnmp-server src]# cd redis-4.0.11/ [root@lnmp-server redis-4.0.11]# make cd src && make all make[1]: Entering directory `/usr/local/src/redis-4.0.11/src' CC Makefile.dep make[1]: Leaving directory `/usr/local/src/redis-4.0.11/src' make[1]: Entering directory `/usr/local/src/redis-4.0.11/src' rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark ...中间略... Hint: It's a good idea to run 'make test' ;) make[1]: Leaving directory `/usr/local/src/redis-4.0.11/src' [root@lnmp-server redis-4.0.11]# make install cd src && make install make[1]: Entering directory `/usr/local/src/redis-4.0.11/src' CC Makefile.dep make[1]: Leaving directory `/usr/local/src/redis-4.0.11/src' make[1]: Entering directory `/usr/local/src/redis-4.0.11/src' Hint: It's a good idea to run 'make test' ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install make[1]: Leaving directory `/usr/local/src/redis-4.0.11/src'
4.新建配置文件
[root@lnmp-server redis-4.0.11]# cp redis.conf /etc/redis.conf [root@lnmp-server redis-4.0.11]# ls !$ ls /etc/redis.conf /etc/redis.conf
5.编辑配置文件
[root@lnmp-server redis-4.0.11]# vim /etc/redis.conf #修改以下配置 daemonize yes logfile "/var/log/redis.log" dir /data/redis_data/ appendonly yes [root@lnmp-server redis-4.0.11]# mkdir /data/redis_data #内核优化参数,添加到/etc/rc.local [root@lnmp-server redis-4.0.11]# vim /etc/rc.local #redis optimize parameter sysctl vm.overcommit_memory=1 echo never > /sys/kernel/mm/transparent_hugepage/enabled #须要给/etc/rc.d/rc.local赋予执行权限。不然,/etc/rc.local中的任务没法执行 [root@lnmp-server redis-4.0.11]# ls -l /etc/rc.local lrwxrwxrwx. 1 root root 13 Apr 20 23:18 /etc/rc.local -> rc.d/rc.local [root@lnmp-server redis-4.0.11]# chmod a+x /etc/rc.d/rc.local [root@lnmp-server redis-4.0.11]# ls -l !$ ls -l /etc/rc.d/rc.local -rwxr-xr-x. 1 root root 587 Aug 23 21:53 /etc/rc.d/rc.local
6.启动redis并验证
[root@lnmp-server redis-4.0.11]# redis-server /etc/redis.conf [root@lnmp-server redis-4.0.11]# ps aux | grep redis root 4914 0.1 0.2 145264 2180 ? Ssl 21:57 0:00 redis-server 127.0.0.1:6379 root 4919 0.0 0.0 112660 972 pts/0 S+ 21:58 0:00 grep --color=auto redis
Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)
RDB,简而言之,就是在不一样的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
RDB主要受配置文件中的如下几项影响
# save "" # save 900 1 表示每15分钟且至少有1个key改变,就触发一次持久化 save 900 1 # save 300 10 表示每5分钟且至少有10个key改变,就触发一次持久化 save 300 10 # save 60 10000 表示每60秒至少有10000个key改变,就触发一次持久 save 60 10000 # 注释其余三项,取消注释 # save "",这样能够禁用rdb持久化
AOF,则是换了一个角度来实现持久化,那就是将redis执行过的全部写指令记录下来,在下次redis从新启动时,只要把这些写指令从前到后再重复执行一遍,就能够实现数据恢复了。
AOF主要受配置文件中的如下几项影响
#若是是yes,则开启aof持久化 appendonly yes # 指定aof文件名字 appendfilename "appendonly.aof" #指定fsync()调用模式,有三种no(不调用fsync),always(每次写都会调用fsync),everysec(每秒钟调用一次fsync)。第一种最快,第二种数据最安全,但性能会差一些,第三种为这种方案,默认为第三种。 # appendfsync always appendfsync everysec # appendfsync no
其实RDB和AOF两种方式也能够同时使用,在这种状况下,若是redis重启的话,则会优先采用AOF方式来进行数据恢复,这是由于AOF方式的数据恢复完整度更高。
若是你没有数据持久化的需求,也彻底能够关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache同样。
1.Redis数据类型-string
string为最简单的类型,与Memcached同样的类型,一个key对应一个value,其支持的操做与Memcached的操做相似,它的功能更丰富。设置能够存二进制的对象。
简单演示
[root@lnmp-server redis-4.0.11]# redis-cli 127.0.0.1:6379> set mykey "kennminn.net" OK 127.0.0.1:6379> get mykey "kennminn.net" # 批量设置key 127.0.0.1:6379> mset k1 a k2 b k3 c OK 127.0.0.1:6379> mget k1 k2 k3 1) "a" 2) "b" 3) "c" 127.0.0.1:6379>
2.Redis数据类型-list
list是一个链表结构,主要功能是push、pop、获取一个范围的全部值等等。操做中key理解为链表的名字。
使用 list 结构,咱们能够轻松地实现最新消息排行等功能(好比新浪微博的 TimeLine )。list 的另外一个应用就是消息队列,能够利用list的push操做,将任务存在list中,而后工做线程再用pop操做将任务取出进行执行。
简单演示
127.0.0.1:6379> LPUSH list1 "kennminn" (integer) 1 127.0.0.1:6379> LPUSH list1 "1 2 3" (integer) 2 127.0.0.1:6379> LPUSH list1 "huannan huaihua" (integer) 3 127.0.0.1:6379> LRANGE list1 0 10 1) "huannan huaihua" 2) "1 2 3" 3) "kennminn" 127.0.0.1:6379> LPOP list1 "huannan huaihua" 127.0.0.1:6379> LPOP list1 "1 2 3" 127.0.0.1:6379> LPOP list1 "kennminn" 127.0.0.1:6379> LPOP list1 (nil) 127.0.0.1:6379>
3.Redis数据类型-set
set是集合,和咱们数学中的集合概念类似,对集合的操做有添加删除元素,有对多个集合求交并差等操做。操做中key理解为集合的名字。好比在微博应用中,能够将一个用户全部的关注人存在一个集合中,将其全部粉丝存在一个集合。由于 Redis 很是人性化的为集合提供了求交集、并集、差集等操做,那么就能够很是方便的实现如共同关注、共同喜爱、二度好友等功能,对上面的全部集合操做,你还可使用不一样的命令选择将结果返回给客户端仍是存集到一个新的集合中。
简单演示
# set1添加元素 127.0.0.1:6379> SADD set1 aa (integer) 1 127.0.0.1:6379> SADD set1 bb (integer) 1 127.0.0.1:6379> SADD set1 cc (integer) 1 127.0.0.1:6379> SADD set1 dd (integer) 1 # set1的元素 127.0.0.1:6379> SMEMBERS set1 1) "bb" 2) "dd" 3) "cc" 4) "aa" # 从set1删除aa元素 127.0.0.1:6379> SREM set1 aa (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "bb" 2) "dd" 3) "cc" # 添加set2 127.0.0.1:6379> SADD set2 a1 2 bb (integer) 3 127.0.0.1:6379> SMEMBERS set2 1) "2" 2) "bb" 3) "a1" # 取set1和set2的交集 127.0.0.1:6379> SINTER set1 set2 1) "bb" # 取set1和set2的并集 127.0.0.1:6379> SUNION set1 set2 1) "bb" 2) "cc" 3) "dd" 4) "2" 5) "a1" # 取set1和set2的差集 127.0.0.1:6379> SDIFF set1 set2 1) "cc" 2) "dd" 127.0.0.1:6379>
4.Redis数据类型-sort set
sorted set是有序集合,它比set多了一个权重参数score,使得集合中的元素可以按 score 进行有序排列,好比一个存储全班同窗成绩的 Sorted Sets,其集合 value 能够是同窗的学号,而 score 就能够是其考试得分,这样在数据插入集合的时候,就已经进行了自然的排序。
简单演示
127.0.0.1:6379> ZADD set3 12 abc (integer) 1 127.0.0.1:6379> ZADD set3 2 "guanzhou" (integer) 1 127.0.0.1:6379> ZADD set3 10 "shenzhen" (integer) 1 127.0.0.1:6379> ZADD set3 11 "huizhou" (integer) 1 127.0.0.1:6379> ZRANGE set3 0 -1 1) "guanzhou" 2) "shenzhen" 3) "huizhou" 4) "abc" # 反序 127.0.0.1:6379> Zrevrange set3 0 -1 1) "abc" 2) "huizhou" 3) "shenzhen" 4) "guanzhou" 127.0.0.1:6379>
5.Redis数据类型-hash
在 Memcached 中,咱们常常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(通常是 JSON 格式),好比用户的昵称、年龄、性别、积分等。
127.0.0.1:6379> hset h1 name nico (integer) 1 127.0.0.1:6379> hget h1 name "nico" 127.0.0.1:6379> hset h1 age 6 (integer) 1 127.0.0.1:6379> hget h1 age "6" 127.0.0.1:6379> hgetall h1 1) "name" 2) "nico" 3) "age" 4) "6" 127.0.0.1:6379>
1.Redis经常使用操做 (string, list)
127.0.0.1:6379> set k1 nico OK 127.0.0.1:6379> get k1 "nico" # 再次赋值会覆盖原来的值 127.0.0.1:6379> set k1 aliva OK 127.0.0.1:6379> get k1 "aliva" # 若是key存在,返回0 127.0.0.1:6379> setnx k1 kennminn (integer) 0 127.0.0.1:6379> setnx k3 kennminn (integer) 0 # 若是不存在,则返回1并建立相应元素 127.0.0.1:6379> setnx k4 kennminn (integer) 1 # 给元素设置过时时间 127.0.0.1:6379> setex k5 5 aaaa OK # 5s之后再次查k5的值 127.0.0.1:6379> get k5 (nil) # mset一次设置多个元素 127.0.0.1:6379> mset key1 111 key2 222 key3 333 OK 127.0.0.1:6379> mget kye1 key2 key3 1) (nil) 2) "222" 3) "333" 127.0.0.1:6379> LPUSH list_a 1 (integer) 1 127.0.0.1:6379> LPUSH list_a 2 (integer) 2 127.0.0.1:6379> LRANGE list_a 0 -1 1) "2" 2) "1" 127.0.0.1:6379> LPOP list_a "2" 127.0.0.1:6379> RPUSH list_a 3 (integer) 2 127.0.0.1:6379> LRANGE list_a 0 -1 1) "1" 2) "3" 127.0.0.1:6379> rpop list_a "3" 127.0.0.1:6379>
2.Redis经常使用操做(list, set)
127.0.0.1:6379> LRANGE list_a 0 -1 1) "1" # 元素值为1的前面增长元素0 127.0.0.1:6379> LINSERT list_a before 1 0 (integer) 2 127.0.0.1:6379> LRANGE list_a 0 -1 1) "0" 2) "1" # 第二行元素的值赋值为aaa 127.0.0.1:6379> lset list_a 1 aaa OK 127.0.0.1:6379> LRANGE list_a 0 -1 1) "0" 2) "aaa" 127.0.0.1:6379> LINDEX list_a 0 "0" 127.0.0.1:6379> LLEN list_a (integer) 2 127.0.0.1:6379> SADD set_a aaa (integer) 1 127.0.0.1:6379> SMEMBERS set_a 1) "aaa" 127.0.0.1:6379> SREM set_a aaa (integer) 1 127.0.0.1:6379> SMEMBERS set_a (empty list or set) 127.0.0.1:6379> SADD set_a 111 (integer) 1 127.0.0.1:6379> SADD set_a 222 (integer) 1 127.0.0.1:6379> SADD set_a 333 (integer) 1 127.0.0.1:6379> SADD set_a 444 (integer) 1 127.0.0.1:6379> SADD set_a 555 (integer) 1 127.0.0.1:6379> SMEMBERS set_a 1) "111" 2) "222" 3) "333" 4) "444" 5) "555" 127.0.0.1:6379> SPOP set_a "111" 127.0.0.1:6379> SMEMBERS set_a 1) "222" 2) "333" 3) "444" 4) "555" 127.0.0.1:6379> SADD set_b 333 (integer) 1 127.0.0.1:6379> SADD set_b 444 (integer) 1 127.0.0.1:6379> SADD set_b aaa (integer) 1 127.0.0.1:6379> SADD set_b bbb (integer) 1 127.0.0.1:6379> SDIFF set_a set_b 1) "222" 2) "555" 127.0.0.1:6379> SDIFFSTORE set_c set_a set_b (integer) 2 127.0.0.1:6379> SMEMBERS set_c 1) "222" 2) "555" 127.0.0.1:6379> SINTER set_a set_b 1) "333" 2) "444" 127.0.0.1:6379> SINTERSTORE set_d set_a set_b (integer) 2 127.0.0.1:6379> SMEMBERS set_d 1) "333" 2) "444" 127.0.0.1:6379> SUNION set_a set_b 1) "222" 2) "333" 3) "444" 4) "aaa" 5) "bbb" 6) "555" 127.0.0.1:6379> SUNIONSTORE set_e set_a set_b (integer) 6 127.0.0.1:6379> SMEMBERS set_e 1) "222" 2) "333" 3) "444" 4) "aaa" 5) "bbb" 6) "555" 127.0.0.1:6379>
3.Redis经常使用操做(set, zset)
127.0.0.1:6379> SMEMBERS set_e 1) "222" 2) "333" 3) "444" 4) "aaa" 5) "bbb" 6) "555" 127.0.0.1:6379> 127.0.0.1:6379> SMEMBERS set_a 1) "222" 2) "333" 3) "444" 4) "555" # 判断一个元素是否属于集合set_a 127.0.0.1:6379> SISMEMBER set_a 222 (integer) 1 127.0.0.1:6379> SISMEMBER set_a 111 (integer) 0 # 随机取出一个元素,但不删除 127.0.0.1:6379> SRANDMEMBER set_a "222" 127.0.0.1:6379> ZADD zset_a 11 aaaa (integer) 1 # 按顺序显示全部元素 127.0.0.1:6379> ZRANGE zset_a 0 -1 1) "aaaa" # 带分值按顺序显示全部元素 127.0.0.1:6379> ZRANGE zset_a 0 -1 withscores 1) "aaaa" 2) "11" # 删除指定元素 127.0.0.1:6379> ZREM zset_a 11 (integer) 0 # 返回元素的索引值,索引从0开始,按分值正序 127.0.0.1:6379> ZRANK zset_a aaaa (integer) 0 127.0.0.1:6379> ZADD zset_a 13 2345 (integer) 1 127.0.0.1:6379> ZADD zset_a 9 bb2345 (integer) 1 127.0.0.1:6379> ZRANGE zset_a 0 -1 1) "bb2345" 2) "aaaa" 3) "2345" 127.0.0.1:6379> ZRANk zset_a aaaa (integer) 1 127.0.0.1:6379> ZREVRANGE zset_a 0 -1 1) "2345" 2) "aaaa" 3) "bb2345" # 返回集合中元素的个数 127.0.0.1:6379> ZCARD zset_a (integer) 3 # 返回分值范围1-10之间的元素 127.0.0.1:6379> ZCOUNT zset_a 1 10 (integer) 1 127.0.0.1:6379> ZRANGEBYSCORE zset_a 0 2 (empty list or set) 127.0.0.1:6379> ZADD zset_a 12 aaa (integer) 1 127.0.0.1:6379> ZADD zset_a 13 bbb (integer) 1 127.0.0.1:6379> ZREMRANGEBYSCORE zset_a 1 10 (integer) 1 127.0.0.1:6379>
4.Redis经常使用操做(hash)
# 新建hash 127.0.0.1:6379> hset user1 name aming (integer) 0 127.0.0.1:6379> hset user1 age 30 (integer) 0 127.0.0.1:6379> hset user1 job it (integer) 0 127.0.0.1:6379> hgetall user1 1) "name" 2) "aming" 3) "age" 4) "30" 5) "job" 6) "it" # 批量添加键值对 127.0.0.1:6379> hmset user2 name aming age 30 job it OK 127.0.0.1:6379> hmget user2 name age job 1) "aming" 2) "30" 3) (nil) # 删除指定键 127.0.0.1:6379> hdel user2 age (integer) 1 # 打印打有键 127.0.0.1:6379> HKEYS user2 1) "name" 2) "job" # 打印全部值 127.0.0.1:6379> HVALS user2 1) "aming" 2) "it" # 查看hash有几个field 127.0.0.1:6379> HLEN user2 (integer) 2 127.0.0.1:6379>
# 取出全部key 127.0.0.1:6379> keys * 1) "set_c" 2) "k3" 3) "set_b" 4) "k2" 5) "k1" 6) "key2" 7) "set_a" 8) "user2" 9) "set1" 10) "k4" 11) "set_e" 12) "set_d" 13) "key3" 14) "h1" 15) "list1" 16) "user1" 17) "list_a" 18) "zset_a" 19) "key1" 20) "mykey" 21) "set3" 22) "set2" # 模糊匹配 127.0.0.1:6379> keys k* 1) "k3" 2) "k2" 3) "k1" 4) "key2" 5) "k4" 6) "key3" 7) "key1" # 有name为set1的集合,返回1,没有返回0 127.0.0.1:6379> EXISTS set1 (integer) 1 127.0.0.1:6379> EXISTS aaaa (integer) 0 # 删除一个key,成功为1,不成功返回0 127.0.0.1:6379> del set1 (integer) 1 # 设置key的超时时间 127.0.0.1:6379> EXPIRE k2 5 (integer) 1 # 查看键 还有多长时间过时,单位是s,当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 不然,返回 key 的剩余生存时间。 127.0.0.1:6379> ttl k2 (integer) -2 127.0.0.1:6379> expire k3 100 (integer) 1 127.0.0.1:6379> ttl k3 (integer) 94 127.0.0.1:6379> # 表明选择当前数据库,默认进入0 数据库 127.0.0.1:6379> select 0 OK # 把age 移动到1 数据库, 当前因数据库1不存在, 移动不成功 127.0.0.1:6379> MOVE age 1 (integer) 0 # 取消key3的过时时间 127.0.0.1:6379> expire key3 100 (integer) 1 127.0.0.1:6379> persist key3 (integer) 1 # 随机地返回key 127.0.0.1:6379> randomkey "key3" # 重命名key 127.0.0.1:6379> rename key3 key4 OK # 查看key的类型 127.0.0.1:6379> type key4 string # 返回当前数据库中key的数目 127.0.0.1:6379> dbsize (integer) 19 # 返回数据库的状态信息 127.0.0.1:6379> info # Server redis_version:4.0.11 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:379f2baee845925 redis_mode:standalone os:Linux 3.10.0-693.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:4.8.5 process_id:4914 run_id:98e0aafbc301473e5cd79d449aff2b8b656b33e9 tcp_port:6379 uptime_in_seconds:40854 uptime_in_days:0 hz:10 lru_clock:8346862 executable:/usr/local/src/redis-4.0.11/redis-server config_file:/etc/redis.conf # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:851128 used_memory_human:831.18K used_memory_rss:2510848 used_memory_rss_human:2.39M used_memory_peak:851128 used_memory_peak_human:831.18K used_memory_peak_perc:100.07% used_memory_overhead:837262 used_memory_startup:786584 used_memory_dataset:13866 used_memory_dataset_perc:21.48% total_system_memory:1023713280 total_system_memory_human:976.29M used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:2.95 mem_allocator:jemalloc-4.0.3 active_defrag_running:0 lazyfree_pending_objects:0 # Persistence loading:0 rdb_changes_since_last_save:5 rdb_bgsave_in_progress:0 rdb_last_save_time:1535072813 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:348160 aof_enabled:1 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok aof_last_cow_size:0 aof_current_size:3081 aof_base_size:0 aof_pending_rewrite:0 aof_buffer_length:0 aof_rewrite_buffer_length:0 aof_pending_bio_fsync:0 aof_delayed_fsync:0 # Stats total_connections_received:3 total_commands_processed:166 instantaneous_ops_per_sec:0 total_net_input_bytes:6218 total_net_output_bytes:33240 instantaneous_input_kbps:0.00 instantaneous_output_kbps:0.00 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:3 expired_stale_perc:0.00 expired_time_cap_reached_count:0 evicted_keys:0 keyspace_hits:75 keyspace_misses:13 pubsub_channels:0 pubsub_patterns:0 latest_fork_usec:302 migrate_cached_sockets:0 slave_expires_tracked_keys:0 active_defrag_hits:0 active_defrag_misses:0 active_defrag_key_hits:0 active_defrag_key_misses:0 # Replication role:master connected_slaves:0 master_replid:a6c48034ad413a880216a547ea633dd19acf1042 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # CPU used_cpu_sys:34.93 used_cpu_user:26.09 used_cpu_sys_children:0.02 used_cpu_user_children:0.01 # Cluster cluster_enabled:0 # Keyspace db0:keys=19,expires=0,avg_ttl=0 127.0.0.1:6379> # 清空当前数据库的全部key 127.0.0.1:6379> flushdb # 清空全部数据库的全部key 127.0.0.1:6379> flushall # 保存数据到 rdb文件中,在后台运行 127.0.0.1:6379> BGSAVE Background saving started # 保存数据到rdb文件中,在前台运行 127.0.0.1:6379> save # 获取全部配置参数 127.0.0.1:6379> config get * # 获取配置参数 127.0.0.1:6379> config get dir 1) "dir" 2) "/data/redis_data" # 更改配置参数 config set dir 值 # 数据恢复: 首先定义或者肯定dir目录和dbfilename,而后把备份的rdb文件放到dir目录下面,重启redis服务便可恢复数据
1.设置监听ip
[root@lnmp-server redis-4.0.11]# vim /etc/redis.conf # 修改成信任的ip,能够是多个ip,用空格分隔 # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1
# 可将默认端口修改成其余不知名端口高端口 # port 6379 port 16000
3.设置密码
# 可取消此句注释,并设置密码为123456 # requirepass foobared requirepass 123456
4.将config命令更名
# security of read only slaves using 'rename-command' to shadow all the # administrative / dangerous commands. # 添加此行 # 若是想禁用config命令,能够添加此行,可是将重命名的命令设置为空 # rename-command CONFIG "" rename-command config aming slave-read-only yes
5.验证
# 关闭redis [root@lnmp-server redis-4.0.11]# redis-cli shutdown 5750:M 24 Aug 09:52:45.308 # User requested shutdown... 5750:M 24 Aug 09:52:45.308 * Saving the final RDB snapshot before exiting. 5750:M 24 Aug 09:52:45.310 * DB saved on disk 5750:M 24 Aug 09:52:45.310 * Removing the pid file. 5750:M 24 Aug 09:52:45.310 # Redis is now ready to exit, bye bye... # 启动redis [root@lnmp-server redis-4.0.11]# redis-server /etc/redis.conf [root@lnmp-server redis-4.0.11]# netstat -nltup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1152/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1096/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1230/master tcp 0 0 127.0.0.1:16000 0.0.0.0:* LISTEN 5765/redis-server 1 tcp6 0 0 :::22 :::* LISTEN 1096/sshd tcp6 0 0 ::1:25 :::* LISTEN 1230/master tcp6 0 0 :::3306 :::* LISTEN 1367/mysqld udp 0 0 127.0.0.1:323 0.0.0.0:* 696/chronyd udp6 0 0 ::1:323 :::* 696/chronyd [root@lnmp-server redis-4.0.11]# redis-cli -a 123456 -p 16000 Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:16000> keys * 1) "user1" 2) "set_e" 3) "key1" 4) "k1" 5) "list_a" 6) "set_a" 7) "set_c" 8) "key2" 9) "list1" 10) "set3" 11) "set_b" 12) "set_d" 13) "key4" 14) "user2" 15) "k4" 16) "h1" 17) "set2" 18) "zset_a" 19) "mykey" 127.0.0.1:16000> CONFIG GET dir (error) ERR unknown command `CONFIG`, with args beginning with: `GET`, `dir`, 127.0.0.1:16000> aming get dir 1) "dir" 2) "/data/redis_data"
编辑/etc/redis.conf
[root@lnmp-server redis-4.0.11]# vim /etc/redis.conf # 针对慢查询日志,能够设置两个参数,一个是执行时长,单位是微秒,另外一个是慢查询日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。 # 默认慢查询日志已经开启 # a value of zero forces the logging of every command. # 单位ms,表示慢于10000ms则记录日志 slowlog-log-slower-than 10000 # There is no limit to this length. Just be aware that it will consume memory. # You can reclaim memory used by the slow log with SLOWLOG RESET. # 定义日志长度,表示最多存128条 slowlog-max-len 128
slowlog相关的命令
# 列出全部的慢查询日志 slowlog get # 只列出2条 slowlog get 2 # 查看慢查询日志条数 slowlog len
1.下载redis的php扩展
[root@lnmp-server redis-4.0.11]# cd /usr/local/src/ [root@lnmp-server redis-4.0.11]# cd /usr/local/src/ [root@lnmp-server src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop --2018-08-24 10:19:53-- https://codeload.github.com/phpredis/phpredis/zip/develop Resolving codeload.github.com (codeload.github.com)... 54.251.140.56, 13.229.189.0, 13.250.162.133 Connecting to codeload.github.com (codeload.github.com)|54.251.140.56|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘develop’ [ <=> ] 240,041 402KB/s in 0.6s 2018-08-24 10:19:55 (402 KB/s) - ‘develop’ saved [240041] [root@lnmp-server src]# mv develop phpredis-develop.zip
2.解压软件包
[root@lnmp-server src]# unzip phpredis-develop.zip Archive: phpredis-develop.zip 1d997873750e5fdef1fe368b5296f4427dab3ea0 creating: phpredis-develop/ ...中间略... inflating: phpredis-develop/tests/regenerateSessionId.php inflating: phpredis-develop/tests/startSession.php
3.配置
[root@lnmp-server src]# cd phpredis-develop/ [root@lnmp-server phpredis-develop]# /usr/local/php-fpm/bin/phpize Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226
4.配置、编译安装
[root@lnmp-server phpredis-develop]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for a sed that does not truncate output... /usr/bin/sed ...中间略... creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h [root@lnmp-server phpredis-develop]# make /bin/sh /usr/local/src/phpredis-develop/libtool --mode=compile cc -I. -I/usr/local/src/phpredis-develop -DPHP_ATOM_INC -I/usr/local/src/phpredis-develop/include -I/usr/local/src/phpredis-develop/main -I/usr/local/src/phpredis-develop -I/usr/local/php-fpm/include/php -I/usr/local/php-fpm/include/php/main -I/usr/local/php-fpm/include/php/TSRM -I/usr/local/php-fpm/include/php/Zend -I/usr/local/php-fpm/include/php/ext -I/usr/local/php-fpm/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /usr/local/src/phpredis-develop/redis.c -o redis.lo ...中间略... See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- Build complete. Don't forget to run 'make test'. [root@lnmp-server phpredis-develop]# make install Installing shared extensions: /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
5.配置/usr/local/php-fpm/etc/php.ini
/usr/local/php-fpm/etc/php.ini # 添加下行 extension=redis.so [root@lnmp-server phpredis-develop]# /usr/local/php-fpm/sbin/php-fpm -m | grep redis redis # 重启php-fpm [root@lnmp-server phpredis-develop]# /etc/init.d/php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done
1.修改php-fpm主配置文件
vim /usr/local/php-fpm/etc/php.ini # 更改或增长 session.save_handler = "redis" session.save_path = "tcp://127.0.0.1:6379"
2.apache虚拟主机配置文件中也能够这样配置:
php_value session.save_handler " redis" php_value session.save_path " tcp://127.0.0.1:6379"
3.php-fpm配置文件对应的pool中增长:
php_value[session.save_handler] = redis php_value[session.save_path] = " tcp://127.0.0.1:6379 "
这里以第1种方法,修改php-fpm主配置文件为例
1.修改配置文件后重启php-tpm
2.新建测试文件
[root@lnmp-server src]# vim /usr/local/nginx/html/bbb.com/session.php # session.php内容可参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php #内容以下 <?php session_start(); if (!isset($_SESSION['TEST'])) { $_SESSION['TEST'] = time(); } $_SESSION['TEST3'] = time(); print $_SESSION['TEST']; print "<br><br>"; print $_SESSION['TEST3']; print "<br><br>"; print session_id(); ?>
3.测试
[root@lnmp-server src]# curl localhost/session.php 1535079050<br><br>1535079050<br><br>qra2l77cbvqca62ljtoibpjcl6 [root@lnmp-server src]# redis-cli 127.0.0.1:6379> keys * 1) "set_d" 2) "user1" 3) "set2" # 说明已经保存到redis中了 4) "PHPREDIS_SESSION:qra2l77cbvqca62ljtoibpjcl6" 5) "set3" 6) "list_a" 7) "PHPREDIS_SESSION:uo3tmvekflcp0q051u0rjp5i25" 8) "set_e" 9) "set_a" 10) "list1" 11) "mykey" 12) "key4" 13) "set_b" 14) "k4" 15) "key1" 16) "set_c" 17) "k1" 18) "user2" 19) "zset_a" 20) "key2" 21) "h1" 127.0.0.1:6379>
为了节省资源,咱们能够在一台机器上启动两个redis服务
1.新建从配置文件
[root@lnmp-server src]# cp /etc/redis.conf /etc/redis1.conf [root@lnmp-server src]# vim /etc/redis1.conf # port,dir,pidfile,logfile port 6380 dir /data/redis1_data/ pidfile /var/run/redis_6380.pid logfile "/var/log/redis1.log" # 增长 slaveof 127.0.0.1 6379 # 若是主上设置了密码,还须要增长 # masterauth aminglinux>com 设置主的密码 # 启动以前不要忘记建立新的dir目录 [root@lnmp-server src]# mkdir /data/redis1_data/
2.启动从redis
[root@lnmp-server src]# redis-server /etc/redis1.conf [root@lnmp-server src]# netstat -nltup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 1482/redis-server 1 tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 1690/redis-server 1 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1133/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1077/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1348/master tcp6 0 0 :::22 :::* LISTEN 1077/sshd tcp6 0 0 ::1:25 :::* LISTEN 1348/master tcp6 0 0 :::3306 :::* LISTEN 1308/mysqld udp 0 0 127.0.0.1:323 0.0.0.0:* 689/chronyd udp6 0 0 ::1:323 :::* 689/chronyd [root@lnmp-server src]#
3.测试
# 登陆从redis,查看数据,主上的数据自动同步过来了 [root@lnmp-server src]# redis-cli -p 6380 127.0.0.1:6380> keys * 1) "k4" 2) "mykey" 3) "key4" 4) "user2" 5) "list_a" 6) "set_d" 7) "set2" 8) "set_a" 9) "k1" 10) "user1" 11) "set_e" 12) "key1" 13) "list1" 14) "set_c" 15) "h1" 16) "zset_a" 17) "set_b" 18) "key2" 19) "set3"
多个redis节点网络互联,数据共享
全部的节点都是一主一从(能够是多个从),其中从不提供服务,仅做为备用
不支持同时处理多个键(如mset/mget),由于redis须要把键均匀分布在各个节点上,并发量很高的状况下同时建立键值会下降性能并致使不可预测的行为。
支持在线增长、删除节点
客户端能够连任何一个主节点进行读写
场景设置:
两台机器,分别开启三个Redis服务(端口)
A机器上三个端口7000,7002,7004,所有为主
B机器上三个端口7001,7003,7005,所有为从
两台机器上都要编译安装redis,而后编辑并复制3个不一样的redis.conf,分别设置不一样的端口号、dir等参数,还须要增长cluster相关参数,而后分别启动6个redis服务
1.分别在两台机器上编译安装redis, 各建3个配置文件,配置文件可参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/tree/master/21NOSQL。分别启动各reids
[root@redis-master src]# ps aux | grep redis root 18786 0.0 0.9 147312 9624 ? Ssl 14:31 0:02 redis-server 127.0.0.1:7000 [cluster] root 18792 0.0 0.9 147312 9624 ? Ssl 14:31 0:02 redis-server 127.0.0.1:7002 [cluster] root 18798 0.0 0.9 147312 9624 ? Ssl 14:31 0:02 redis-server 127.0.0.1:7004 [cluster] root 18861 0.0 0.0 112660 972 pts/0 R+ 15:19 0:00 grep --color=auto redis [root@redis-slave src]# ps aux | grep redis root 4830 0.0 0.9 147312 9624 ? Ssl 14:32 0:02 redis-server 127.0.0.1:7001 [cluster] root 4835 0.0 0.9 147312 9624 ? Ssl 14:32 0:02 redis-server 127.0.0.1:7003 [cluster] root 4840 0.0 0.9 147312 9624 ? Ssl 14:32 0:02 redis-server 127.0.0.1:7005 [cluster] root 18868 0.0 0.0 112660 972 pts/0 R+ 15:19 0:00 grep --color=auto redis
2.安装ruby2.2
# 若是未安装开发工具,须要安装一下开发工具 # yum groupinstall "Development Tools" -y # 安装依赖包 [root@redis-slave src]# yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-deve [root@redis-master src]# cd /root/ [root@redis-master ~]# mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} [root@redis-master ~]# wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES --2018-08-24 15:32:43-- http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz Resolving cache.ruby-lang.org (cache.ruby-lang.org)... 151.101.229.178, 2a04:4e42:36::434 Connecting to cache.ruby-lang.org (cache.ruby-lang.org)|151.101.229.178|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 16626772 (16M) [application/x-tar] Saving to: ‘rpmbuild/SOURCES/ruby-2.2.3.tar.gz’ 100%[====================================================================================>] 16,626,772 6.94MB/s in 2.3s 2018-08-24 15:32:53 (6.94 MB/s) - ‘rpmbuild/SOURCES/ruby-2.2.3.tar.gz’ saved [16626772/16626772] [root@redis-master ~]# wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS --2018-08-24 15:33:18-- https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.228.133 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.228.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 4484 (4.4K) [text/plain] Saving to: ‘rpmbuild/SPECS/ruby22x.spec’ 100%[====================================================================================>] 4,484 --.-K/s in 0s 2018-08-24 15:33:29 (41.0 MB/s) - ‘rpmbuild/SPECS/ruby22x.spec’ saved [4484/4484] [root@redis-master ~]# rpmbuild -bb rpmbuild/SPECS/ruby22x.spec + exit 0 [root@redis-master ~]# ls rpmbuild/RPMS/x86_64/ ruby-2.2.3-1.el7.centos.x86_64.rpm ruby-debuginfo-2.2.3-1.el7.centos.x86_64.rpm ruby-2.2.3-1.el7.centos.x86_64.rpm ruby-debuginfo-2.2.3-1.el7.centos.x86_64.rpm [root@redis-master ~]# yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm [root@redis-master ~]# rpm -q ruby ruby-2.2.3-1.el7.centos.x86_64 [root@redis-master ~]# gem install redis Fetching: redis-4.0.2.gem (100%) Successfully installed redis-4.0.2 Parsing documentation for redis-4.0.2 Installing ri documentation for redis-4.0.2 Done installing documentation for redis after 0 seconds 1 gem installed
3.Redis集群配置
[root@redis-master ~]# cp /usr/local/src/redis-4.0.11/src/redis-trib.rb /usr/bin/ # 配置集群 [root@redis-master ~]# redis-trib.rb create --replicas 1 192.168.1.45:7000 192.168.1.45:7002 192.168.1.45:7004 192.168.1.46:7001 192.168.1.46:7003 192.168.1.46:7005 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.1.45:7000 192.168.1.46:7001 192.168.1.45:7002 Adding replica 192.168.1.46:7005 to 192.168.1.45:7000 Adding replica 192.168.1.45:7004 to 192.168.1.46:7001 Adding replica 192.168.1.46:7003 to 192.168.1.45:7002 M: 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000 slots:0-5460 (5461 slots) master M: 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002 slots:10923-16383 (5461 slots) master S: 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004 replicates 31abbf90e210d813bbfa6e6cecbd1d616d579461 M: 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001 slots:5461-10922 (5462 slots) master S: 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003 replicates 45876690d891e369cc1ffd0ae61b2f6b4c59e70b S: 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005 replicates 65fff908dc0736d0cabea55d6dd5908f5655b38a 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.1.45:7000) M: 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004 slots: (0 slots) slave replicates 31abbf90e210d813bbfa6e6cecbd1d616d579461 S: 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005 slots: (0 slots) slave replicates 65fff908dc0736d0cabea55d6dd5908f5655b38a S: 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003 slots: (0 slots) slave replicates 45876690d891e369cc1ffd0ae61b2f6b4c59e70b [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
1.链接redis集群
# -c以集群的方式登陆,-h 主机地址,-p 端口号 [root@redis-master ~]# redis-cli -c -h 192.168.1.45 -p 7000 192.168.1.45:7000> [root@redis-master ~]# redis-cli -c -h 192.168.1.45 -p 7000 192.168.1.45:7000> set k1 "nico" -> Redirected to slot [12706] located at 192.168.1.45:7002 OK 192.168.1.45:7002> get k1 "nico" [root@redis-master ~]# redis-cli -c -h 192.168.1.45 -p 7002 192.168.1.45:7002> get k1 "nico"
2.经常使用操做
# 检测集群状态 [root@redis-master ~]# redis-trib.rb check 192.168.1.45:7000 >>> Performing Cluster Check (using node 192.168.1.45:7000) M: 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004 slots: (0 slots) slave replicates 31abbf90e210d813bbfa6e6cecbd1d616d579461 S: 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005 slots: (0 slots) slave replicates 65fff908dc0736d0cabea55d6dd5908f5655b38a S: 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003 slots: (0 slots) slave replicates 45876690d891e369cc1ffd0ae61b2f6b4c59e70b [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. # 列出节点 [root@redis-master releasetools]# redis-cli -c -h 192.168.1.45 -p 7000 192.168.1.45:7000> cluster nodes 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002@17002 master - 0 1535103063059 2 connected 10923-16383 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001@17001 master - 0 1535103061000 4 connected 5461-10922 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000@17000 myself,master - 0 1535103060000 1 connected 0-5460 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004@17004 slave 31abbf90e210d813bbfa6e6cecbd1d616d579461 0 1535103062000 4 connected 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005@17005 slave 65fff908dc0736d0cabea55d6dd5908f5655b38a 0 1535103062356 6 connected 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003@17003 slave 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 0 1535103060341 5 connected # 查看集群信息 192.168.1.45:7000> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:4232 cluster_stats_messages_pong_sent:4159 cluster_stats_messages_sent:8391 cluster_stats_messages_ping_received:4154 cluster_stats_messages_pong_received:4232 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:8391 # cluster meet ip port 添加节点 # cluster forget node_id 移除节点 # cluster replicate node_id 将当前节点设置为指定节点的从节点 # 新增长2个配置文件,并启动 [root@redis-master releasetools]# redis-server /etc/redis7006.conf [root@redis-master releasetools]# redis-server /etc/redis7007.conf [root@redis-master releasetools]# ps aux | grep redis root 34213 0.2 1.1 151408 11928 ? Ssl 16:18 0:13 redis-server 192.168.1.45:7000 [cluster] root 34264 0.2 1.1 151408 11936 ? Ssl 16:20 0:13 redis-server 192.168.1.45:7002 [cluster] root 34269 0.2 1.1 151408 11928 ? Ssl 16:20 0:14 redis-server 192.168.1.45:7004 [cluster] root 34504 0.0 0.9 147312 9624 ? Ssl 17:52 0:00 redis-server 192.168.1.45:7006 [cluster] root 34509 0.2 0.9 147312 9704 ? Ssl 17:52 0:00 redis-server 192.168.1.45:7007 [cluster] root 34515 0.0 0.0 112660 968 pts/0 R+ 17:52 0:00 grep --color=auto redis [root@redis-master releasetools]# redis-cli -c -h 192.168.1.45 -p 7000 192.168.1.45:7000> cluster nodes 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002@17002 master - 0 1535104403139 2 connected 10923-16383 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001@17001 master - 0 1535104402000 4 connected 5461-10922 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000@17000 myself,master - 0 1535104402000 1 connected 0-5460 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004@17004 slave 31abbf90e210d813bbfa6e6cecbd1d616d579461 0 1535104402129 4 connected 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005@17005 slave 65fff908dc0736d0cabea55d6dd5908f5655b38a 0 1535104400117 6 connected 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003@17003 slave 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 0 1535104403138 5 connected # 添加节点, 193.192.168.1.45:7000> CLUSTER MEET 192.168.1.45 7006 OK 192.168.1.45:7000> CLUSTER MEET 192.168.1.45 7007 OK 192.168.1.45:7000> cluster nodes 6157feade2af15a81a982ab467fc9746514552e3 192.168.1.45:7007@17007 slave 65fff908dc0736d0cabea55d6dd5908f5655b38a 0 1535104467000 1 connected 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002@17002 master - 0 1535104465000 2 connected 10923-16383 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001@17001 master - 0 1535104467106 4 connected 5461-10922 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000@17000 myself,master - 0 1535104464000 1 connected 0-5460 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004@17004 slave 31abbf90e210d813bbfa6e6cecbd1d616d579461 0 1535104466000 4 connected 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005@17005 slave 65fff908dc0736d0cabea55d6dd5908f5655b38a 0 1535104467813 6 connected 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003@17003 slave 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 0 1535104466000 5 connected 81885a03578dbd587136c233b48aee633703286e 192.168.1.45:7006@17006 master - 0 1535104466000 0 connected # 删除节点 192.168.1.45:7000> CLUSTER FORGET 6157feade2af15a81a982ab467fc9746514552e3 OK 192.168.1.45:7000> cluster nodes 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 192.168.1.45:7002@17002 master - 0 1535104692665 2 connected 10923-16383 31abbf90e210d813bbfa6e6cecbd1d616d579461 192.168.1.46:7001@17001 master - 0 1535104689000 4 connected 5461-10922 65fff908dc0736d0cabea55d6dd5908f5655b38a 192.168.1.45:7000@17000 myself,master - 0 1535104688000 1 connected 0-5460 4837f52c7731531c7c6ea903f0c81b28b6956d21 192.168.1.45:7004@17004 slave 31abbf90e210d813bbfa6e6cecbd1d616d579461 0 1535104691000 4 connected 24cbab3b253d8a3e89978a402873bfb3a72a8d21 192.168.1.46:7005@17005 slave 65fff908dc0736d0cabea55d6dd5908f5655b38a 0 1535104690652 6 connected 215d5b451cbe5e3e68ba131f64acf6e1b6fe62e7 192.168.1.46:7003@17003 slave 45876690d891e369cc1ffd0ae61b2f6b4c59e70b 0 1535104691000 5 connected 81885a03578dbd587136c233b48aee633703286e 192.168.1.45:7006@17006 master - 0 1535104691658 0 connected # cluster saveconfig 保存配置文件 192.168.1.45:7000> cluster saveconfig OK
redis哨兵 https://segmentfault.com/a/1190000002680804 http://www.cnblogs.com/jaycekon/p/6237562.html