17
###Redis面试题1、什么是 winarRedis?Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis ubuntu 11 10 下载不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Redis 支持数据的备份,即 master-slave 模式的数据备份。Redis 优势性能极高 – 天正建筑2013破解版Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC指令包起来。丰富的特性 – Redis 还支持 cdr12绿色版下载publish/subscribe, 通知, key 过期等等特性。2、Redis 与其他 key-value 存储有什么不同?Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis array_push的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能 大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操 作起来非常简单,这样 Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。.rtcscls-1-p_0 { }.rtcscls-1-p_1 { }.rtcscls-1-p_10 { }.rtcscls-1-p_11 { line-height: 135.41666666667%; }.rtcscls-1-p_12 { line-height: 100%; }.rtcscls-1-p_13 { line-height: 100%; }.rtcscls-1-p_14 { }.rtcscls-1-p_15 { }.rtcscls-1-p_16 { }.rtcscls-1-p_17 { line-height: 100%; }.rtcscls-1-p_2 { }.rtcscls-1-p_3 { line-height: 200%; }.rtcscls-1-p_4 { line-height: 100%; }.rtcscls-1-p_5 { }.rtcscls-1-p_6 { }.rtcscls-1-p_7 { line-height: 135.41666666667%; }.rtcscls-1-p_8 { line-height: 137.08333333333%; }.rtcscls-1-p_9 { line-height: 100%; }.rtcscls-1-r_0 { }.rtcscls-1-r_1 { }.rtcscls-1-r_10 { font-size: 18px;font-weight: 700; }.rtcscls-1-r_11 { }.rtcscls-1-r_12 { }.rtcscls-1-r_13 { font-size: 18px; }.rtcscls-1-r_14 { font-size: 18px;font-weight: 700; }.rtcscls-1-r_15 { font-size: 18px;font-weight: 700; }.rtcscls-1-r_16 { }.rtcscls-1-r_17 { }.rtcscls-1-r_18 { }.rtcscls-1-r_19 { }.rtcscls-1-r_2 { font-size: 18px; }.rtcscls-1-r_20 { }.rtcscls-1-r_21 { }.rtcscls-1-r_22 { font-size: 18px; }.rtcscls-1-r_23 { font-size: 18px; }.rtcscls-1-r_24 { }.rtcscls-1-r_25 { }.rtcscls-1-r_3 { font-size: 18px; }.rtcscls-1-r_4 { font-size: 18px;font-weight: 700; }.rtcscls-1-r_5 { font-size: 18px;font-weight: 700; }.rtcscls-1-r_6 { font-size: 18px; }.rtcscls-1-r_7 { font-size: 18px;vertical-align: bottom!important; }.rtcscls-1-r_8 { font-size: 18px; }.rtcscls-1-r_9 { font-size: 18px;font-weight: 700; }.rtcscls-1-s_p_16_rId_a3 { }.rtcscls-1-s_p_19_rId_a4 { line-height: 136.25%; }.rtcscls-1-s_p_22_rId_a5 { border-bottom: 1px solid #000000;text-align: center; }.rtcscls-1-s_p_5_rId_1 { outlineLvl: 0; }.rtcscls-1-s_p_8_rId_2 { line-height: 135.41666666667%;outlineLvl: 1; }.rtcscls-1-s_r_0 { font-size: 18px; }.rtcscls-1-s_r_1 { }.rtcscls-1-s_r_17_rId_a3 { font-size: 18px; }.rtcscls-1-s_r_23_rId_a5 { font-size: 18px; }.rtcscls-1-s_r_25_rId_a6 { font-size: 18px; }.rtcscls-1-s_r_27_rId_a7 { font-size: 18px; }.rtcscls-1-s_r_29_rId_a8 { font-size: 18px; }.rtcscls-1-s_r_3_rId_a { }.rtcscls-1-s_r_6_rId_1 { font-size: 18px;font-weight: 700; }.rtcscls-1-s_r_9_rId_2 { font-size: 18px;font-weight: 700; }.rtcscls-1-s_sn_10_rId_a0 { }.rtcscls-1-s_sn_11_rId_a1 { }.rtcscls-1-s_sn_13_rId_TableNormal { }.rtcscls-1-s_sn_15_rId_a3 { }.rtcscls-1-s_sn_18_rId_a4 { }.rtcscls-1-s_sn_20_rId_TableParagraph { }.rtcscls-1-s_sn_21_rId_a5 { }.rtcscls-1-s_sn_24_rId_a6 { }.rtcscls-1-s_sn_26_rId_a7 { }.rtcscls-1-s_sn_28_rId_a8 { }.rtcscls-1-s_sn_2_rId_a { }.rtcscls-1-s_sn_4_rId_1 { }.rtcscls-1-s_sn_7_rId_2 { }.rtcscls-1-s_tbl_12_rId_a1 { }.rtcscls-1-s_tbl_14_rId_TableNormal { }.rtcscls-2-p_0 { line-height: 100%; }.rtcscls-2-s_p_16_rId_a3 { }.rtcscls-2-s_p_19_rId_a4 { line-height: 136.25%; }.rtcscls-2-s_p_22_rId_a5 { border-bottom: 1px solid #000000;text-align: center; }.rtcscls-2-s_p_5_rId_1 { outlineLvl: 0; }.rtcscls-2-s_p_8_rId_2 { line-height: 135.41666666667%;outlineLvl: 1; }.rtcscls-2-s_r_0 { font-size: 18px; }.rtcscls-2-s_r_1 { }.rtcscls-2-s_r_17_rId_a3 { font-size: 18px; }.rtcscls-2-s_r_23_rId_a5 { font-size: 18px; }.rtcscls-2-s_r_25_rId_a6 { font-size: 18px; }.rtcscls-2-s_r_27_rId_a7 { font-size: 18px; }.rtcscls-2-s_r_29_rId_a8 { font-size: 18px; }.rtcscls-2-s_r_3_rId_a { }.rtcscls-2-s_r_6_rId_1 { font-size: 18px;font-weight: 700; }.rtcscls-2-s_r_9_rId_2 { font-size: 18px;font-weight: 700; }.rtcscls-2-s_sn_10_rId_a0 { }.rtcscls-2-s_sn_11_rId_a1 { }.rtcscls-2-s_sn_13_rId_TableNormal { }.rtcscls-2-s_sn_15_rId_a3 { }.rtcscls-2-s_sn_18_rId_a4 { }.rtcscls-2-s_sn_20_rId_TableParagraph { }.rtcscls-2-s_sn_21_rId_a5 { }.rtcscls-2-s_sn_24_rId_a6 { }.rtcscls-2-s_sn_26_rId_a7 { }.rtcscls-2-s_sn_28_rId_a8 { }.rtcscls-2-s_sn_2_rId_a { }.rtcscls-2-s_sn_4_rId_1 { }.rtcscls-2-s_sn_7_rId_2 { }.rtcscls-2-s_tbl_12_rId_a1 { }.rtcscls-2-s_tbl_14_rId_TableNormal { }3、Redis 的数据类型?Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zsetsorted set:有序集合)。我们实际项目中比较常用的是 string,hash 如果你是 Redis 中高级用户,还需要加上下面几种数据结构 HyperLogLog、Geo、Pub/Sub。如果你说还玩过 Redis Module,像 BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。4wmv用什么播放器、使用 Redis 有哪些好处?1msvcp71 dll丢失、速度快,因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是 O1)2、支持丰富数据类型,支持 string,list,set,Zset,hash 等3、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行4、丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除5、京东商城抢购Redis 电脑眼睛保护色相比 Memcached 有哪些优势?1、Memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类2、Redis 的速度比 Memcached 快很3、Redis 可以持久化其数据6、Memcache 与 Redis 的区别都有哪些?1、存储方式 Memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis有部份存在硬盘上,这样能保证数据的持久性。2、数据支持类型 Memcache 对数据类型支持相对简单。 Redis 有复杂的数据类型。3、使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。 Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。7、Redis 是单进程单线程的?.rtcscls-3-p_0 { }.rtcscls-3-p_1 { line-height: 136.25%; }.rtcscls-3-p_10 { }.rtcscls-3-p_11 { }.rtcscls-3-p_12 { line-height: 136.25%; }.rtcscls-3-p_13 { }.rtcscls-3-p_14 { line-height: 134.58333333333%; }.rtcscls-3-p_15 { }.rtcscls-3-p_16 { line-height: 100%; }.rtcscls-3-p_17 { }.rtcscls-3-p_2 { line-height: 136.25%; }.rtcscls-3-p_3 { line-height: 100%; }.rtcscls-3-p_4 { line-height: 100%; }.rtcscls-3-p_5 { }.rtcscls-3-p_6 { }.rtcscls-3-p_7 { line-height: 100%; }.rtcscls-3-p_8 { line-height: 120%; }.rtcscls-3-p_9 { line-height: 125%; }.rtcscls-3-r_0 { font-size: 18px; }.rtcscls-3-r_1 { font-size: 18px;font-weight: 700; }.rtcscls-3-r_10 { }.rtcscls-3-r_11 { font-size: 18px; }.rtcscls-3-r_12 { }.rtcscls-3-r_13 { }.rtcscls-3-r_14 { }.rtcscls-3-r_2 { font-size: 18px;font-weight: 700; }.rtcscls-3-r_3 { }.rtcscls-3-r_4 { }.rtcscls-3-r_5 { }.rtcscls-3-r_6 { }.rtcscls-3-r_7 { }.rtcscls-3-r_8 { }.rtcscls-3-r_9 { }.rtcscls-3-s_p_16_rId_a3 { }.rtcscls-3-s_p_19_rId_a4 { line-height: 136.25%; }.rtcscls-3-s_p_22_rId_a5 { border-bottom: 1px solid #000000;text-align: center; }.rtcscls-3-s_p_5_rId_1 { outlineLvl: 0; }.rtcscls-3-s_p_8_rId_2 { line-height: 135.41666666667%;outlineLvl: 1; }.rtcscls-3-s_r_0 { font-size: 18px; }.rtcscls-3-s_r_1 { }.rtcscls-3-s_r_17_rId_a3 { font-size: 18px; }.rtcscls-3-s_r_23_rId_a5 { font-size: 18px; }.rtcscls-3-s_r_25_rId_a6 { font-size: 18px; }.rtcscls-3-s_r_27_rId_a7 { font-size: 18px; }.rtcscls-3-s_r_29_rId_a8 { font-size: 18px; }.rtcscls-3-s_r_3_rId_a { }.rtcscls-3-s_r_6_rId_1 { font-size: 18px;font-weight: 700; }.rtcscls-3-s_r_9_rId_2 { font-size: 18px;font-weight: 700; }.rtcscls-3-s_sn_10_rId_a0 { }.rtcscls-3-s_sn_11_rId_a1 { }.rtcscls-3-s_sn_13_rId_TableNormal { }.rtcscls-3-s_sn_15_rId_a3 { }.rtcscls-3-s_sn_18_rId_a4 { }.rtcscls-3-s_sn_20_rId_TableParagraph { }.rtcscls-3-s_sn_21_rId_a5 { }.rtcscls-3-s_sn_24_rId_a6 { }.rtcscls-3-s_sn_26_rId_a7 { }.rtcscls-3-s_sn_28_rId_a8 { }.rtcscls-3-s_sn_2_rId_a { }.rtcscls-3-s_sn_4_rId_1 { }.rtcscls-3-s_sn_7_rId_2 { }.rtcscls-3-s_tbl_12_rId_a1 { }.rtcscls-3-s_tbl_14_rId_TableNormal { }Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。8、一个字符串类型的值能存储最大容量是多少?512M9、Redis持久化机制.rtcscls-4-p_0 { line-height: 100%; }.rtcscls-4-p_1 { }.rtcscls-4-p_3 { }.rtcscls-4-p_4 { }.rtcscls-4-p_5 { }.rtcscls-4-r_0 { }.rtcscls-4-r_1 { }.rtcscls-4-r_2 { font-size: 18px; }.rtcscls-4-r_3 { }.rtcscls-4-r_4 { }.rtcscls-4-r_5 { }.rtcscls-4-r_6 { font-size: 18px; }.rtcscls-4-r_7 { font-size: 18px; }.rtcscls-4-r_8 { font-size: 18px;font-weight: 700; }.rtcscls-4-r_9 { font-size: 18px;font-weight: 700; }.rtcscls-4-s_p_16_rId_a3 { }.rtcscls-4-s_p_19_rId_a4 { line-height: 136.25%; }.rtcscls-4-s_p_22_rId_a5 { border-bottom: 1px solid #000000;text-align: center; }.rtcscls-4-s_p_5_rId_1 { outlineLvl: 0; }.rtcscls-4-s_p_8_rId_2 { line-height: 135.41666666667%;outlineLvl: 1; }.rtcscls-4-s_r_0 { font-size: 18px; }.rtcscls-4-s_r_1 { }.rtcscls-4-s_r_17_rId_a3 { font-size: 18px; }.rtcscls-4-s_r_23_rId_a5 { font-size: 18px; }.rtcscls-4-s_r_25_rId_a6 { font-size: 18px; }.rtcscls-4-s_r_27_rId_a7 { font-size: 18px; }.rtcscls-4-s_r_29_rId_a8 { font-size: 18px; }.rtcscls-4-s_r_3_rId_a { }.rtcscls-4-s_r_6_rId_1 { font-size: 18px;font-weight: 700; }.rtcscls-4-s_r_9_rId_2 { font-size: 18px;font-weight: 700; }.rtcscls-4-s_sn_10_rId_a0 { }.rtcscls-4-s_sn_11_rId_a1 { }.rtcscls-4-s_sn_13_rId_TableNormal { }.rtcscls-4-s_sn_15_rId_a3 { }.rtcscls-4-s_sn_18_rId_a4 { }.rtcscls-4-s_sn_20_rId_TableParagraph { }.rtcscls-4-s_sn_21_rId_a5 { }.rtcscls-4-s_sn_24_rId_a6 { }.rtcscls-4-s_sn_26_rId_a7 { }.rtcscls-4-s_sn_28_rId_a8 { }.rtcscls-4-s_sn_2_rId_a { }.rtcscls-4-s_sn_4_rId_1 { }.rtcscls-4-s_sn_7_rId_2 { }.rtcscls-4-s_tbl_12_rId_a1 { }.rtcscls-4-s_tbl_14_rId_TableNormal { }Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持 久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程 写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出, 内存释放。RDB是Redis默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二 进制文件。即Snapshot快照存储,对应产生的数据文件为dump.rdb,通过配置文件中的save盈通主板怎么样参数来定 义快照的周期。( 快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。)AOF:Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当两种方式同时 开启时,数据恢复Redis会优先选择AOF恢复。10、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题一、缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期 时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据 库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。解决办法:大多数系统设计者考虑用加锁( 最多的解决方案)或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。还有一个简单方案就时讲缓 存失效时间分散开。二、缓存穿透缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在 缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请 求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。.rtcscls-5-p_0 { line-height: 100%; }.rtcscls-5-p_1 { line-height: 100%; }.rtcscls-5-p_10 { line-height: 100%;text-align: justify; }.rtcscls-5-p_11 { }.rtcscls-5-p_12 { line-height: 100%;text-align: justify; }.rtcscls-5-p_2 { line-height: 100%; }.rtcscls-5-p_3 { line-height: 100%; }.rtcscls-5-p_4 { }.rtcscls-5-p_5 { }.rtcscls-5-p_6 { line-height: 100%; }.rtcscls-5-p_7 { line-height: 100%;text-align: justify; }.rtcscls-5-p_8 { line-height: 129.16666666667%; }.rtcscls-5-p_9 { }.rtcscls-5-r_0 { }.rtcscls-5-r_1 { }.rtcscls-5-r_2 { }.rtcscls-5-r_3 { }.rtcscls-5-r_4 { font-size: 18px; }.rtcscls-5-r_5 { }.rtcscls-5-r_6 { }.rtcscls-5-s_p_16_rId_a3 { }.rtcscls-5-s_p_19_rId_a4 { line-height: 136.25%; }.rtcscls-5-s_p_22_rId_a5 { border-bottom: 1px solid #000000;text-align: center; }.rtcscls-5-s_p_5_rId_1 { outlineLvl: 0; }.rtcscls-5-s_p_8_rId_2 { line-height: 135.41666666667%;outlineLvl: 1; }.rtcscls-5-s_r_0 { font-size: 18px; }.rtcscls-5-s_r_1 { }.rtcscls-5-s_r_17_rId_a3 { font-size: 18px; }.rtcscls-5-s_r_23_rId_a5 { font-size: 18px; }.rtcscls-5-s_r_25_rId_a6 { font-size: 18px; }.rtcscls-5-s_r_27_rId_a7 { font-size: 18px; }.rtcscls-5-s_r_29_rId_a8 { font-size: 18px; }.rtcscls-5-s_r_3_rId_a { }.rtcscls-5-s_r_6_rId_1 { font-size: 18px;font-weight: 700; }.rtcscls-5-s_r_9_rId_2 { font-size: 18px;font-weight: 700; }.rtcscls-5-s_sn_10_rId_a0 { }.rtcscls-5-s_sn_11_rId_a1 { }.rtcscls-5-s_sn_13_rId_TableNormal { }.rtcscls-5-s_sn_15_rId_a3 { }.rtcscls-5-s_sn_18_rId_a4 { }.rtcscls-5-s_sn_20_rId_TableParagraph { }.rtcscls-5-s_sn_21_rId_a5 { }.rtcscls-5-s_sn_24_rId_a6 { }.rtcscls-5-s_sn_26_rId_a7 { }.rtcscls-5-s_sn_28_rId_a8 { }.rtcscls-5-s_sn_2_rId_a { }.rtcscls-5-s_sn_4_rId_1 { }.rtcscls-5-s_sn_7_rId_2 { }.rtcscls-5-s_tbl_12_rId_a1 { }.rtcscls-5-s_tbl_14_rId_TableNormal { }数据,缓存,内存,数据库,支持,进行,文件,访问