美文网首页
《redis入门指南 》读书笔记

《redis入门指南 》读书笔记

作者: 清雨季 | 来源:发表于2019-04-24 14:12 被阅读0次

    前排提示 不适合大家学习用,只能用来自己复习

    命令

    字符串相关(可以保存二进制数据)

    SET,GET,INCR,DECR,INCRBY,DECRBY,APPEND,STRLEN,MGET,MSET,GETBIT,SETBIT,BITOP

    散列相关

    就是Map,比较灵活,字段可加减
    HSET HGET HMSET HMGET HGETALL HEXISTS: SET类可更新和插入,原来存在返回1,不存在返回0

    HSETNX(原子操作): 如果字段存在不做任何操作
    HINCRBY HDEL

    列表类型

    内部使用双向列表,只能保存字符串(2^32 - 1个元素)

    LPUSH RPUSH LPOP RPOP LLEN LRNG LREM LINDEX LSET LTRIM RPOPLPUSH

    集合类型

    SADD SREM SMEMBERS SISMEMBER

    SDIFF(SDIFFSTORE) A B = A - B

    SINTER(SINTERSTORE) A B = A 交 B

    SUNION(SUNIONSTORE) A B = A 并 B

    SCARD SRANDMEMBER(正数不同,负数可能相同,桶链结构,随机桶再随机元素)

    SPOP

    有序集合

    ZADD ZSCORE ZRANGE ZREVRANGE ZRANGEBYSCORE ZINCRBY(增加分数)

    ZCARD ZCOUNT ZREMREANGEBYRANK ZREMREANGEBYSCORE ZRANK ZREVRANK

    ZINTERSTORE 求并集

    事务

    MULTI 开启事务

    EXEC 提交事务

    没有事务回滚的功能

    事务中有错误语法时事务无法提交成功,事务中有运行错误时正确的部分语句会提交成功

    WATCH UNWATCH 监控key,有点像乐观锁

    EXPIRE : 设置过期时间
    TTL:返回剩余过期时间,单位秒
    PERSIST:取消设置的过期时间
    EXPIREAT PEXPIREAT
    maxmemory-policy,设置缓存淘汰规则:

    • volatile-lru 限时数据lru
    • volatile-ttl 限时数据最短命
    • volatile-random 限时数据随机
    • allkeys-lru 所有数据lru
    • allkeys-random 所有数据随机
    • noeviction 不允许

    SORT: 排序
    SORT ALPHA

    实现队列

    BRPOP : 阻塞式右弹出,可以用于优先级队列

    发布订阅:PUBLISH SUBSCRIBE UNSUBSCRIBE

    管道通信技术

    内存优化技术

    • 精简键名和键值
    • 优化内部编码
      OBJECT ENCODING 可以查看内部编码类型

    内部使用 RedisObject 来保存键值信息

    struct redisObject {
        type,       类型
        notused,    
        encoding,   数据结构
        lru,        
        refcount,
        *ptr        数据
    }
    
    String 类型的优化

    默认使用sdshdr结构体(len, free, buf[]),如果保存的是数字则改用long

    如果是0-9999的数字则会复用共享共间,如果配置了maxmemory时,则不会使用共享对象

    散列优化

    使用了ziplist和hashtable来保存
    如果键数 < hash-max-ziplist-entries 且 每个键值的长度都小于 hash-max-ziplist-value,则会使用hashtable


    图片.png
    图片.png
    列表优化

    可能使用ziplist和linkedlist,使用list-max-ziplist-entries list-max-ziplist-value

    集合类型

    可以使用intset 和 hashtable
    使用intset条件:元素都是整数而且个数小于set-max-intset-entries
    intset 结构:

    typedef struct intset {
       encoding,
       length,
       contents[]
    }
    
    有序集合类型

    有可能是skiplist或者是ziplist
    zset-max-ziplist-entries 和 zset-max-ziplist-value
    当使用跳表时,会使用散列表来保存键到分数的信息

    备份

    RDB:
    save 900 90 表示900秒内有90次写操作,就会备份
    fork一个子进程,与父进程共享内存,父进程接受到写请求要改数据时会先把原数据复制一份给子进程
    子进程进行复制

    AOP:
    在执行写操作时,会把redis协议内容写到AOP文件里,AOP文件可以设置定时优化(超过上一次优化后在大小百分比,最小优化大小)
    由于磁盘30s缓存一次,可以指定每次写后刷一次缓存,每秒刷缓存,不主动刷缓存

    复制

    启动从库:redis-server --port 6380 --slaveof 127.0.0.1 6379
    切换监听的主库:SLAVEOF

    复制原理:

    1)从库发送SYNC命令给主库

    2)主库执行一次RBD备份,并缓存开启备份后的新请求命令

    3)备份完成后把备份文件发给从库,并且把缓存的命令也发给从库

    4)从库把收到的文件放到备份文件中,执行一次恢复的过程

    serve-stale-data no : 从库备份时不响应请求

    主库崩溃时从库选取方案:

    SLAVEOF NO ONE 从库晋升为主库

    安全

    bind 绑定地址

    requirepass 设置密码

    masterauth 从库设置主库密码

    rename-command 命令重命名

    通信协议

    简单协议:命令使用空格分开
    统一请求协议:类似于字符串回复

    五种回复:错误回复(-),数字回复(:) 状态回复(+) 字符串回复($) 多行字符串回复(*)

    集群

    主从:一主多从,主库禁用备份,从库可选开启
    开启无硬盘复制:repl-diskless-sync yes
    全量复制:基本RBD备份
    增量复制:主库更新后把更新内容记录在队列中,从库断线重连时如果在队列中有从库最重的数据,则可以增量复制,主库还有一个ID,以便确认从库之前确实是跟主库同步的

    哨兵模式

    • 从配置文件中找出要监控的主库
    • 建立两条链接,一条订阅主库的sentinel: hello 频道,另一个定时向主库发送INFO命令

    相关文章

      网友评论

          本文标题:《redis入门指南 》读书笔记

          本文链接:https://www.haomeiwen.com/subject/nfmwgqtx.html