面试官:redis包含哪些数据结构啊?
我:strings 、lists、sets、sorted sets、hashes、bitmaps、hyperloglogs、geospatial indexes、streams。
面试官:等等,strings到hashes这些我都知道,bitmaps、hyperloglogs、geospatial indexes、streams都是什么鬼啊?
我:bitmap,其本质是定一个在string上的bit集合。最大长度512m,也就是2的32次幂个bit。其最大优点是,节省空间。举个例子,在系统中用户id是有序增长的,完全可以用512m内存代表40亿用户的状态,因为每个用户1bit。
通常的用法:
1 实时分析
2 用id在节省空间的同时保证性能
比如有一个需求是查从网站开始建站时起,访问次数最多的用户。只需从建站开始,每天记1bit,index的值为当前时间减建站时间再转化为天。这样每个用户都有一个string来代表访问信息。用bitcount操作很容易得到每个用户的访问天数。然后就转化为从众多值取最大的算法问题。
其他类型balabala
面试官:你从哪里学到这些的?
我:要关注官方twitter、经常逛reddit、redis官网基本上就可以了。
面试官:快来上班吧。