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。