一篇文章读懂redis( 二 )

  • zset类型(为每个元素都关联一个分数) 有序集合和list对比相同点:两者都有序,两者都可以获得某一范围内的元素区别:列表访问两边数据很快,访问中间数据很慢 。有序集合都很快有序列表可以调整元素位置,通过分数实现;有序集合耗内存zadd key score member, zrange/zrevrange key start stop [withscores],zscore key,zrem, zrangebyscore key min max, zincrby key increment member, zcard key(当前集合中元素数量)zcount key min max(指定分数范围内元素的个数), zremrangebyrank key start stop, zrank/zrevrank key member
  •  
    • 通用命令keys, del, exists, expire key, ttl key(剩余生存时间), persist key(清除生存时间), pexpire key milliseconds(生存时间设置单位为毫秒), rname oldkey newkey, type key,
     
    redis事务介绍(指一组命令的集合)redis使用multi, exec, discard, watch, unwatch实现事务
    redis不支持事务回滚
    执行multi后,Redis会将命令逐个放入队列中,然后用exce执行这个队列中的命令
    而watch是在multi之前,watch某个属性,表示我这个multi块中可能要修改该属性,如果multi块中的命令在未执行前有客户端修改了该请求,那么该multi块中的命令就会执行失败 。
    redis持久化(指的是持久化到磁盘)redis持久化的方式有两种,RDB和AOF
    RDB(redis默认方式)rdb是使用快照(snapshotting)的方式进行持久化的
    触发快照的时机
    • 符合自定义的快照规则
    • 执行save或者bgsave命令注: save命令是阻塞的,执行bgsave时会fork出一个进程进行保存,非阻塞的
    • 执行flushall命令注:线上一般要禁止掉flushall(删除所有数据库的所有 key),flushdb(删除当前数据库的所有key), keys *等命令在redis配置文件中添加:rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command KEYS ""
    • 执行主从复制操作
    redis获取所有数据库:
    config get databases(默认有16个数据库,index从0开始)
    select 0选择数据库
    快照规则(或的关系)save 900 1 “**15分钟内有1次修改就进行快照”**
    save 300 10 “**5分钟内有10次修改就进行快照”**
    save 60 10000 “**1分钟内有10000次修改就进行快照”**
    dir ./ 指定快照地址(rdb文件地址)
    dbfilename dump.rdb
    快照过程
    1. Redis调用系统fork函数复制出一份当前进程的副本(子进程)
    2. 子进程开始将内存中的数据写入到硬盘中的临时文件
    3. 用临时文件替代旧的rdb文件(经过压缩的二进制文件)
    优缺点
    • 缺点: 一旦Redis异常退出,就将丢失最后一次快照后更改的所有数据
    • 优点: rdb可以最大化Redis的性能
    AOFAOF: 每执行一条更改,Redis就会将该命令写入AOF文件. 实际上是先写入到硬盘缓存,然后通过硬盘缓存刷新机制保存到文件 。
    appendfsync always
    appendfsync everysec(默认)
    appendfsync no(由系统进行sync)
    默认关闭,打开是appendonly yes
    在数据量比较大的时候,频繁的写入和修改,aof文件会变得非常臃肿,所以我们可以设置重写规则:
    • auto-aof-rewrite-min-size:64m
    • auto-aof-rewrite-percentage:100
     
    RDB 和 AOF比较RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储 。
    AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录 。
     
    数据库备份和灾难恢复定时生成RDB 快照(snapshot)非常便于进行数据库备份,并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快 。
    Redis 支持同时开启 RDB 和 AOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,这样丢失的数据会最少 。
    RDB 和 AOF ,我应该用哪一个如果你非常关心你的数据,但仍然可以承受数分钟以内的数据丢失,那么你可以只使用 RDB 持久 。
    AOF 将 Redis 执行的每一条命令追加到磁盘中,处理巨大的写入会降低 Redis 的性能,不知道你是否可以接受 。
    redis主从复制
    • 只需要在从服务器的配置文件中添加:slaveof 192.168.1.123 6379
    • 主从复制保证了即使有服务器宕机,也能保证对外提供服务 。
    • 当进行主从复制时,不会阻塞 。
    • 一个从服务器也可能是另一台服务器的主
    原理:
    分为全量同步和增量同步


    推荐阅读