布隆过滤器(Bloom Filter)是一种用于判断某个元素是否在一个集合中的数据结构。
它的特点是具有高效的空间利用率和查询效率,但存在一定的误判率。
布隆过滤器的工作原理是:通过多个不同的哈希函数将元素映射到一个位数组中的多个位置,并将这些位置置为 1 。当要查询一个元素是否在集合中时,同样通过这些哈希函数计算位置,如果这些位置都为 1 ,则认为元素可能在集合中;如果有任何一个位置为 0 ,则元素一定不在集合中。
布隆过滤器的优点包括:底层是数组,空间效率高,查询速度快;缺点是存在误判,即可能将不在集合中的元素判断为在集合中,但不会将在集合中的元素判断为不在集合中。
它常用于解决 Redis 缓存穿透问题、在大数据场景中判断元素是否存在等。
参数校验是在程序或系统接收到输入参数时,对这些参数进行有效性、合法性和完整性的检查和验证的过程。
其主要目的包括:
1. 确保数据的准确性:检查输入的参数是否符合预期的格式、范围、类型等,以避免因错误或不合法的数据导致后续处理出现错误。
2. 提高系统的安全性:防止恶意或错误的输入对系统造成破坏或安全威胁,例如 SQL 注入攻击等。
3. 优化系统性能:避免无效或错误的参数进入后续复杂的处理逻辑,节省系统资源和处理时间。
4. 提供更好的用户体验:及时向用户反馈输入参数的错误,让用户能够正确输入,减少不必要的操作失败和困惑。
参数校验通常包括对参数的类型(如整数、字符串、日期等)、长度、取值范围、必填项、格式(如电子邮件格式、电话号码格式等)等方面的检查。
空值缓存是指在 Redis 中缓存不存在的值,即空值。当大量请求频繁查询不存在的数据时,虽然数据库中不存在此数据,但可以将空值放到 Redis 缓存中,让后续的访问都从 Redis 查询,从而减小数据库的压力。
需要注意的是,空值缓存可能会占用一定的缓存空间,并且需要设置合理的过期时间,以避免空值长时间占用缓存。同时,在设置空值缓存时,还需要考虑数据一致性的问题,确保在业务数据发生变化时,能够及时更新或清除缓存中的空值。
热点数据是指在系统或应用中被频繁访问、使用频率非常高的数据。
例如,在电商网站中,热门商品的信息、实时销量排行榜的数据;在社交媒体中,当前最热门的话题、关注度最高的用户发布的内容;在新闻网站中,点击率最高的新闻等都属于热点数据。
热点数据通常具有以下特点:
1. 访问频率高:在短时间内被大量的请求访问。
2. 时效性强:可能随着时间的推移,其热度会下降。
3. 对系统性能影响大:如果处理不当,可能会导致系统性能瓶颈。
在缓存设计和优化中,通常会对热点数据进行特殊处理,如设置更长的缓存时间、单独存储、提前预热等,以提高系统的响应速度和性能。
互斥锁(Mutex Lock)是一种用于实现多线程或多进程之间同步和互斥访问共享资源的机制。
当一个线程或进程获取到互斥锁时,其他线程或进程就不能再获取该锁,直到持有锁的线程或进程释放它。这确保了在同一时间只有一个线程或进程能够访问被互斥锁保护的共享资源,从而避免了数据不一致、竞争条件等问题。
互斥锁的主要操作包括:
1. 加锁(Lock):尝试获取互斥锁,如果锁已被其他线程或进程持有,则当前线程或进程会被阻塞,直到锁被释放。
2. 解锁(Unlock):释放已获取的互斥锁,允许其他等待该锁的线程或进程继续执行。
在处理热点数据击穿等问题时,通过互斥锁可以保证在缓存失效的情况下,只有一个线程或进程去数据库查询并更新缓存,避免了大量线程或进程同时访问数据库的情况。
优点:
1,没有额外的内存消耗,
2,保证一致性,
3,实现简单,
缺点:
- 线程需要等待,性能受到影响,
- 可能有锁死的风险