zoukankan      html  css  js  c++  java
  • 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,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
  • 相关阅读:
    JavaScript观察者模式
    JavaScript装饰者模式
    使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
    6.3 基于二分搜索树、链表的实现的集合Set复杂度分析
    解决uni-app props 传递数组修改后不能使用问题
    6.2 集合和映射--集合Set->底层基于链表实现
    6.1 集合和映射--集合Set->底层基于二叉搜索树实现
    【刷题记录
    【codeforces
    【loj
  • 原文地址:https://www.cnblogs.com/rbwbear/p/15566313.html
Copyright © 2011-2022 走看看