redis数据结构 lq

  1. string:
    • 常用命令:get、set、incr、decr、mget等
    • 应用场景:限制访问次数(限流)、验证码过期时间、热点数据缓存、访问量点击量存储、分布式锁、延时、
    • 实现方式:decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
  2. Hash:
    • 常用命令:hget、hset、hgetall等
    • 应用场景:存储对象。
    • 实现方式:Redis的Hash对应的Value内部实际就是一个HashMap,实际有两种不同的实现,如果成员较少时,Redis为了节省内存会采用类似一维数组方式存储,对应的value RedisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
  3. list:
    • 常用命令:lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。
    • 应用场景:消息队列。分页。
    • 实现方式:redis list的实现是一个双向链表,可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,redis内部的很多实现,包括发送缓冲队列等也都用的是这个数据结构。
  4. set:
    • 常用命令:sadd,srem,spop,sdiff ,smembers,sunion 等。
    • 应用场景:去重,求并集,交集,差集。
    • 实现方式:set内部实现是一个value永远为null的HashMap,实际就是通过hash的方式快速排重的。
  5. zset:
    • 常用命令:zadd,zrange,zrank,zscore,zrem,zcard等
    • 应用场景:排行榜,评论的排序(时间),权重数据的存储
    • 实现方式:Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
原文地址:https://www.cnblogs.com/rbwbear/p/15566313.html