目录
1. 安装,修改配置
解压缩之后在redis目录中运行make命令
在redis.conf中修改配置,让redis可以后台运行
安装成功后默认在/usr/local/bin目录下
用这个config开启
链接redis
测试连接成功
关闭redis
2. redis5大基本类型
2.1 key
查看key是否存在
把key移动到其他库
设置过期时间
查看key的类型
2.2 String
在后面追加
显示key的值得长度
自增
自减
一次增加某个数
截取字符串
创建时设置过期时间
如果没有就创建
设置多个键值对
获取多个值
设置值得同时判断有没有该值并且设置过期时间
2.3 list
左插入,右插入,取值
删除元素
2.4 set
增加数据(不重复) 查询数据
查看数据个数 删除某个数据
再原有的数据池中随机几个数据
随机出栈
把k1中的某个数移动到k2
2.5 hash
存值和取值
多值存取和显示所有
获取所有的key
获取所有的value
2.6 zset
创建 score后面跟着value
获取
3 redis的持久化
当两者共存时redis先找aof
3.1 RDB
3.1.1 RDB是什么
每间隔一定的时间将内存中的数据集快照进磁盘
记录了最后的状态
redis会单独创建(fork)一个子进程来进行持久化,会将数据先写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换掉上次持久化好的文件。
整个过程中,主进程不进行任何IO操作,这就保证了RDB的性能,所以RDB比AOF更加高效。在对数据的完整性要求不高的时候,可以选择RDB,但是可能会导致最后一次持久化后数据丢失
3.1.2 fork
复制一个与当前进程完全一样的进程,保有所有的数据
3.1.3 存储
3600秒内有一次改动则进行RDB
300秒内有100次改动则进行rdb
...
3.1.4 触发dump.rbd的方式:
1. flushall
2. exit
3. save
4. 达到配置文件的要求
3.1.5 优点和缺点
优点:1. 适合大规模的数据恢复
2.对数据完整性和一致性要求不高
缺点: 1. redis意外down时会丢失最后一次快照后的所有修改
2. fork的时候,内存中的数据被克隆了一份,2倍的膨胀性需要考虑
3.2 AOF
打开AOF设置为yes
3.2.1 AOF是什么
aof以日志的方式记录了所有的写操作,只允许追加不可以改写文件
aof会将flushdb也会记录下来
3.2.2 aof恢复
aof文件损坏(认为,突然故障)redis无法启动
redis-check-aof --fix -aof文件
修复aof文件
3.2.3 ReWrite
aof采用追加的形式,会导致文件越来越大ReWrite解决了这个问题,新增文件重写机制。
redis会记录上一次重写时AOF的大小,默认配置是AOF文件是上次ReWrite后大小一倍且文件大小大于64M时触发
3.2.4 aof的优点和缺点
优点:可以设置每秒同步,每次同步和永不同步
在默认状态下,只会丢失1秒的数据
缺点:相同数据的情况下,AOF的文件会远远大于RDB的文件,恢复速度也会慢于RDB
运行效率慢于RDB
4. redis的事务
4.1 开启事务
4.2 执行
4.3 退出事务
所有命令都不执行
4.4 失败情况
1. 一个错误全体失败
2. 不是命令出错,那么其他正常都可以启动
4.5 watch 监视器
先监视再加事务 同时成功,同时失败
在监视时,被监视的数据进行修改,则会导致事务失败(乐观锁,CAS操作)
unwatch取消监视,但是set的值仍然会被修改
5. 消息订阅和发布(了解)
发布者(pub)订阅者(sub)
6. redis主从复制
6.1 作用:
1. 读写分离 (主机写,从机读)
2. 容灾恢复
6.2 一主二从
创建3台redis
查看集群命令
6380变成了6379的从机
从机无法写入数据
不加入哨兵主机宕机从机不会上位,主机修复会保持原样
从机宕机重新链接之后会变成master,变成从机需要slaveof命令
6.3 薪火相传
master的slaveof可以是下一个slaveof的msater,这样就可以减轻master的负担,去中心化
中间的从机仍然是从机即便是有从机把他当做主机
6.4 反客为主
当主机宕机之后,从机变成主机,需要手动配置
slaveof no one 命令可以使从机变成主机
此时宕机的主机回复之后单独成一套体系,下面不会有任何从机
6.5 哨兵模式
6.5.1 开启条件:
创建一个sentinel.conf的文件,文件里面配上
sentinel monitor 主机名(随便写) ip地址 端口号 数字(投票数高于这个数字直接变成主机)
6.5.2 启动哨兵
redis-sentinel sentinel.conf
主机宕机后,重新启动会变成从机
7. 集群
一个集群至少有3个主节点
去中心化,任何一台服务器都可以作为集群入口,如果此服务器无法处理,会转给下一台服务器处理
7.1 开启集群
7.1.1 配置文件
cluster-enabled yes # 打开集群模式
cluster-config-file nodes-6379.conf # 设置节点配置文件名
cluster-node-timeout 15000 # 设置节点失联时间,超过改时间(毫秒),集群自动进行主从切换
7.1.2 启动集群
redis全部启动,之后进入到redis目录下的src中(不是/usr/local/bin),使用redis-cli命令打开集群
-replicas 1 以最简单的方式配置集群 一主一从
redis-cli --cluster create --cluster-replicas 1 redisip地址 端口 redisip地址 端口......
7.2 连接集群
redis目录下的src中(不是/usr/local/bin)
redis-cli -c(以集群的方式启动) -p 6379(集群中任何一个端口都能连接)
cluster nodes查看集群信息
7.3 slot插槽
向集群插入数据时,redis会根据自身算法得出一个值,然后根据每个redis接收的slot分配到具体的redis中
计算出插槽的值是12706 在6381的接受范围内,存储到6381
集群无法一次插入多个数据,如插入多个数据,需要设置组
8. redis可能会出现的问题
8.1 缓存穿透
大量请求来查询,redis中查不到数据,导致数据库压力剧增,最终崩溃(redis没事,数据库崩了)
解决方法:
1. 对空值做缓存,并且设置空值的过期时间(1分钟)
2. 布隆过滤器
8.2 缓存击穿
redis中某个热点数据过期,大量请求访问了这个热点数据,reids查询不到了,就去查数据库,数据库承受不住崩溃
解决办法:
1.预先设置热门数据,加大时长
2.使用锁 查询不到时加锁,休眠一段时间,再次尝试,直到成功为止
8.3 缓存雪崩
在极短的时间内,大量的key过期,大量的数据进行访问,数据库,redis,服务器全都崩溃
解决办法:
1. 多级缓存
2. key的过期时间不同时过期