【Redis实战|黑马点评】附近商户搜索、用户签到

343 阅读2分钟

GEO数据结构

允许存储地理坐标信息,帮助我们根据经纬度来检索数据。

附近商户搜索

按照商户类型做分组,类型相同的商户作为同一组,以typeId为key存入同一个GEO集合中即可。

用户签到

BitMap用法

如果按月来统计用户签到信息,签到记录为1,未签到则记录为0。

截屏2023-05-02 23.02.36.png 把每一个bit位对应当月的每一天,形成了映射关系。用0和1标识业务状态,这种思路就称为位图(BitMap)

截屏2023-05-02 23.04.58.png

签到功能

需求:实现签到接口,将当前用户当天签到信息保存到Redis中

因为BitMap底层是基于String数据结构,因此其操作也都封装在字符串相关操作中了。

签到统计

问题1: 什么叫连续签到天数?

  • 从最后一次签到开始向前统计,直到遇到第一次未签到为止,计算总的签到次数,就是连续签到天数。

问题2: 如何得到本月到今天为止的所有签到数据?

截屏2023-05-04 14.51.16.png

问题3: 如何从后向前遍历每个bit位?

  • 与1做与运算,就能得到最后一个bit位。
  • 随后右移1位,下一个bit位就成为了最后一个bit位。

实现签到统计功能

  • 实现接口,统计当前用户截止当前时间在本月的连续签到天数。

UV统计

HyperLogLog用法

  • UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录1次。
  • PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV,往往用来衡量网站的流量。

UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis中,数据量会非常恐怖。

HyperLogLog用法

截屏2023-05-04 15.16.20.png

实现UV统计