linux全局查询redis Redis为何设计为单线程?

[更新]
·
·
分类:互联网
4029 阅读

linux全局查询redis

Redis为何设计为单线程?

Redis为何设计为单线程?

redis的一个特点是读写速度快,这就很容易让人误以为redis是多线程的。因为大家想当然的会认为多线程的效率要比单线程高,其实不然。
BAT的一个对redis有很深了解的高级工程师曾经说过,redis就是如果所有数据都在内存里,那么单线程是效率最高的。为什么这么说呢,多线程的本质是CPU模拟出多个线程去操作,但是模拟是有代价的,学过操作系统的朋友应该知道,多线程之间切换是要切换上下文的,这也是对时间的一种消耗。所以,对于单处理器来说,当然是单线程,无切换才是最高效率的。redis就是用一块CPU绑定了一块内存,然后对数据的操作都是在这块内存上进行的,基于此,单线程的redis已经达到了效率最大化。
我们用实际数据来说明。
一次CPU内存的切换大约需要1500ns,从内存中读取1MB的数据,大概需要250us,就算我一次只读1MB的数据,读1000次之后,消耗在内存切换上这种非功能性过程上的消耗就达到了1500us,这个时间开销任谁看都是不值。
此外,基于redis的单线程,我们还可以利用它提供的set key field value加nx参数的方式,来实现分布式锁。众所周知,redis并不适合做数据持久层,更多的是取代memcache做缓存,做分布式架构的支撑。分布式架构势必就要面临如何实现分布式锁的问题,通过上面的接口,无论多少个分布式节点,都可以准确的获取分布式锁。
具体使用方式如下:通常来说,set函数是不管field字段是否存在,只要写入成功就会返回1,但是如果增加了NX参数,那么如果field值在redis中已经存在,就会返回空,否则才返回1。因此用这个函数来执行获取分布式锁操作,如果返回值不为空,则加锁成功,否则代表有其他线程在操作数据,当前请求需要等待。
此外,还有PX,XX参数,具体含义见如下文档。
以上是我的浅见,欢迎各位在下方与我交流沟通。
我是苏苏思量,来自BAT的Java开发工程师,每天分享科技类见闻,欢迎各位关注我,与我共同进步。

Linux找工作难么,要学会哪些技能才能找到工作?

好不好找,匹配以下几点你就知道了!
其实找工作最忌讳的一点就是好像什么都懂,又好像什么都不懂。我的一个学弟,大学毕业的时候,自信满满的进入了一家企业,(在学校的时候也是什么都学了一点,平时自己还会自学)结果上级交代任务,这些技术点他这个也在学校听过,那个也在学校听过,但是实际让他操作,什么也不会了。
造成这些原因其一,是因为学校教的知识较浅,学的东西都是皮毛,也只是皮毛,而且他也没有都掌握,其二,也是最重要的一点自学时如果遇到问题,也只是百度,答案辣么多,你能确定哪个是对的?
下面我来仔细说一下Linux的职业规划。
一、基础运维
1.桌面运维
2.机房维护
3.网管
这是运维的入门级工作岗位,岗位属性来说对运维的技术要求并不是特别高,所以很多人会认为运维是一个很好入门的行业,再者就是从企业的角度出发
普通企业:对运维的需求不大,所以这个岗位的薪资不会很高,企业更不会注重岗位人员的能力提升问题,这类人就像是四条腿的蛤蟆,一抓一大把。
大型企业:对运维人员要求较高不管是学历还是技术,相应的工资也会较高,但是并没有什么卵用如果你自身学历和技术达到不了这个水平你也只能看着了!
这样的工作在一线城市的工资最多就是3-5K的样子
二、中级运维
1.应用运维工程师:这个岗位的工程师就开始负责各种网络服务、应用系统、监控系统的搭建和后期的维护,进行自动化脚本开发的工作,并根据项目对系统进行性能优化。
2.系统运维工程师:每天会负责登陆系统查看系统的负荷状态,有没有出现报错状态。并且根据报错情况作出一个排查解决的过程,作为一个系统运维工程师对系统的后期保养和维护当然是必不可少的一个环节了并且还需要不定期的对所负责的系统进行优化。达到这些Linux的水平之后薪资就可以达到8-10K。当然了还是那句话,根据所在的城市不一样这个薪酬上也会有不同。
三、高级运维工程师
这个阶段的你,需要在Linux运维的技术上进行深度挖掘,从而凸显出以下几种技术
1、云计算技术
2、自动化技术
3、大数据
4、AI智能
以上每一种技术都需要在高级运维工程师的技术基础上搭配不同程度的Java的技术方可完成这样的技术在一线城市中薪资一般在14K上下浮动,根据城市不同工资浮动不同。
Linux运维的岗位很多,祝你早日可以找一份好的工作!