1.redis为什么比较快
1.基于内存实现 :
Redis是基于内存存储实现的数据库,相对于数据存在磁盘的数据库,就省去磁盘磁盘I/O的消耗。MySQL等磁盘数据库,需要建立索引来加快查询效率,而Redis数据存放在内存,直接操作内存,所以就很快
2.高效的数据结构:
Redis内置了多种高效的数据结构,如字符串、哈希表、列表、集合和有序集合等。这些数据结构都经过优化,能够在时间复杂度为O(1)的情况下完成大部分操作
3.合理的数据编码:
Redis支持多种数据基本类型,每种基本类型对应不同的数据结构,每种数据结构对应不一样的编码。为了提高性能,Redis设计者总结出,数据结构最适合的编码搭配
4.合理的线程模型
①单线程模型:
避免了上下文切换
Redis的单线程模型,避免了CPU不必要的上下文切换和竞争锁的消耗
②I/O 多路复用
- 多路 :多个网络连接
- 复用:复用同一个线程。
5.虚拟内存机制
Redis之所以如此之快,是因为它充分利用了内存存储、单线程模型、复杂数据结构支持、持久化机制以及响应式设计等多个因素。这些优势使Redis成为了一个高性能的键值存储系统,广泛应用于各种应用场景。
2.redis基本数据结构
string(字符串),hash(哈希),list(列表),set(无序集合)及zset(有序集合)。
3.redis使用中的三种问题(之前有写,点链接可以跳转)
缓存穿透:Redis的缓存穿透-CSDN博客
缓存击穿:redis的击穿-CSDN博客
4.布隆过滤器是什么,解决了什么问题
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。
布隆过滤器的优缺点:
优点:空间效率和查询时间都比一般的算法要好的多
缺点:有一定的误识别率和删除困难
布隆过滤器的作用是某个 key 不存在,那么就一定不存在,它说某个 key 存在,那么很大可能是存在(存在一定的误判率)。于是我们可以在缓存之前再加一层布隆过滤器,在查询的时候先去布隆过滤器查询 key 是否存在,如果不存在就直接返回
5.数据同步方案 (延迟双删是什么)
延迟双删是基于时间戳的缓存更新策略。其核心思想是在更新数据库后,先删除缓存中的数据,然后在一段时间后再次删除缓存。这样,即使在这段时间内有新的读请求导致缓存被重建,由于缓存中的数据已经被删除,所以新的读请求会重新从数据库中读取最新数据,从而保证缓存与数据库的一致性。
6.分布式锁是什么
在分布式系统中实现同步机制的技术
分布式锁的特点
为了确保分布式锁可用,至少要确保锁的实现同时满足以下四个条件:
1、互斥性:任意时刻,只能有一个客户端获取锁,不能同时有两个客户端获取到锁。
2、安全性:锁只能被持有该锁的客户端删除,不能由其它客户端删除。
3、死锁:获取锁的客户端因为某些原因(如down机等)而未能释放锁,其它客户端再也无法获取到该锁。
4、容错:当部分节点(redis节点等)down机时,客户端仍然能够获取锁和释放锁
分布式锁的实现方式:
1. 数据库乐观锁;
2. 基于ZooKeeper的分布式锁;
3.基于Redis的分布式锁