五大数据类型
- String:最基本数据类型,一个key对应一个 value;
- 二进制安全,意思是,可包含任何数据,比如图片或者序列化对象;一个value最大能存储512M。
- Hash:String类型的 field 和 value 的映射表,特别适合存储对象。
- List:简单的字符串列表,可双向添加数据。
- Set:无需集合,底层通过哈希表实现,所以添加、删除、查找的复杂度都是O(1)。
- Zset:有序集合,不允许重复数据;不同的是每个元素都会关联一个double类型的分数,redis正式通过分数来为集合中的成员进行从小到大的排序。(zset的成员是惟一的,但是分数是可以重复)
rdb(Redis DataBase)
-
是什么:在指定时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时将快照文件直接读到内存里
-
Redis会单独创建(fork)一个子进程,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要大规模的数据恢复,且对于数据恢复的完整性不是非常敏感,RDB比AOF更加的高效,RDB缺点是最后一次持久化后的数据可能丢失
-
这个fork跟git的fork含义不一样,这里的fork的含义:复制一个与当前进程一样的进程,新的进程的所有数据(变量,环境变量,程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。
-
保存的文件名字 dump.rdb
文件的生成位置,260行左右dir ./
默认是,你启动redis.conf的目录 -
默认三种触发条件(配置策略)
- 15分钟内改了1次
- 5分钟内改了10次
- 1分钟内改了10000次
-
优势
- 恢复速度快(适合大规模数据的恢复)
- 节省磁盘空间
-
劣势
- 会丢失最后一次快照后所有修改
- fork的时候,内存的数据被克隆了一份,大致2倍的膨胀性需要考虑
aof(Append Only File)
-
是什么:以日志形式开记录每个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只需追加文件,不需改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写命令从前到后执行一次已完成数据的恢复工作
-
默认是关闭的,默认文件名字:appendonly.aof,生成位置跟dump.rdb位置一样
-
由于网络或者其他原因造成appendonly.aof出错,使用
redis-check-aof --fix applendony.aof
修复,在/usr/local/bin
路径下使用reis-check-aof
命令 -
配置策略
- appendfsync always:同步持久化 每次发生数据裱更都会被立即记录到磁盘,性能较差但数据完整性较好
- appendfsync everysec:默认设置,异步操作,每秒记录,如果一秒内宕机,有数据丢失
- appendfsync no:从不同步
-
优势
- 只对一个文件进行追加操作;
- aof文件体积过大时,会自动的在后台对aof重写;
- 有序的保存了对数据库执行的所有写入操作,这些操作一redis协议的格式保存,很容易读懂
-
劣势
- 相同弄数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb
- aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
建议同时开启两种持久化方式,两种持久化方式同时开启时,先使用的是aof
主从复制,读写分离
-
是什么:主机数据更新后根据配置和策略,自动执行到备机的(master/slaver)机制,Master以写为主,Slave以读为主,
info replication
查看主从复制的信息 -
怎么用:备机上:
slaveof 127.0.0.1 6379
每次备机与主机断开连接都需要重新连接,除非写进备机的conf文件 -
从(备)机:只能get,不能set
-
上一个的Slave可以是下一个salve的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个master,可以有效减轻master的压力
-
反客为主:从机跟随的主机挂掉了,从机使用
slaveof no one
可以使自己变为主机 -
哨兵模式(sentinel):反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动从备机转换为主机
-
自定义目录新建sentinel.conf文件(名字不能出错)
-
编写文件:
sentinel monitor hostname 127.0.0.1 6379 1
hostname:自定义主机名字,1表示被监视的主机挂掉之后,得票数多者作为主机(若多位从机得票数最多且相同,再重新投票,直至新的主机产生)。
-
启动哨兵:
redis-sentinel /xxx/xxx/sentinel.conf
-
在主机挂掉之后,从机转化为主机,以前的主机恢复之后,作为现在主机的一个从机
-
-
缺点:由于所有的写操作都是现在master上操作,然后同步更新到slave上,所以从master同步到salve上有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,salve机器数量的增加也会使这个问题更加严重