Redis操作及原理

Redis基础说明

命令 说明
集合 唯一、无序
有序集合 有序、可增加属性 如得分 topn
列表 有序,不唯 如最新发布
散列 如javabean
keys * 所有数据
eists a 是否存在a
flushall 数据会全部清空
flushdb 清空当前库
expire keyname seconds 固定时间后数据删除,缓存使用加事物,可以通过expire对缓存定时更新
ttl keyname 一个键的过期时间
persist keyname 数据永久存储
multi … exec redis事务开关
maxemory 最大内存,最近最少使用替代
maxmemory-policy volatile-lru 内存占满时数据处理的方式
publish channel.name message 消息发布
subscribe channel.name 接受消息
unsubscribe chennel.name 退订
save 900 1 当有一条Keys数据被改变时,900秒刷新到Disk一次
save 300 10 当有10条Keys数据被改变时,300秒刷新到Disk一次
save 60 1000 当有10000条Keys数据被改变时,60秒刷新到Disk一次
appendonly yes 开启aof
appendfilename appendonly.aof aof配置文件
no-appendfsync-on-rewrite yes 在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。
auto-aof-rewrite-percentage 100 当前AOF文件大小是上次日志重写得到AOF文件大小的二倍时,自动启动新的日志重写过程。
auto-aof-rewrite-min-size 64mb 当前AOF文件启动新的日志重写过程的最小值,避免刚刚启动Reids时由于文件尺寸较小导致频繁的重写。
appendfsync everysec 每秒执行写入都会执行同步
maxmemory-policy 内存不足”时,数据清除策略,默认为”volatile-lru”
slaveof ip port 前节点定为后节点的slave
slaveof no one 切换为主数据库,脱离原有集群
repl-diskless-sync yes 开启无硬盘复制 ,主从复制内容不写盘
slowlog get 耗时的命令集合

Redis持久化说明

RDB:
  • Slave向Master发出同步请求,Master先dump出rdb文件,然后将rdb文件全量传输给slave,然后Master把缓存的命令转发给Slave,初次同步完成。Master将变量的快照直接实时依次发送给各个Slave。但不管什么原因导致Slave和Master断开重连都会重复以上两个步骤的过程。Redis的主从复制是建立在内存快照的持久化基础上的,只要有Slave就一定会有内存快照发生。
  • 可以很明显的看到,RDB有它的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的。从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。
AOF:
  • 以日志的形式记录每个操作,将Redis执行过的所有指令全部记录下来(读操作不记录),只许追加文件但不可以修改文件,Redis启动时会读取AOF配置文件重构数据换句话说,就是Redis重启就会根据日志内容从头到尾执行一次来完成数据的恢复工作。
RDB与AOF的选择:

当数据量大,且对恢复速度有要求,并且数据的一致性要求不高的话,可以只使用RDB。RDB数据不实时,同时使用两者时服务器只会找AOF文件,可不可以只使用AOF?建议不要,因为RDB更适合备份数据库(AOF在不断变化,不好备份),快速重启,而且不会又AOF可能潜在的BUG,留作万一的手段。

Redis数据恢复说明:

  • 数据恢复前要确保数据已经经过save命令了,就是数据已经存盘了,如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用CONFIG命令:redis 127.0.0.1:6379> CONFIG GET dir1) “dir”2) “/usr/local/redis/bin”
    以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。

  • 在数据恢复方面:
    RDB的启动时间会更短,原因有两个:
    一是RDB文件中每一条数据只有一条记录,不会像AOF日志那样可能有一条数据的多次操作记录。所以每条数据只需要写一次就行了。
    另一个原因是RDB文件的存储格式和Redis数据在内存中的编码格式是一致的,不需要再进行数据编码工作,所以在CPU消耗上要远小于AOF日志的加载。

  • 当Redis服务器挂掉时,重启时将按照以下优先级恢复数据到内存:1.如果只配置AOF,重启时加载AOF文件恢复数据;2. 如果同时配置了RDB和AOF,启动是只加载AOF文件恢复数据;3. 如果只配置RDB,启动是将加载dump文件恢复数据也就是说,AOF的优先级要高于RDB,这也很好理解,因为AOF本身对数据的完整性保障要高于RDB。

猜你喜欢

转载自blog.csdn.net/qq_40990732/article/details/80853327