Redis 的一些面试题

Redis 的一些面试题

1、Redis的高并发和快速原因

1、redis 是基于内存的, 内存的读写速度非常快
2、redis是单线程的,可以省去许多上下文切换线程的时间
3、redis是使用多路I/O复用技术,可以处理并发的链接(客户端的链接不占用线程资源,只有当命令成功发送的时候,才会进入单线程,然后依次执行)
多路: 多个socket 多个客户端 多个黑窗口
复用:复用那一个线程
在这里插入图片描述

2、为什么Redis是单线程?

因为Redis是基于内存操作的,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽 既然单线程比较容易实现,而且 CPU是不是Redis的瓶颈,那么就顺理成章的使用单线程方案了。

3.Redis 的优劣势

  单进程单线程的优势
	代码简单,处理逻辑更清晰
  单进程单线程的劣势
	无法发挥多核CPU的性能,不过可以通过 单机开发多个redis的实例来完善

4.Redis中的数据类型有哪些?

1、String:字符串类型,一个key对应一个值,可以储存任何内容,视频和图片都可以,但是大小不能超过512m以内
2、List:列表类型,一个key对应多个值,值可以重复
3、Set:集合类型,一个key对应多个值,值不能重复
4、Hash:散列类型, key后面继续跟field属性,从而来确定一个值
5、zSet:有序集合类型,一个key对应多个值,有序不重复集合,可以自动排序

5.跳表的原理是什么?

跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。redis的zset类型的底层就是用了这种数据结构

6.了解Redis的事务机制吗?

Redis通过MULTI、EXEC、WATCH等命令来实现事务机制的,事务执行的过程是将一系列多个命令按照顺序依次执行,并且在事务执行期间,事务不会被中断,也不会去执行客户端的其他请求,直到所有的事务执行完毕,事务执行过程如下:
1.服务端收到客户端的请求,事务以MULTI开始,
2.如果客户端正处于事务状态,则会把事务放到队列同时返回给客户端QUEUED,反之则直接执行这个命令,
3.当收到客户端EXEC命令时,WATCH命令监视整个事务中的key是否被修改,如果有则返回给客户端空表示执行失败,否则redis会遍历整个事务队列,执行队列里保存的所有命令,最后返回结果给客户端。

WATCH的机制本身是一个CAS的机制,被监视的key会被保存到一个链表中,如果某个key被修改,那么REDIS_DIRTY_CAS标志将会被打开,这时服务器会拒绝执行事务。

猜你喜欢

转载自blog.csdn.net/weixin_47898467/article/details/120543425