文章目录
- Redis
- redis的数据类型有哪些?
- Redis 内部结构有哪些?
- Memcache 与 Redis 的区别都有哪些?
- 为什么 redis 需要把所有数据放到内存中?
- Redis 如何进行持久化?
- RDB和AOF的优缺点有哪些?
- 什么是缓存穿透?如何避免?
- 什么是缓存雪崩?何如避免?
- redis的淘汰策略有哪些?
- Redis是单线程的,但为什么这么快?
- Redis的内存分为哪些?
- 说说Redis事务?
- Redis 常见的性能问题都有哪些?如何解决?
- Redis 适合的场景有哪些?
Redis
下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图
哪里不会点哪里
redis的数据类型有哪些?
- String
常规的set/get操作,value可以是String也可以是数字。
应用:
一般做一些复杂的计数功能的缓存。 - hash
这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。
应用:
单点登录,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。、 - list
List的数据结构
应用:
可以做简单的消息队列的功能。另外,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。生产者和消费者的场景,LIST可以很好的完成排队,先进先出的原则。 - set
因为set堆放的是一堆不重复值的集合。
应用:
可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。 - sorted set
sorted set多了一个权重参数score,集合中的元素能够按score进行排列。
应用:
可以做排行榜应用,取TOP N操作。
Redis 内部结构有哪些?
- dict
本质上是为了解决算法中的查找问题(Searching)是一个用于维护key和value映射关系的数据结构,与很多语言中的Map或dictionary类似。本质上是为了解决算法中的查找问题(Searching)。 - sds
sds就等同于char * 它可以存储任意二进制数据,不能像C语言字符串那样以字符’\0’来标识字符串的结束,因此它必然有个长度字段。 - skiplist 跳跃表
跳表是一种实现起来很简单,单层多指针的链表,它查找效率很高,堪比优化过的二叉平衡树,且比平衡树的实现。 - ziplist 压缩表
ziplist是一个编码后的列表,是由一系列特殊编码的连续内存块组成的顺序型数据结构。
Memcache 与 Redis 的区别都有哪些?
- 存储方式不同:
Memcache 是把数据全部存在内存中,数据不能超过内存的大小