经验App:聚合职场优选内容Java成长之路互联网科技

【面试】吃透了这些Redis知识点,面试官一定觉得你很NB(干货

2019-04-19  本文已影响165人  Java_老男孩

是数据结构而非类型

很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义。redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们按照合理的格式解码后,可以变成一个字符串,整数或对象,此时才具有数据类型。

集群带来的问题与解决思路

集群对命令操作的取舍

单线程模型

除此之外,选择单线程还有以下这些原因:

1、redis都是对内存的操作,速度极快(10W+QPS)

2、整体的时间主要都是消耗在了网络的传输上

3、如果使用了多线程,则需要多线程同步,这样实现起来会变的复杂

4、线程的加锁时间甚至都超过了对内存操作的时间

5、多线程上下文频繁的切换需要消耗更多的CPU时间

6、还有就是单线程天然支持原子操作,而且单线程的代码写起来更简单

事务

事务大家都知道,就是把多个操作捆绑在一起,要么都执行(成功了),要么一个也不执行(回滚了)。redis也是支持事务的,但可能和你想要的不太一样,一起来看看吧。

redis事务具有以下特点:

1、如果开始执行事务前出错,则所有命令都不执行

2、一旦开始,则保证所有命令一次性按顺序执行完而不被打断

3、如果执行过程中遇到错误,会继续执行下去,不会停止的

4、对于执行过程中遇到错误,是不会进行回滚的

看完这些,真想问一句话,你这能叫事务吗?很显然,这并不是我们通常认为的事务,因为它连原子性都保证不了。保证不了原子性是因为redis不支持回滚,不过它也给出了不支持的理由。

不支持回滚的理由:

1、redis认为,失败都是由命令使用不当造成

2、redis这样做,是为了保持内部实现简单快速

3、redis还认为,回滚并不能解决所有问题

哈哈,这就是霸王条款,因此,好像使用redis事务的不太多

管道

协议

简单了解下redis的协议,知道redis的数据传输格式。

发送请求的协议:

例如,SET name lixinjie,实际发送的数据是:

*3\r\n$3\r\nSET\r\n$4\r\nname\r\n$8\r\nlixinjie\r\n

接受响应的协议

例如,

+OK\r\n

-ERR Operation against\r\n

:1000\r\n

$6\r\nfoobar\r\n

*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\n

可见redis的协议设计的非常简单。


喜欢这篇文章的朋友可以点个喜欢,也可以关注一下我的个人专题:Java成长之路

针对于上面所涉及到的知识点我总结出了有1到5年开发经验的程序员在面试中涉及到的绝大部分架构面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。

资料获取方式: QQ群搜索“708-701-457” 即可免费领取



上一篇 下一篇

猜你喜欢

热点阅读