常见Redis问题
- Redis为什么这么快?
答:
- 数据结构简单,采用HashMap,HashMap的数据查找时间复杂度是O(1)
- 操作比较简单,常用的set,get
- 其内部的数据结构是经过专门设计的,自己底层做了一些优化
- 采用单线程,避免了不必要的同步操作,(加锁,多线程协调)
- 使用多路复用IO模型,多路是多个网络连接,复用指的是一个线程,利用select,poll, epoll同时检查多个IO事件,空闲的时候阻塞当前线程,如果有事件,就从阻塞态唤醒。epoll是只轮询那些真正发出了事件的流。
参考:为什么说Redis是单线程的以及Redis为什么这么快!
- Redis采用多线程会有什么问题?
肯定就没有这么快了,整个软件的设计也会有很大的变动,不知道还会不会这么流行,像Memcache虽然是多线程,但是它只支持字符串。
多线程的要做很多同步的处理,设计上复杂,redis可能不会像现在那样的轻量级
- Redis支持哪几种数据结构;
HashMap,Set, Sorted Set,Geo Hash,String,List常用的五种。
具体参考:Redis数据类型及使用场景
- Redis的跳跃表
- 跳跃表是一种随机化数据结构,查找、添加、删除操作都可以在对数期望时间下完成。
- 跳跃表目前在 Redis 的唯一作用,就是作为有序集类型的底层数据结构(之一,另一个构成有序集的结构是字典)。
- 为了满足自身的需求,Redis 基于 William Pugh 论文中描述的跳跃表进行了修改,包括:
score 值可重复。- 对比一个元素需要同时检查它的 score 和 memeber 。
- 每个节点带有高度为 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实现分布式锁
最后
待完善
网友评论