一.特殊数据类型Geospatial
主要引用于 “附近的人”,可以存地理位置,添加:
获取两地的距离(如图是获取北京到上海的距离):
可以看到更多命令的网站:https://www.redis.net.cn/order/以一个纬度,经度为中心,在规定半径范围内寻找:
以一个存入的地名为中心,规定半径范围内查找:
因为geospatial的底层用的就是Zset,所以在查找所有元素的命令,跟Zset是一样的。
二.特殊数据类型Hyperloglog
这个特殊基本类型主要是用在取两者的并集。
三.特殊数据类型Bitmap
运用 场景,打卡,录取一周的打卡记录,1为打卡,0为未打卡。
四.Redis的事务
Redis的事务本质是 一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行。
具有一次性,顺序性,排他性的特点,Redis的事务没有隔离级别的概念。
所有的命令在压入事务中,并不会执行,而是执行了exec命令后,才会一起执行。
Redis的单条命令是具有原子性的,但是Redis的事务不具有原子性。
Discard命令是取消事务,压入事务中的 操作都不会执行。
Redis的事务可以对比一下Java的编译期和运行期,在编译期间出错,会导致整个事务失败,在运行期间出错,只有出错的命令失败。
编译期错误:
运行期错误:
watch 上锁。若事务未执行完,数据发生改变,则放弃事务。
unwatch是解锁
关于Redis设置密码:
配置文件里面搜索 /requirepass
去除前面的#即可。
每次登陆是 使用auth+密码登录
五.Redis的持久化
Redis的持久化分为RDB和AOF两种,前者是Redis的默认持久化方式。
1.RDB(Redis DataBase)
在配置文件中,有这样的规则,这是快照,意思分别是,900s内操作了一次就保存,300s内操作了10次就保存,一分钟内操作10000次就保存。
Redis是内存数据库,如果没有持久化,那么数据将是断电即失的。
rdb的默认位置是跟配置文件一个目录里。名字就叫dump.rdb
RDB的工作流程:
触发机制:
2.AOF(Append only File)
默认是不开启的,我们需要去配置文件手动设置。
重启Redis就可以生效了。
AOF是将所有的写操作都记录下来,然后下次进入Redis的时候,会将记录的写操作都执行一遍,在高并发的情况下这是非常耗时间的。
当Aof的持久化文件有错误的时候,Redis是无法启动的,所以Redis有一个自带的修复工具
六.Redis的发布订阅
很简单,就两个命令 subscribe 订阅号 ,public 订阅号 内容
往jr这个订阅号发送了一个Hello。
七.Redis的主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点
(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。
Master以写为主,Slave 以读为主。
简单搭建一个Redis集群
一 .将配置文件 redis.conf 多复制几份
修改每个配置文件中的相应的数据。
1.端口:
2.pid文件:
3.日志文件的名字:
4.持久化文件的名字:
二.启动三个配置文件的Redis
Redis单机情况下默认都是主机。
所以只需要配置从机就可以了。使用 slaveof host port 就是认谁做主机。如图就是认 端口号为 6379的作为主机,
可以使用 info replication 来查看当前机器是从机还是主机。
从配置文件 认谁做主机:
我这里是以81为主机进行操作:
两个从机都无法进行写操作但是可以获得主机写的数据:
当主机宕机时,从机可以使用 slave no one进行谋朝篡位当主机。主机宕机:
6379进行篡位变为主机:
其他的从机就要重新选择主机,80选择79当主机:
当初的主机回来也只能重新选择当从机或者主机(我这里选择当从机):
此时的79就有了两个从机。
但是这种手动设置的方式太过麻烦,所以就有了哨兵模式。哨兵模式:
自选老大模式,弄一个哨兵监视着服务器,隔一段时间发消息,如果服务器没有回应,则认为是服务器宕机,就会重新投票(随机)选取一个主机。
创建哨兵模式:在原来放redis.conf的地方创建一个 sentinel.conf
并在配置文件中写入
启动哨兵:
如果主机宕机,哨兵模式会在一定时间之后再从从机中选取一个作为主机,宕机的主机回来以后,只能回归于新的主机之下当从机。