关于redis:这20道Redis经典面试题你还不会就别去面试了
本系列会零碎的整顿MySQL,Redis,SSM框架,算法,计网等面试常问技术栈的面试题,本文次要是整顿分享了Redis相干的面试题,MySQL、Spring、JVM之前曾经更新了,须要的同学也能够去看一下,心愿对正在筹备秋招的你们有所帮忙! 当然集体整顿的所有面试题都无偿分享,只求大伙一个点赞关注转发三连,这些文档都放在文末了,须要的同学能够自取1. 什么是Redis?它次要用来什么的?Redis,英文全称是Remote Dictionary Server(近程字典服务),是一个开源的应用ANSI C语言编写、反对网络、可基于内存亦可长久化的日志型、Key-Value数据库,并提供多种语言的API。 与MySQL数据库不同的是,Redis的数据是存在内存中的。它的读写速度十分快,每秒能够解决超过10万次读写操作。因而redis被广泛应用于缓存,另外,Redis也常常用来做分布式锁。除此之外,Redis反对事务、长久化、LUA 脚本、LRU 驱动事件、多种集群计划。 2.说说Redis的根本数据结构类型大多数小伙伴都晓得,Redis有以下这五种根本类型: String(字符串)Hash(哈希)List(列表)Set(汇合)zset(有序汇合)它还有三种非凡的数据结构类型 GeospatialHyperloglogBitmap2.1 Redis 的五种根本数据类型 String(字符串)简介:String是Redis最根底的数据结构类型,它是二进制平安的,能够存储图片或者序列化的对象,值最大存储为512M简略应用举例: set key value、get key等利用场景:共享session、分布式锁,计数器、限流。外部编码有3种,int(8字节长整型)/embstr(小于等于39字节字符串)/raw(大于39个字节字符串)C语言的字符串是char[]实现的,而Redis应用SDS(simple dynamic string) 封装,sds源码如下: struct sdshdr{ unsigned int len; // 标记buf的长度 unsigned int free; //标记buf中未应用的元素个数 char buf[]; // 寄存元素的坑}SDS 结构图如下: Redis为什么抉择SDS构造,而C语言原生的char[]不香吗? 举例其中一点,SDS中,O(1)工夫复杂度,就能够获取字符串长度;而C 字符串,须要遍历整个字符串,工夫复杂度为O(n)Hash(哈希)简介:在Redis中,哈希类型是指v(值)自身又是一个键值对(k-v)构造简略应用举例:hset key field value 、hget key field外部编码:ziplist(压缩列表) 、hashtable(哈希表)利用场景:缓存用户信息等。留神点:如果开发应用hgetall,哈希元素比拟多的话,可能导致Redis阻塞,能够应用hscan。而如果只是获取局部field,倡议应用hmget。字符串和哈希类型对比方下图: List(列表)简介:列表(list)类型是用来存储多个有序的字符串,一个列表最多能够存储2^32-1个元素。简略实用举例:lpush key value [value ...] 、lrange key start end外部编码:ziplist(压缩列表)、linkedlist(链表)利用场景:音讯队列,文章列表,一图看懂list类型的插入与弹出: list利用场景参考以下: lpush+lpop=Stack(栈) lpush+rpop=Queue(队列) lpsh+ltrim=Capped Collection(无限汇合) lpush+brpop=Message Queue(音讯队列) Set(汇合) 简介:汇合(set)类型也是用来保留多个的字符串元素,然而不容许反复元素简略应用举例:sadd key element [element ...]、smembers key外部编码:intset(整数汇合)、hashtable(哈希表)留神点:smembers和lrange、hgetall都属于比拟重的命令,如果元素过多存在阻塞Redis的可能性,能够应用sscan来实现。利用场景:用户标签,生成随机数抽奖、社交需要。有序汇合(zset)简介:已排序的字符串汇合,同时元素不能反复简略格局举例:zadd key score member [score member ...],zrank key member底层外部编码:ziplist(压缩列表)、skiplist(跳跃表)利用场景:排行榜,社交需要(如用户点赞)。2.2 Redis 的三种非凡数据类型Geo:Redis3.2推出的,地理位置定位,用于存储地理位置信息,并对存储的信息进行操作。HyperLogLog:用来做基数统计算法的数据结构,如统计网站的UV。Bitmaps :用一个比特位来映射某个元素的状态,在Redis中,它的底层是基于字符串类型实现的,能够把bitmaps成作一个以比特位为单位的数组3. Redis为什么这么快? ...