1. 接上篇内容
(redis安装及入门(含阿里云服务器出现的问题))
1. redis非关系数据库。
2. 特点:
1.读写速度块
2.以key-value键值对存储
3.它支持的存储数据类型丰富。[字符串,hash,list,set,sort set]
4.redis支持持久化。
5.redis支持集群方式。
3. redis的常见命令:
(1) 关于key操作的命令.
keys *: 查询所有的key
del key ....:删除指定的key
expire key seconds: 为指定的key设置存活时间
ttl key: 查询指定key的存放时间 -1 表示未设置存放时间 -2 表示没有指定的key
(2)关于数据库的操作 默认16
select index:切换数据库.
flushdb: 清空当前数据库
flushall:清空所有数据库
(3)String数据类型的命令
set key value:
get key
mset key value.....
mget key .....
setnx key value:
incr key:
decr key
(4) hash数据类型
hset key field value
hmset key field value field value....
hget key field:
hkeys key:
hvals key:
hgetall key:2. 正文
1. List 队列类型 和 set集合类型 sortSet 有序集合
2. Redis的持久化方式。
3. redis集群的搭建。
(1)主从模式
(2)哨兵模式
(3)去中心集群。3.List 队列类型
lpush: 将一个或多个值 value 插入到列表 key 的表头.
lpop: 移除并返回列表 key 的头元素。
lrange: 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。0表示第一个元 素,-1表示最后一个元素,-2表示倒数第二个元素
lset: 将列表 key 下标为 index 的元素的值设置为 value 。如果有重名的,重名的也会被更改
rpoplpush:将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。将 source 弹出的 元素插入到列表 destination ,作为 destination 列表的的头元素。自己也可给自己用![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAwwUObK-1618317483997)(assets/1618310053392.png)] redis的key 空格_redis的key 空格](https://s2.51cto.com/images/blog/202410/05054637_6700623dadba499178.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
4. set集合
sadd key value.....: 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
spop key: 移除并返回集合中的一个随机元素。
smove source destint member: 将 member 元素从 source 集合移动到 destination 集合。
smembers key:获取指定key下的所有的元素
sinter key key ...:求所有集合的交集。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJNsDLwy-1618317483999)(assets/1618311086590.png)] redis的key 空格_redis_02](https://s2.51cto.com/images/blog/202410/05054638_6700623e1407844777.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
5.sortSet 有序集合。
应用场景: 排行榜
1.zadd key score value score value ....:添加有序集合元素。
2.zrange key start end: 获取指定返回的元素。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S5RIY0zv-1618317484001)(assets/1618311406101.png)] redis的key 空格_大数据_03](https://s2.51cto.com/images/blog/202410/05054638_6700623e555d257380.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
6. Redis的持久化方式。
持久化:把内存中的数据库保存到磁盘上。防止数据的丢失。
redis支持的持久化方式两种:
(1)RDB:快照 其实就是把数据以快照的形式保存在磁盘上,什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来。
(2)AOF:日志追加 记录服务器接受的每个写入操作,当服务器启动时再次加载该日志,会把日志中的命令重新执行一遍。例如:set k1 v1 set k2 v2操作都会被记录重启后在执行一遍从而保证数据不变7. RDB快照持久化方式
7.1 如何触发RDB持久化
1. 执行完相关操作后 手动执行save命令将数据存入指定文件中
2. 执行完相关操作后 手动bgsave命令将数据存入指定文件中(没有指定文件会进行创建)
3. 通过配置自动触发。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x697er7n-1618317484004)(assets/1618312592113.png)] redis的key 空格_redis_04](https://s2.51cto.com/images/blog/202410/05054638_6700623e83efb3551.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
7.1.1 save和bgsave区别
save命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdIr3bmV-1618317484006)(assets\1618300074599.png)] redis的key 空格_数据_05](https://s2.51cto.com/images/blog/202410/05054638_6700623ec73ce39528.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。
bgsave执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:fork()之前都会保存,之后的过段时间再应该手动执行会保存
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3Ivoylk-1618317484007)(assets\1618300230340.png)] redis的key 空格_redis_06](https://s2.51cto.com/images/blog/202410/05054639_6700623f0b96c15074.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
自动触发:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JO7LNMwr-1618317484007)(assets\1618300804864.png)] redis的key 空格_redis_07](https://s2.51cto.com/images/blog/202410/05054639_6700623f5228c18115.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
7.2 保存在磁盘上后,该文件的名字叫什么?
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqT1HW4p-1618317484008)(assets\1618299721721.png)] redis的key 空格_数据_08](https://s2.51cto.com/images/blog/202410/05054639_6700623f8964f94629.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
配置文件redis.conf中可以修改保存位置
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VgSIHtxf-1618317484008)(assets/1618312382887.png)] redis的key 空格_redis_09](https://s2.51cto.com/images/blog/202410/05054639_6700623fd04ef15448.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
7.3 恢复数据
只需要把之前的存有对应数据的dump.rdb文件放入redis的安装目录即可,redis再次启动时会加载安装目录下的dump.rdb文件。
7.4 rdb的优缺点
优点:
(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
(2)生成RDB文件的时候,redis主进程会创建一个子进程fork()来处理所有保存工作,主进程不需要进行任何磁盘IO操作。(会影响性能但是比较小)
(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。缺点:
快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。rdb总是耗时,如果一段时间产生的文件量比较大,耗时就长**,好处就是恢复快**,基于此产生如下内容:
7.5 AOF 默认该模式是关闭的。
提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0RkIXj1-1618317484009)(assets\1618301367175.png)] redis的key 空格_大数据_10](https://s2.51cto.com/images/blog/202410/05054640_670062403477c89346.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
aof的触发模式
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c457KebE-1618317484009)(assets\1618301556753.png)] redis的key 空格_数据_11](https://s2.51cto.com/images/blog/202410/05054640_67006240908a697161.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRvcJENz-1618317484009)(assets\1618301572779.png)] redis的key 空格_大数据_12](https://s2.51cto.com/images/blog/202410/05054640_67006240c155887667.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
优缺点:
优点:
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。
(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。缺点:
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
(2) 恢复数据时时间要比快照模式慢很多。![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iERb2bFS-1618317484010)(assets/1618315853178.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lVdGeus-1618317484010)(assets/1618315945437.png)] redis的key 空格_redis的key 空格_13](https://s2.51cto.com/images/blog/202410/05054641_6700624119b1147617.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)

8. redis集群搭建(万一宕机)
8.1 主从关系
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RKEB8IEL-1618317484011)(assets\1618303521697.png)] redis的key 空格_数据库_15](https://s2.51cto.com/images/blog/202410/05054641_67006241b5b7370664.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
配从不配主
准备工作:
1. 创建了一个目录 master-slave
2. 把redis配置文件复制到master-slave
redis7001.conf redis7002.conf redis7003.conf
3.分别修改上面三个文件的端口号以及rdb持久化文件的名称 并且aof关闭。
4. 启动redis时指定上面的三个配置文件![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9t0i5C9-1618317484012)(assets\1618304148441.png)] redis的key 空格_redis的key 空格_16](https://s2.51cto.com/images/blog/202410/05054642_670062420489f82929.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
查看三个redis节点的信息
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqglbDM1-1618317484012)(assets\1618304287908.png)] redis的key 空格_数据库_17](https://s2.51cto.com/images/blog/202410/05054642_670062424dfef11291.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
我们在7002和7003使用slaveof 127.0.0.1 7001 把7002和7003挂载7001上
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9ZvDsBS-1618317484013)(assets\1618304525852.png)] redis的key 空格_数据_18](https://s2.51cto.com/images/blog/202410/05054642_67006242a472a1174.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
验证:
主节点负责写,并把写的内容同步到从节点上。 从节点只能负责读操作。不能写操作。
思考:
主节点挂掉,从主节点是上位还是等待主节点的归来。
主节点挂掉,小弟等待老大得归来。如果这时,有一个新得节点加入到主从上了,新节点是否可以把之前得数据获取呢。
答案是可以的!
















