美文网首页
Redis常见问题与解答

Redis常见问题与解答

作者: Real_man | 来源:发表于2019-02-11 10:18 被阅读50次

    常见Redis问题

    1. Redis为什么这么快?
      答:
    • 数据结构简单,采用HashMap,HashMap的数据查找时间复杂度是O(1)
    • 操作比较简单,常用的set,get
    • 其内部的数据结构是经过专门设计的,自己底层做了一些优化
    • 采用单线程,避免了不必要的同步操作,(加锁,多线程协调)
    • 使用多路复用IO模型,多路是多个网络连接,复用指的是一个线程,利用select,poll, epoll同时检查多个IO事件,空闲的时候阻塞当前线程,如果有事件,就从阻塞态唤醒。epoll是只轮询那些真正发出了事件的流。

    参考:为什么说Redis是单线程的以及Redis为什么这么快!

    1. Redis采用多线程会有什么问题?
      肯定就没有这么快了,整个软件的设计也会有很大的变动,不知道还会不会这么流行,像Memcache虽然是多线程,但是它只支持字符串。

    多线程的要做很多同步的处理,设计上复杂,redis可能不会像现在那样的轻量级

    1. Redis支持哪几种数据结构;
      HashMap,Set, Sorted Set,Geo Hash,String,List常用的五种。

    具体参考:Redis数据类型及使用场景

    1. Redis的跳跃表
    • 跳跃表是一种随机化数据结构,查找、添加、删除操作都可以在对数期望时间下完成。
    • 跳跃表目前在 Redis 的唯一作用,就是作为有序集类型的底层数据结构(之一,另一个构成有序集的结构是字典)。
    • 为了满足自身的需求,Redis 基于 William Pugh 论文中描述的跳跃表进行了修改,包括:
      score 值可重复。
      • 对比一个元素需要同时检查它的 score 和 memeber 。
      • 每个节点带有高度为 1 层的后退指针,用于从表尾方向向表头方向迭代。

    参考:Redis设计与实现-跳跃表

    1. Redis的分布式问题,如何能实现分布式锁,分布式锁操作的原子性,Redis内部是如何实现的?

    使用set的原子性命令

    set key value [EX seconds] [PX milliseconds] [NX|XX]
    
    • EX: key在多少秒之后过期
    • PX:key在多少毫秒之后过期
    • NX: 当key不存在的时候,才创建key,效果等同于setnx
    • XX:当key存在的时候,覆盖key

    参考:Redis实现分布式锁

    最后

    待完善

    相关文章

      网友评论

          本文标题:Redis常见问题与解答

          本文链接:https://www.haomeiwen.com/subject/osnfeqtx.html