1.set和sortedset类型的命令
1.1. set集合命令
redis中的value类型为set集合类型,特点:无需且不能重复的数据。
sadd key element element... -- 存放set类型的元素。
smembers key -- 获取指定key对应的所有元素。
srandmember key [number] -- 随机获取集合中一个或多个元素
sinter key key -- 求多个集合的交集
spop key -- 随机移除一个或多个元素
1.2. sorted set集合命令
它和set的区别就是在添加元素时需要指定一个分数,该分数用来排序的。
zadd key element score element score -- 添加有序集合
zrange key start end -- 从分数小到大的顺序获取集合中的元素
zrevrange start end -- 返回有序集合中指定区间内的成员,通过索引,分数从高到底
2.redis的应用场景
热点数据的缓存:减少对数据库的访问频率,提供的应用程序的效率
限时业务的运用:比如短信验证码
计数器相关问题:比如点赞关注数
排行榜相关问题:比如销售量、观看量等
分布式锁:比如synchronized自动锁和lock手动锁
3.redis的持久化
什么是持久化:把内存中的数据保存到磁盘的过程。防止数据丢失。
redis持久化的方式:
第一种:RDB快照模式:每一段时间对redis内存中的数据进行拍照存储。
第二种:AOP日志追加模式:把每个写命令通过write函数追加到日志文件中。
3.1RDB快照模式
每一段时间对redis内存中的数据进行拍照存储。他是redis默认的持久化方式。
优点:数据恢复速度快。
缺点:可能会出现丢失最后一段时间的数据,数据完整性比较差。
RDB持久化方式的触发机制有两种方式:
第一种:手动触发
save和bgsave命令:持久化到磁盘中并且名字叫dump.rdb
save和bgsave的区别:
save:
该命令会阻塞当前redis服务器,执行save命令期间,redis不能处理其他命令,知道RDB过程完成为止。执行完成时候如果存在老的RDB文件,就把新的代替掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取
bgsave:
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以相应客户端请求
第二种:自动触发
修改redis的配置文件,底层使用的是bgsave。
测试20秒触发3次改变是否进行rdb持久化
先删除dump.rdb文件
测试:添加k1 k2 k3触发三次改变,成功进行了rdb持久化
3.2AOF日志模式
把每个写命令通过write函数追加到日志文件中。当redis启动时会读取日志文件中的命令,并把这些命令由上到下执行一遍
优点:数据完整性好
缺点:数据恢复慢
默认redis没有开启aof模式。如果需要开启需要修改配置文件
设置之后重启redis服务:多了一个appendonlydir
通过写命令时会保存到日志文件中:
4.redis集群模式
第一种:主从模式
第二种:哨兵模式
第三种:集群分片模式
4.1主从模式
搭建主从模式:原则配从不配主
需要准备三台redis服务,一台主节点(192.168.61.223)两台从节点(192.168.61.224)(192.168.61.225)。
分别启动redis
查看三台redis的角色
info replication
现在三台都为主
配置主从关系:
slaveof ip port
ip:主节点的ip
port: 主节点的port
配置两台从节点
再次查看三台redis的角色
如果主节点增加一些数据,那么所有从节点也会同步数据
主节点可以负责读写操作,但是从节点只负责读操作
如果新增一个从节点,那么该节点可以把主节点的数据同步过来
如果主节点宕机了从节点也不能上位,所以我们需要学习以下的哨兵模式
4.2哨兵模式
如果主节点宕机那么,应该让从节点自动上位,那么就需要哨兵模式
哨兵服务会检测主节点是否有问题,如果有问题则会在从节点中选举出一个作为从节点
准备一台哨兵服务,需要修改配置文件
启动哨兵:
redis-sentinel sentinel.conf
测试关闭主节点:
shutdown
发现主节点关闭后它选举了从节点01最为主节点
测试把MASTER复活,看看slave01是否会把master角色让给MASTER
把master重新启动发现变成了slave。