《redis实战》读书笔记

1、数据结构:
(1)String
  值:可以是字符串、整数或者浮点数
  功能:对整个字符串或者字符串的其中一部分执行操作;
  对整数和浮点数执行自增(increment)或者自减(decrement)操作
  命令:GET、SET、DEL
    INCR、DECR、INCRBY(加上整数amount)、DECRBY、INCRBYFLOAT(加上浮点数amount)
    APPEND、GETRANGE、SETRANGE、GETBIT、SETBIT、BITCOUNT、BITOP
(2)List
  值:一个链表,链表上的每个节点都包含了一个字符串
  功能:从链表的两端推入或者弹出元素;
  根据偏移量对链表进行修剪(trim);
  读取单个或者多个元素;
  根据值查找或者移除元素
  命令:RPUSH、LPUSH、LPOP、RPOP、LRANGE、LINDEX、LTRIM
    BLPOP、BRPOP
    RPOPLPUSH、BRPOPLPUSH
(3)Set
  值:包含字符串的无序收集器(unordered collection),并且被包含的每个字符串都不相同
  功能:添加、获取、移除单个元素;
    检查一个元素是否存在于集合中
    计算交集、并集、差集
    从集合里面随机获取元素
  命令:SADD、SMEMBERS(返回所有元素)、SISMEMBER(检查该元素是否存在)、SREM(移除一个或多个元素,并返回移除数量)
    SCARD(集合元素数量)、SRANDMEMBER、SPOP、SMOVE
    SDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE
(4)Hash
  值:包含键值对的无序散列表
  功能:添加、获取、移除单个键值对
    获取所有键值对
  命令:HSET、HGET、HGETALL、HDEL
    HMGET、HMSET、HDEL、HLEN
    HEXISTS、HKEYS、HVALS、HGETALL、HINCRBY、HINCRBYFLOAT
(5)Zset 有序集合
  值:字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定
  功能:添加、获取、删除单个元素
    根据分值范围(range)或者成员来获取元素
  命令:ZADD、ZRANGE、ZRANGEBYSCORE、ZREM、ZCARD、ZINCRBY、ZCOUNT、ZRANK、ZSCORE
    ZREVRANK、ZREVRANGE、ZRANGEBYSCORE、ZREVRANGEBYSCORE、ZREMRABGEBYRANK、ZREMRABGEBYSCORE、ZINTERSTORE、ZUNIONSTORE


2、发布和订阅
  缺点:
  (1)客户端读取消息的速度不够快的情况下,消息积压会使得redis输出缓存区的体积变得越来越大,可能导致redis变慢、崩溃或被操作系统杀死。新版redis不会出现这种问题:client-output-buffer-limit pubsub配置
  (2)客户端断线过程中的消息会丢失
  命令:
  SUBSCRIBE (订阅一个频道)UNSUBSCRIBE (退订频道)PUBLISH(向给定频道发送消息)PSUBSCRIBE、PUNSUBSCRIBE

3、事务
  特点:在不被打断(interruption)的情况下对多个键执行操作
  命令:WATCH、MULTI、EXEC、UNWATCH、DISCARD


4、持久化
(1)快照(snapshotting)
  配置:save 60 10000
    stop-writes-on-bgsave-error no
    rdbcompression yes
    dbfilename dump.rdb
  方式:redis会调用fork来创建一个子进程,子进程负责将快照写入硬盘,父进程继续处理命令
  缺点:当redis占用的内存越大,创建子进程的时间越多
    容易丢数据
(2)只追加文件(append-only file,AOF)
  配置:appendonly no
    appendfsync everysec(always、no)
    no-appendfsync-on-rewrite no
    auto-aof-rewirte-percentage 100
    auto-aof-rewrite-min-size 64mb
  方式:将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化
  缺点:生成的AOF文件占用空间较大,auto-aof-rewrite时同样面临创建子进程耗时的问题

5、主从复制(旧版redis)


6、工具
  分布式锁、计数信号量(semaphore)、任务队列(优先级任务、延迟任务)、消息拉取

9、降低内存占用
  相关命令:debug object(可查看编码格式)
  9.1 短结构
    9.1.1 压缩列表(ziplist)
    列表:
      底层实现:双向链表 doubly linked list
      list-max-ziplist-entries 512 (表示当list长度小于512时使用压缩列表)
      list-max-ziplist-value 64 (表示当list中的所有元素长度小于64时使用压缩列表)
    散列:
      底层实现:散列 hashtable
      hash-max-ziplist-entries 512
      hash-max-ziplist-value 64
    有序集合:
      底层实现:散列+跳跃表skiplist
      zset-max-ziplist-entries 512
      zset-max-ziplist-value 64
  9.1.2 整数集合(intset)
    集合:
    底层实现:散列 hashtable
      set-max-intset-entries 512 (表示当集合的成员数量在512内,并且这些整数处于有符号整数范围之内)
 9.2 分片(sharding)
   注:一种字典压缩算法

原文地址:https://www.cnblogs.com/chbjaycn/p/8493920.html