使用场景

问题

能快速访问但允许丢失

会话

计数器

排行榜(zset)

共同好友(set)

签到(位图)

对于用户签到数据,如果每条数据都用K/V的方式存储,当用户量大的时候内存开销是非常大的。而位图(BitMap)是由一组bit位组成的,每个bit位对应0和1两个状态,虽然内部还是采用String类型存储,但Redis提供了一些指令用于直接操作位图,可以把它看作是一个bit数组,数组的下标就是偏移量。它的优点是内存开销小、效率高且操作简单,很适合用于签到这类场景。

UV非精准去重计数(HyperLogLog)

HyperLogLog 算法是一种非常巧妙的近似统计海量去重元素数量的算法。它内部维护了 16384 个桶(bucket)来记录各自桶的元素数量。当一个元素到来时,它会散列到其中一个桶,以一定的概率影响这个桶的计数值。因为是概率算法,所以单个桶的计数值并不准确,但是将所有的桶计数值进行调合均值累加起来,结果就会非常接近真实的计数值。

推送去重(布隆过滤器)

布隆过滤器的原理 其本质就是一个只包含 0 和 1 的数组。具体操作当一个元素被加入到集合里面后,该元素通过 K 个 Hash 函数运算得到 K 个 hash 后的值,然后将 K 个值映射到这个位数组对应的位置,把对应位置的值设置为 1。查询是否存在时,我们就看对应的映射点位置如果全是 1,他就很可能存在(跟 hash 函数的个数和 hash 函数的设计有关),如果有一个位置是 0,那这个元素就一定不存在。

限流(redis-cell)

1、恒定速率流出

2、

限流(queue)

1、未达到总数前,只进不去

2、达到限制后,进一个,出一个,比较时间差。

Last updated