今天算是结束了redis的入门学习,下面是学习redis做的笔记,记录一下。
一.Redis的开启语法
1.redis服务运行正常
127.0.0.1:6379[1]> ping redis默认ip:127.0.0.1 默认端口号:6379
PONG
2.选择数据库
127.0.0.1:6379> select 0 选择数据库0 总共16个数据库
3.清空当前的数据库
127.0.0.1:6379[1]> flushdb
4.开启数据库步骤
[root@localhost ~]# redis-server &
[root@localhost ~]# redis-cli
127.0.0.1:6379> 至此进入数据库
5.关闭redis
redis-cli shutdown
二.Redis的1个key+5种数类型的操作语法
1.key
k1 v1 这是准备工作:先在库0 中准备这样几个key和value,来练习key的操作。
word w1 注意:redis默认是有16个库:库0-库15
woord w2
set wod w3
1.keys语法
keys * 查询此表中所有的key。
keys wo?d wo?d 匹配 word , wood(?表示单个的字符)。
keys wo[or]d wo[or]d匹配 word, wood,不匹配wold、woord。
2.exists语法
127.0.0.1:6379> exists k1 判断k1是否存在?
(integer) 1 存在的话:返回个数1。
-----------------------------------------------------------------------------------
127.0.0.1:6379> exists k5 k5是否存在?
(integer) 0 不存在?返回个数0。
-----------------------------------------------------------------------------------
127.0.0.1:6379> exists k1 k2 k3 word 判断k1 k2 k3 word是否存在?
(integer) 2 存在的话:返回存在的个数!
3.move语法
127.0.0.1:6379> move k1 1 把k1移动到库1中
(integer) 1 移动成功:返回1。失败:返回0。
4.ttl语法
127.0.0.1:6379[1]> ttl k1 查看k1的剩余有效时间
(integer) -1 -1表示:永不过期。 -2:k1不存在。
5.expire语法
127.0.0.1:6379[1]> expire k1 20 设置k1的生命时间是20s。过时自动删除。
(integer) 1 设置成功:返回1。
6.type语法
127.0.0.1:6379> type k1 查看k1的存储的值的数据类型。
string none(k1不存在)、string、list、set、zset、hash。
7.rename语法
127.0.0.1:6379> rename k1 kk1 重命名k1为kk1
OK
8.del语法
127.0.0.1:6379> del k1 k2 删除k1、k2等
(integer) 2 删除成功的个数。
2.string 字符串
令中set/get居多。
username zhangsan
id 1620014 准备工作:设置这样几个string类型的数据
age 20
adddress suzhou
1.set语法(string赋值)
127.0.0.1:6379> set username zhanmusi 赋值,如果已经赋值了,就覆盖。
OK
2.get语法(string获取值)
127.0.0.1:6379> get username 获取值。
"zhanmusi"
--------------------------------------------------------------------------------------------
127.0.0.1:6379> get k34 key值不存在
(nil) 返回:nil
3.append语法 (尾部追加)
追加!
127.0.0.1:6379> append phone 188625841 key值不存在:创建key并赋值
(integer) 9 返回:字符串的长度。
127.0.0.1:6379> get phone
"188625841"
-------------------------------------------------------------------------------------
127.0.0.1:6379> append phone 81 key值存在:进行追加
(integer) 11 返回:字符串的总长度。
127.0.0.1:6379> get phone
"18862584181"
4.strlen语法(获取string长度)
127.0.0.1:6379> strlen phone 返回字符串的长度 。
(integer) 11
5.incr语法(string数字加1)
127.0.0.1:6379> incr age 对string类型的“数字”加1
(integer) 21 返回integer类型的加1后的数据。
------------------------------------------------------------------------------------------
127.0.0.1:6379> incr username incr只能操作string类型的“数字”
(error) ERR value is not an integer or out of range 报错
6.decr语法(string数字减1)
127.0.0.1:6379> decr age 同上
(integer) 20
127.0.0.1:6379> decr age
(integer) 19
7.incrby语法(string数字增加任意数值)
127.0.0.1:6379> incrby age 2 有这个语法,还要上面的incr干啥啊?
(integer) 22
8.decrby语法(string增加任意数值)
127.0.0.1:6379> decrby age 2 同上
(integer) 20
9.getrange语法(截取“字符”)
127.0.0.1:6379> getrange username 0 2 0表示第一个字符
"zha"
--------------------------------------------------------------------------------------------------
127.0.0.1:6379> getrange username -4 -1 -1表示最后一个字符
"musi"
10.setrange语法(指定下标开始替换)
127.0.0.1:6379> setrange address 2 nan 从下标2开始进行替换
(integer) 6
127.0.0.1:6379> get address
"sunanu" 结果:suzhou变sunan
11.setex语法(规定生命时间)
127.0.0.1:6379> setex phone 20 151515151 设置生命时间,新值覆盖
OK
12.mset语法(赋值:多键值对)
127.0.0.1:6379> mset k1 y1 k2 v2 k3 v3 同时赋值多个键值对
OK
13.mget语法(获值:多键值对)
127.0.0.1:6379> mget k1 k2 k3 同时获取多个键值对
1) "y1"
2) "v2"
3) "v3"
3.list 有序可重复列表/链表(l)
命令中l居多。
Redis的list列表是:一个个字符串组成的一个无序可重复列表。
列表类型的数据操作总的思想是通过key和下标操作value。
1.lpush语法(list赋值:逆序赋值)
127.0.0.1:6379[1]> lpush liebiao01 abandon view java c# 这就是给无序list赋值的语法
(integer) 4
127.0.0.1:6379[1]> lpush liebiao01 python js jsp
(integer) 7 返回的是:这列表的长度(包含的 字符串个数)
127.0.0.1:6379[1]> lrange liebiao01 0 -1
1) "jsp" 3
2) "js" 2
3) "python" 1 注意:轮到谁,谁就在左边(最前面)。
4) "c#" 4 最后一个人永远在最左边。
5) "java" 3
6) "view" 2
7) "abandon" 1
2.rpush语法(list赋值:顺序赋值)
127.0.0.1:6379[1]> rpush liebiao02 view java c#
(integer) 3
127.0.0.1:6379[1]> rpush liebiao02 python js jsp
(integer) 6
127.0.0.1:6379[1]> lrange liebiao02 0 -1
1) "view"
2) "java"
3) "c#"
4) "python" 注意:轮到谁,谁就在最右边(最后边),所以是顺序赋值。
5) "js"
6) "jsp"
3.lrange语法(获取list的部分元素)
在上面已经用过了。
4.lpop语法(移除第一个元素,并返回之值)
127.0.0.1:6379[1]> lpop liebiao
"view"
---------------------------------------
127.0.0.1:6379[1]> lpop liebiao
"java"
5.rpop语法(移除最后一个元素,并返回之值)
127.0.0.1:6379[1]> rpop liebiao
"jsp"
6.lindex语法(按下标获取某个元素)
127.0.0.1:6379[1]> lindex liebiao 0 0:获取第一个元素
"c#"
127.0.0.1:6379[1]> lindex liebiao 2 2:获取第三个元素
"js"
127.0.0.1:6379[1]> lindex liebiao -2 -2:获取倒数第二个元素
"python"
127.0.0.1:6379[1]> lindex liebiao -1 -1:获取倒数第一个元素
"js"
7.llen语法(获取列表长度)
127.0.0.1:6379[1]> llen liebiao
(integer) 3
8.lrem语法(移除指定元素,指定个数)
语法:lrem key count value
127.0.0.1:6379[1]> rpush liebiao china china usa china uk china italia
(integer) 7
127.0.0.1:6379[1]> lrem liebiao 2 china 移除list最左边的两个China
(integer) 2 返回移除成功的个数
127.0.0.1:6379[1]> lrange liebiao 0 -1
1) "usa" 注意:这个count
2) "china" count>0:从左开始移除指定个数的china
3) "uk" count<0:从右开始移除指定个数china
4) "china" count=0:移除所有的china
5) "italia"
9.ltrim语法(截取指定元素并赋值给原来的list,区别于lrange)
注意:lrange是获取部分元素,原来的list是不变的。
ltrim 是截取部分元素,然后赋给原来的list。
127.0.0.1:6379[1]> ltrim liebiao 1 2 截取原lsit的下标是1到2的元素,赋给原来的list。
OK
127.0.0.1:6379[1]> lrange liebiao 0 -1
1) "china" 注意:string是没有这种操作的。只有getrange。
2) "uk"
10.lset语法(指定的下标,更改值)
127.0.0.1:6379[1]> lset liebiao 0 zhongguo 下标是0的元素,值更改为:zhogguo
OK
11.linsert 语法(指定的value之前/后插入元素)
语法:linsert key before/after pivot value
127.0.0.1:6379[1]> linsert liebiao after zhongguo beijing 在元素zhongguo之后插入beijing
(integer) 3
127.0.0.1:6379[1]> lrange liebiao 0 -1
1) "zhongguo"
2) "beijing"
3) "uk"
4.set 无序不重复集合(s)
命令中s居多。
Redis的set是string类型的无序不重复集合。
集合类型的数据操作总的思想是通过key确定集合
1.sadd语法(set赋值)
127.0.0.1:6379[1]> sadd set01 china usa italia china usa 注意:这里是有重复的元素的,
(integer) 3 返回set中收录的元素个数。
2.smembers语法(展示set中的全部元素)
127.0.0.1:6379[1]> smembers set01 展示:所有的元素
1) "china"
2) "italia" 上面的重复的赋值直接忽略。
3) "usa"
3.sismember语法(判断这个元素是否在此set中)
127.0.0.1:6379[1]> sismember set01 zhongguo
(integer) 0 有就返回:1 没有就返回:0
4.scard(set中有几个元素)
127.0.0.1:6379[1]> scard set01
(integer)
5.srem语法(移除指定的多个value)
语法:srem key value1 value2 value3
127.0.0.1:6379[1]> srem set01 china usa 移除指定的value
(integer) 2
6.srandmember语法(随机展示一个元素)
语法:srandmember key count 感觉没啥用
127.0.0.1:6379[1]> sadd set01 beijing shanghai jiangsu shangdong
(integer) 4
127.0.0.1:6379[1]> srandmember set01 count不写:随机展示一个元素
"beijing"
127.0.0.1:6379[1]> srandmember set01 3 count==3:随机展示三个元素
1) "beijing"
2) "jiangsu"
3) "shanghai"
7.spop语法(随机弹出/移除一个或多个元素)
127.0.0.1:6379[1]> sadd set01 beijing shanghai jiangsu shangdong chongqing sichuan yunnan riben taiwan HK
(integer) 10
127.0.0.1:6379[1]> spop set01 没有count:随机删除一个元素
"sichuan"
127.0.0.1:6379[1]> spop set01 3 count==3: 随机删除三个元素
注意:为何是随机?比较lpop(弹出左1)、rpop(弹出右1)!
因为:list有序、set无序。
8.smove语法(移动某元素至另一个set)
127.0.0.1:6379[1]> sadd set02 zhongguo riben meiguo
(integer) 3
127.0.0.1:6379[1]> smove set02 set01 meiguo 把set02中的meiguo移动到set01中
(integer) 1
9.sdiff(返回两个集合的差集)
127.0.0.1:6379[1]> sdiff set01 ste02 返回两个集合的差集!感觉没啥用。
10.sinter(返回两个集合的交集)
127.0.0.1:6379[1]> sinter set01 set02 返回set01和set02的交集!感觉还是没啥用。
1) "riben"
11.sunion(返回两个集合的并集)
127.0.0.1:6379[1]> sunion set01 set02 返回两个集合的并集。
5.hash(h)数据存储
Redis的hash 是一个key和value的映射表。
hash类型的数据操作总的思想是:通过key和field操作value,
key<------->field:value field:value field:value field:value
key :数据标识
field :域
value:我们感兴趣的业务数据
1.hset语法(hash赋值)
127.0.0.1:6379[1]> hset user name zhangsan age 20 id 10010
(integer) 3 3: 插入成功的filed:value个数
注:其中key是user,有三对filed:value
2.hget语法(获取单个filed的值)
127.0.0.1:6379[1]> hget user name
"zhangsan"
3.hmset语法(hash赋值)
127.0.0.1:6379[1]> hmset user name zhangsan age 20 id 10010
OK
真不知道这和hset有啥区别???
4.hmget语法(获取多个filed的值)
127.0.0.1:6379[1]> hmget user name age id
1) "zhangsan"
2) "20"
3) "10010"
5.hgetall语法(展示所有的filed:value)
127.0.0.1:6379[1]> hgetall user
1) "name"
2) "zhangsan"
3) "age"
4) "20"
5) "id"
6) "10010"
6.hdel语法(删除一个、多个filed:value)
127.0.0.1:6379[1]> hdel user name age 删除name和age这两个filed
(integer) 2
127.0.0.1:6379[1]> hgetall user
1) "id"
2) "10010"
7.hlen语法(获取filed的个数)
127.0.0.1:6379[1]> hlen user
(integer) 1
8.hexists语法(判断是否存在某个filed)
127.0.0.1:6379[1]> hexists user age
(integer) 0 不存在:返回0
127.0.0.1:6379[1]> hexists user id
(integer) 1 存在:返回1
9.hkeys语法(展示所有的filed)
127.0.0.1:6379[1]> hkeys user
1) "id"
10.hvals语法(展示hash中所有的值)
127.0.0.1:6379[1]> hvals user 展示hash中所有的值:列表展示
1) "10010"
2) "zhangsan"
3) "20"
11.hincrby语法(指定的filed增加指定的数)
127.0.0.1:6379[1]> hincrby user age 30 年龄增加30
(integer) 70 增加完的年龄
12.hincrbyfloat语法(指定的数增加指定的浮点型数)
127.0.0.1:6379[1]> hincrbyfloat user age 10.5 年龄增加10.5
"80.5" 增加完的年龄数
13.hsetnx语法(什么垃圾语法)
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
6.zset有序不重复(z)
Redis的zset集合是string类型的有序不重复的集合。
zset集合每个元素都会关联一个分数(分数可以重复)
1.zadd语法(zset赋值)
语法 : zadd key score member score member score member
127.0.0.1:6379[1]> zadd city 3000 beijing 2800 shanghai 2000 jiangsu 1800 zhejiang
(integer) 4
2.zrange语法(展示指定下标区间的元素)
127.0.0.1:6379[1]> zrange city 0 -1 不带分数展示:从头到尾
1) "zhejiang"
2) "jiangsu"
3) "shanghai"
4) "beijing"
---------------------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrange city 0 -1 withscores 带分数展示:从头到尾
1) "zhejiang"
2) "1800"
3) "jiangsu"
4) "2000"
5) "shanghai"
6) "2800"
7) "beijing"
3.zrangebyscore语法(zset排序语法)
语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]
127.0.0.1:6379[1]> zadd city 100 suzhou 90 nanjing 80 wuxi 60 nantong 50 changzhou 40 xuzhou 35 huaian 30 yangzhou 20 yancheng 15 taizhou 10 zhenjiang 8 lianyungang 6 suqian
(integer) 13 准备13个数据先
---------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 90 100 获取[90-100]之间的数据。
1) "nanjing"
2) "suzhou"
---------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 90 100 withscores 获取[90-100]之间的数据(带分数)
1) "nanjing"
2) "90"
3) "suzhou"
4) "100"
-------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 90 (100 withscores 获取[90-100)之间的数据(带分数)
1) "nanjing"
2) "90"
----------------------------------------------------------------------------------------------------------------
127.0.0.1:6379[1]> zrangebyscore city 20 100 limit 1 4 获取[20-40]之间的数据。
1) "yangzhou" 从下标1开始。
2) "huaian" 截取结果中的4个数据。
3) "xuzhou"
4) "changzhou"
4.zrem语法(移除指定的一个、多个元素)
127.0.0.1:6379[1]> zrem city yancheng zhenjiang
(integer) 2
5.zcard语法(统计zset中的元素个数)
127.0.0.1:6379[1]> zcard city
(integer) 11
6.zcount语法(统计指定分数区间,元素个数)
127.0.0.1:6379[1]> zcount city 20 100 统计分数在[20-100]之间的元素个数
(integer) 8
7.zrank语法(获取指定元素的排名:从小到大)
127.0.0.1:6379[1]> zrank city suqian suqian排名最小:返回的是0。
(integer) 0
8.zscore语法(获取指定元素的分数)
127.0.0.1:6379[1]> zscore city nanjing nanjing分数是:90
"90"
127.0.0.1:6379[1]> zscore city xian xian不存在:nil
(nil)
9.zrevrank语法(获取指定元素的排名:从大到小)
127.0.0.1:6379[1]> zrevrank city suzhou suzhou排名1
(integer) 0
127.0.0.1:6379[1]> zrevrank city suqian suqian排名11
(integer) 10
10.zrevrange语法(指定下标区间:分数从大到小排序)
127.0.0.1:6379[1]> zrevrange city 0 2 withscores
1) "suzhou"
2) "100"
3) "nanjing"
4) "90"
5) "wuxi"
6) "80"
11.zrevrangebyscore语法(指定分数区间,从大到小排序)
127.0.0.1:6379[1]> zrevrangebyscore city 100 50
1) "suzhou"
2) "nanjing"
3) "wuxi"
4) "nantong"
5) "changzhou"
三.Redis的持久化
1.RDB持久化方案(默认的)
save<seconds><changes>:Redis在seconds秒内key改变changes次,Redis就把快照内的数据保存到磁盘中一次。默认的策略是:
1分钟内改变了1万次
或者5分钟内改变了10次 这些配置在配置文件中可以修改
或者15分钟内改变了1次
缺点就是:有可能重要数据未保存。
2.AOF持久化方案
同步持久化,每次发生数据变化会立刻以日志形式写入到磁盘中。
appendonly:配置是否开启AOF,yes表示开启,no表示关闭。默认是no。
优缺点:性能较差但数据完整性比较好(慢,安全)。
3.总结
开谁?都开?都不开?这是由项目经理决定的。
一般情况下都是只开启第一个RDB策略就好了。
四.Redis的事务
1.multi(开启事务的标志)
2.exec(执行事务的标志即结束)
3.discard(放弃执行某事务,事务列表清空)
4.watch(监控某一个key)
5.watch(放弃监控某key)
6.代码
1.这是一段典型的开启事务结束事务的代码(执行成功)。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> get k2
"v2"
----------------------------------------------------------------------------------------------------------------
2.这是一段典型的开启事务结束事务的代码(执行失败)。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> seta kk vv 这里故意写错了
(error) ERR unknown command `seta`, with args beginning with: `kk`, `vv`,
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec
127.0.0.1:6379> keys * 显然这里的k3和kk并未赋值成功
1) "k2"
2) "k1"
---------------------------------------------------------------------------------------------------------------------
3.key压入队列过程正常,执行事务命令发生错误,是能够成功赋值的,但是命令执行失败。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> incr k1 这里语法错误
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
127.0.0.1:6379> keys *
1) "k2"
2) "k4"
3) "k3" 显然k3 k4赋值成功
4) "k1"
--------------------------------------------------------------------------------------------------------------
4.discard语法(放弃执行整套事务)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> set k6 v6
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k4"
3) "k3" 放弃执行事务,显然k5 k6没有赋值成功
4) "k1"
---------------------------------------------------------------------------------------------------------------
5.watch语法解析
127.0.0.1:6379> set balance1 100
OK
127.0.0.1:6379> set balance2 200
OK
127.0.0.1:6379> set version 1
OK
127.0.0.1:6379> watch version 在这里对version进行监控!
OK
127.0.0.1:6379> multi 开始执行事务(先开另一个Linux系统,链接本redis,改变version的值)
OK
127.0.0.1:6379> decrby balance1 20
QUEUED
127.0.0.1:6379> decrby balance2 20
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379>mget balance1 balance2
“100” 由于version发生了改变,所以这里的事务执行失败,还是原来的值。
“200”
其实redis的事务不是一个很重要的内容,因为复杂的事务逻辑不会放在redis里面来处理的。
五.Redis的发布订阅(了解)
1.suscribe(订阅一个、多个频道信息)
2.publish(将信息发送到指定的频道上)
3.psubscribe(订阅一个、多个符合模式的频道)
六.Redis的主从复制
1.相关概念
1.1 其实redis作为一个快速访问的数据库,大部分请求都是读的,写的很少。
1.2 高并发的数据进行访问的时候,有上千台服务器,都装备了redis的数据库,
最终是:整个集群,哪台服务器闲着,就访问哪台服务器。
1.3 一般是主少从多,主负责写(也能读),从负责读(不能写)
机制:主写完之后,是能够反馈到从里面的。
我们准备模拟搭建三台redis服务:一个主(写),两个从(读)
2.配置redis集群,并模拟一主二从的redis集群
2.1 搭建三台redis服务:使用一个redis模拟三台redis服务
提供三份redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf
修改三份配置文件:以redis6379.conf为例
bind 127.0.0.1
port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
分别使用三个redis配置文件,启动三个redis服务:
redis-server redis6379.conf &
redis-server redis6380.conf &
redis-server redis6381.conf &
2.2 通过redis客户端分别连接三台redis服务
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
2.3 查看三台redis服务在集群中的主从角色
info replication默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机。
2.4 先在6379进行写操作
set k1 v1 三台rdis服务互相独立,互不影响
注意:此时6379并未辐射到6380/6381(很重要)
2.5 设置主从关系:设从不设主
在6380上执行:slaveof 127.0.0.1 6379
在6381上执行:slaveof 127.0.0.1 6379
2.6 全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库
在6380和6381上执行:keys * 发现:slaveof之后,已经复制进了6380、6381
2.7 增量复制:主库写数据会自动同步到从库
在6379上执行:set k2 v2
在6380和6381上执行:keys * 依然是同步复制
2.8 主写从读,读写分离
在6380和6381上执行:set k3 v3 ===>报错: readonly(从只能读)
2.9 主机宕机、从机原地待命
关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown (宕机操作)
查看6380和6381服务的主从角色:info replication (依然隶属于6379)
2.10 主机恢复、一切恢复正常
重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379 (至此:主机恢复)
2.11 从机宕机、主机少一个从机、其它从机不变
关闭6380服务: redis-cli -h 127.0.0.1 -p 6380 shutdown
查看6379服务的主从角色:info replication
查看6381服务的主从角色:info replication
2.12 从机恢复、需要重新设置主从关系
重启6380服务:redis-server redis6380.conf &
客户端连接6380:redis-cli -h 127.0.0.1 -p 6380
在6380上执行: slaveof 127.0.0.1 6379
2.13 让从机上位
a)主机宕机、从机原地待命: (假如这次的宕机是:主机被人砸了)
关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
查看6380和6381服务的主从角色:info replication
b)从机断开原来主从关系: (6380说:老子要做主机)
在6380上执行:slaveof no one
查看6380服务的主从角色:info replication
c)重新设置主从关系: (6381弃暗投明至6380)
在6381上执行:slaveof 127.0.0.1 6380
d)之前主机恢复、变成孤家寡人:(6379回来之后,发现江山没了)
重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
e)天堂变地狱: (6379忍气吞声至6381麾下)
在6379上执行:slaveof 127.0.0.1 6381
在6381上执行:info replication 既是主机又是从机
6381莫名其妙变成原来老大的老大。
小结
advantages:一台主机配置多台从机,一台从机又可以配置多台从机,从而形成一个庞大的集群架
构,减轻一台主机的压力。
diadvatages:增加了服务间的延迟时间。
3.哨兵模式(从机自动上位模式)
redis哨兵模式:主机宕机、从机上位的自动版。
1) 搭建一主二从集群架构:(上一节前五步)
2) 提供哨兵配置文件:在redis安装目下创建配置文件:redis_sentinel.conf
sentinel monitor dc-redis 127.0.0.1 6379 1
3) 启动哨兵服务:
redis-sentinel redis_sentinel.conf
4) 主机宕机:
关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
哨兵程序通过投票机制,从机自动上位。
5)若再恢复之前主机:自动从属于新的主机6381。
重启6379服务:redis-server redis6379.conf &
客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
七.Jedis操作redis(java操作redis)
创建java工程:直接new一个Jedis工具类对象出来,然后直接进行方法的调用就行了。
注:上面所有的redis操作指令,均是封装成了一个个的方法。
大概花了一个星期的时间入门了Linux和redis,下一阶段,准备先复习
一下前面学的java三大框架,然后继续肝完springboot。