《Redis DevOps》二:API的理解和使用-Redis的五种数据结构

概述

  1. 数据结构与内部编码


优点:
1)改进内部编码时,对外数据结构与命令无影响
2)多种内部编码适配不同使用场景

  1. 单线程架构
    单线程访问快速的原因:
    1)纯内存访问
    2)非阻塞IO,epoll的I/O多路复用技术
    3)避免了线程切换和竞态的消耗

5种数据结构

字符串string

  1. 命令
    get/set/del/mset/mget/incr/decr/incrby/decrby/incrbyfloat/append/strlen/setrange/getrange
  2. 内部编码
    1. int: 8字节的长整型
    2. embstr: 长度小于等于39的字符串
    3. raw: 长度大于39的字符串
  3. 典型应用场景
    1. 缓存
    2. 计数
    3. 共享session
    4. 限速

哈希hash

  1. 命令

    hset/hget/hdel/hlen/hgetall/hmget/hmset/hexists/hkeys/hvals/hsetnx/hincrby/hincrbyfloat/hstrlen

  2. 内部编码

    1. ziplist: hash-max-ziplist-entries 512,hash-max-ziplist-value 64B,更为节约内存
    2. hashtable: 对比ziplist读写效率下降,复杂度O(1)
  3. 典型应用场景

    1. 存储结构性数据

列表list(有序、可重复)

  1. 命令

    lpush/rpush/linsert/{lrange lindex llen}/{lpop rpop lrem ltrim}/lset/

  2. 内部编码

    1. ziplist: list-max-ziplist-entries 512,list-max-ziplist-value 64B,更为节约内存
    2. linkedlist
  3. 典型应用场景

    1. 消息队列:lpush + brpop
    2. 文章列表

集合set(无序、不重复)

  1. 命令
    1. 集合内:sadd/srem/scard/sismember/spop/smembers
    2. 集合间:sinter/sunion/sdiff/
  2. 内部编码
    1. intset: set-max-intset-entries 512,整数
    2. hashtable
  3. 典型应用场景
    1. 标签,sadd -> Tagging, spop/srandmember 抽奖,sdiff + dinter 社交网络

有序集合(有序、不重复)

  1. 命令
    1. 集合内:zadd/zcard/zscore/{zrank zrevrank}/zrem/zincrby/{zrange zrevrange}/{zrangebyscore zrevrangebyscore}/zcount/zremrangebyrank/zremrangebyscore
    2. 集合间: zinterstore/zunionstore
  2. 内部编码
    1. ziplist: zset-max-ziplist-entries 512,zset-max-ziplist-value 64B,更为节约内存
    2. skiplist: 读写效率下降
  3. 典型应用场景
    1. 排行榜系统
posted @ 2022-12-13 23:19  雪梨大佬  阅读(24)  评论(0编辑  收藏  举报