-
什么是redis?
- Redis:REmote DIctionary Server(远程字典服务器)
是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行
并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。 - redis的三个特点。
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- Redis支持数据的备份,即master-slave模式的数据备份
- Redis的五大数据类型: string hash list set zset
- string(字符串)
- string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
- string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
- string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M
- hash(哈希,类似java里的Map)
- Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。类似Java里面的Map
- list(列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
它的底层实际是个链表 - set(集合)
- Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,
- zset(sorted set:有序集合)
- Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分 数。 redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
- Redis:REmote DIctionary Server(远程字典服务器)
-
RDB(Redis DataBase)
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。rdb 保存的是dump.rdb文件 -
AOF(Append Only File)
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis
重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作 -
默认AOF方式是开启还是关闭? 关闭
如何开启AOF?修改默认的appendonly no,改为yes -
正常恢复的方式?
- 修改默认的appendonly no,改为yes
- 将有数据的aof文件复制一份保存到对应目录(config get dir)
- 恢复:重启redis然后重新加载
-
异常恢复的方式?
- 修改默认的appendonly no,改为yes
- 备份被写坏的AOF文件
- redis-check-aof --fix进行修复
- 恢复:重启redis然后重新加载
-
redis的重写rewrite是什么?
AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,
当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,
只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof -
redis的重写的触发机制?
Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发
AOF的三种同步机制,以及各自的利弊?
每修改同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
每秒同步:appendfsync everysec 异步操作,每秒记录 如果一秒内宕机,有数据丢失
不同步:appendfsync no 从不同步 -
RDB与AOF简单小结:
- RDB持久化方式:能够在指定的时间间隔能对你的数据进行快照存储
- AOF持久化方式:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些
命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.
Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大
只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
-
两种持久化方式是否能够同时开启? 可以
RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。 -
那要不要只使用AOF呢?
作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),
快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。 -
Redis的复制(Master/Slave) 也就是我们所说的主从复制,Master以写为主,Slave以读为主
能干嘛?- 读写分离
- 容灾恢复
-
怎么玩?
-
配从(库)不配主(库)
从库配置:slaveof 主库IP 主库端口 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
查看详细:info replication -
修改配置文件细节操作
1,拷贝多个redis.conf文件
2,开启daemonize yes
3,pid文件名字
4,指定端口
5,log文件名字
6,dump.rdb名字
-
-
Redis集群配置常用3招
- 一主二仆 一个Master多个Slave
- 日志查看
主机
备机日志
info replication
- 一主二仆 一个Master多个Slave
-
薪火相传
上一个Slave可以是下一个slave的Master,Slave同样可以接收其他
slaves的连接和同步请求,那么该slave作为了链条中下一个的master,
可以有效减轻master的写压力
中途变更转向:会清除之前的数据,重新建立拷贝最新的
slaveof 新主库IP 新主库端口 -
反客为主
SLAVEOF no one 使当前数据库停止与其他数据库的同步,转成主数据库 -
关于一主二从需要思考的问题
-
复制原理
- slave启动成功连接到master后会发送一个sync命令
- Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,
在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
-
哨兵模式(sentinel)
是什么?反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库 -
怎么玩(使用步骤)
- 自定义的/myredis目录下新建sentinel.conf文件,名字绝不能错
- 配置哨兵,填写内容 sentinel monitor 被监控数据库名字(自己起名字) eg: 127.0.0.1 6379 1
上面最后一个数字1,表示主机挂掉后salve投票看让谁接替成为主机,得票数多少后成为主机 - 启动哨兵 redis-sentinel /myredis/sentinel.conf
-
问题:如果之前的master重启回来,会不会双master冲突? 不会,master重启回来会成为slave
-
另外需要注意 一组sentinel能同时监控多个Master
-
复制的缺点:
redis
最新推荐文章于 2022-02-05 11:04:34 发布