Redis
Redis 中,键的数据类型是字符串,但是为了丰富数据存储的方式,方便开发者使用,值的数据类型有很多,常用的数据类型有这样几种,它们分别是字符串、列表、字典、集合、有序集合。
列表:存储一组数据。这种数据类型对应两种实现方法,一种是压缩列表(ziplist)(可以看作一种特殊的数组),另一种是双向循环链表。
字典:用来存储一组数据对。每个数据对又包含键值两部分。字典类型也有两种实现方式。一种是我们刚刚讲到的压缩列表,另一种是散列表(动态扩容缩容)。
集合:用来存储一组不重复的数据。这种数据类型也有两种实现方法,一种是基于有序数组,另一种是基于散列表。
有序集合:用来存储一组数据,并且每个数据会附带一个得分。通过得分的大小,我们将数据组织成跳表这样的数据结构,以支持快速地按照得分值、得分区间获取数据。压缩列表,跳表实现。
鉴权与限流
鉴权:三种规则匹配模式。第一种精确匹配模式,我们利用有序数组来存储每个应用的规则集合,并且通过二分查找和字符串匹配算法,来匹配请求 URL 与规则。对于第二种前缀匹配模式,我们利用 Trie 树来存储每个应用的规则集合。对于第三种模糊匹配模式,我们采用普通的数组来存储包含通配符的规则,通过回溯算法,来进行请求 URL 与规则的匹配。
限流:固定时间窗口限流算法、滑动时间窗口限流算法
搜索引擎
搜索引擎大致可以分为四个部分:搜集、分析、索引、查询。
搜集:就是我们常说的利用爬虫爬取网页。
分析:主要负责网页内容抽取、分词,构建临时索引,计算 PageRank 值这几部分工作。
索引:主要负责通过分析阶段得到的临时索引,构建倒排索引。
查询:主要负责响应用户的请求,根据倒排索引获取相关网页,计算网页排名,返回查询结果给用户。
短网址
MurmurHash 算法。解决哈希冲突,进制转换,特殊字符拼接解决冲突。短网址字段,添加一个唯一索引,优化 SQL 语句次数。
另外一种短网址的生成算法,那就是利用自增的 ID 生成器来生成短网址。ID 生成器的两种实现方式。
