现在作为一个程序员,如果你不了解redis,或者没有使用过redis,我估计你都不好意思出去找工作,即使你有脸去找工作,我估计面试官也没脸让你进入公司。
Redis是什么?为什么几乎%的面试都会或多或少的提到它。为什么很多大公司都要求你会使用redis。答案就是这是你在开发过程中必不可少的一个软件应用。可能很多小公司不会使用它,但是只要有一定规模的应用,你一定会考虑使用redis,因为它对高并发和减少延迟起的作用太大了。
Redis从本质上来说数据库。数据库我们都知道,我们网站上看到的信息,用户提交的信息,所有的这些内容都会保存到数据库里面。常见的mysql,oracle,sqlserver这些都是我们熟悉的数据库,为什么有了它们,我们还要使用redis呢?因为redis数据库中的数据是保存在内存中的,而其它的数据库是保存在硬盘上的。硬盘和内存的访问速度,不用我说,大家也知道是天壤之别。正是因为人们觉得访问数据库成为了应用系统性能的瓶颈。人们就考虑如何提升数据库访问效率,于是内存数据库redis就诞生了。有了redis,从此我们访问数据变得异常高效。但是内存毕竟是有限的,所以我们都是根据28定律,把热数据(经常访问的数据)放到redis中,其它的数据依然使用mysql等数据库保存。
提到redis,面试官一般最先问的一定是它有哪些数据结构,那么redis都有哪些数据结构呢?
1字符串类型
2哈希类型
3列表类型
4集合类型
5有序集合类型
这些数据结构都是为了解决某种问题而设计的。
第二个问题就会问到redis既然是在内存中保存数据的,那么如果断电,数据丢失怎么办?其实这个问题就是问redis如何做持久化的,就是问redis如何把内存数据保存到硬盘上的。
Redis提供了2种持久化的方式,一种是RDB(REDISdatabase),一种是AOF(appendonlyfile).从字面我们就能知道大概的意思。Rdb就是对数据库做快照,就是保存数据库中的数据到文件。Aof就是保存命令,对数据变化的操作进行保存,很类似mysql的binlog就是保存操作。恢复的时候,批量执行命令即可恢复数据。
这两个是最主要的问题,当然随着你面试岗位级别的递进。面试官对你的要求也会加深,比如会问你一些底层原理,比如Redis中的字符串在c语言中是如何实现的,它和普通的字符串有什么区别。还会深入问你redis单进程如何实现高并发的。持久化的时候,具体是怎样的一个流程。当然也会问你一些redis中的参数配置,毕竟这是考验你是否真正使用过redis。
很多大公司的redis服务器都不止一台,有可能成百上千台,那就涉及到redis集群和分布式部署。Redis一直在等待着,也许有一天会有新的软件替代它,但是在那之前,它永远都在不停地激励着软件向前发展。