redis学习

[toc]

redis

数据结构

image.png

字符串

  • setnx可以作为分布式锁的实现方法;
  • 内部编码

字符串类型的内部编码有3种:

·int:8个字节的长整型。

·embstr:小于等于39个字节的字符串。

·raw:大于39个字节的字符串。

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。


哈希表

  • 内部编码

- ziplist
- hashtable

当field个数比较少且没有大的value时,内部编码为ziplist:
当有value大于64字节,内部编码会由ziplist变为hashtable:
当field个数超过512,内部编码也会由ziplist变为hashtable:



  • ziplist


    image.png
  • 场景
    • 复杂api频控

列表

  • 内部编码


- ziplist
- linkedlist

当元素个数较少且没有大元素时,内部编码为ziplist
当元素个数超过512个,内部编码变为linkedlist:
或者当某个元素超过64字节,内部编码也会变为linkedlist:



  • 场景
    • lpush+lpop=Stack(栈)
    • lpush+rpop=Queue(队列)
    • lpsh+ltrim=Capped Collection(有限集合)
    • lpush+brpop=Message Queue(消息队列)

集合

  • 内部编码


- intset
- hashtable


当元素个数较少且都为整数时,内部编码为intset:
当元素个数超过512个,内部编码变为hashtable:
当某个元素不为整数时,内部编码也会变为hashtable:


  • 场景
    • 用户标签
    • spop/srandmember=Random item(生成随机数,比如抽奖)
    • sadd+sinter=Social Graph(社交需求)

有序集合

  • 内部编码

ziplist
skiplist

当元素个数较少且每个元素较小时,内部编码为ziplist:
当元素个数超过128个,内部编码变为skiplist:
当某个元素大于64字节时,内部编码也会变为hashtable:


  • skiplist


    image.png
  • 场景
    • 排行榜

其他

  • 纯内存存储、IO多路复用技术、单线程架构是造就Redis高性能的三个因素
  • 由于Redis的单线程架构,所以需要每个命令能被快速执行完,否则会存在阻塞Redis的可能,理解Redis单线程命令处理机制是开发和运维Redis的核心之一。
  • move、dump+restore、migrate是Redis发展过程中三种迁移键的方式,其中move命令基本废弃,migrate命令用原子性的方式实现了dump+restore,并且支持批量操作,是Redis Cluster实现水平扩容的重要工具。
  • scan命令可以解决keys命令可能带来的阻塞问题,同时Redis还提供了hscan、sscan、zscan渐进式地遍历hash、set、zset。

你可能感兴趣的:(redis学习)