美文网首页
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