1.redis基本数据类型有哪些
string set zest list hash
2.redis为什么快
绝大部分请求是纯粹的内存操作,并且采用了单线程,避免了不必要的上下文切换和竞争条件,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。
3.为什么redis6.0之后改为多线程
对一些大的键值对进行删除操作的话,在短时间内是删不完的,那么对于单线程来说就会阻塞后边的操作
4.什么是热key,热key问题怎么解决
突然有很多的请求去访问redis上的某个特定的key,造成流量过大,到达物理网上限,导致redis服务器宕机从而引发雪崩
5.什么是缓存击穿,缓存穿透,缓存雪崩
1.缓存击穿:因为热key的存在,持续的大并发穿破缓存,直接请求数据库。(查询量太多导致)
解决方案
设置热点数据永远不过期。分级缓存。加锁
2.缓存穿透:缓存中没有数据导致向数据库进行查询。当所有的请求去向数据库,会造成数据库压力过大。(查询不到而导致,同一条数据)
解决方案:
对查询结果为空的情况也进行缓存,缓存时间设置短一点。
3.缓存雪崩:在某一个特定的时间点,缓存集中过期失效,从而发生大量的缓存穿透,所有的查询落在了数据库上面,造成了缓存雪崩。(查询不到而导致,多条数据)
解决方案
缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
设置热点数据永远不过期。
6.redis过期策略有哪些
定期删除+惰性删除
定期删除:每隔一段时间后,对数据进行随机抽取一些过期的key,然后进行删除
惰性删除:在获取某些key的时候,redis会进行一些检查,如果过期了就删除,什么都不返回。
7.定期+惰性都没有删除过过期的key怎么办
走内存淘汰机制:
(常用)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key
• volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除
8.持久化方式有哪些
RDB和AOF
RDB:在指定的时间间隔内生成数据集的时间点快照
AOF:记录服务器执行的所有写操作命令,并在服务器启动的时候,通过重新执行这些命令来还原数据集。
当redis同时使用aof持久化和rdb持久化的时候,会优先使用aof文件来还原数据集。
9.怎么实现redis的高可用
数据持久化保证数据不丢失
redis主从让redis从单机变成了多机
redis哨兵模式来监控redis的主从模式
redis的集群。
10.redis集群的原理
在redis的每一个节点上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
11.redis的事务机制
可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序串行化执行而不会被其它命令插入,一次性、顺序性、排他性的执行一系列命令。
但是redis的事务没有像关系型数据库的回滚,所以必须在事务执行失败后进行后续的处理。不保证原子性。