# 使用场景

### 问题

能快速访问但允许丢失

### 会话

### 计数器

### 排行榜（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、达到限制后，进一个，出一个，比较时间差。
