美文网首页
Redis数据案例二

Redis数据案例二

作者: JBryan | 来源:发表于2021-05-03 16:46 被阅读0次

本文作为学习笔记,文章内容来自“极客时间”专栏《Redis核心技术与实战》,如有侵权,请告知,必即时删除。

1、统计一个网站的用户访问量

一个用户一天内的多次访问只能算作一次。首先考虑使用Set,Set 类型默认支持去重。有一个用户 user1 访问 page1 时,把这个信息加到 Set 中:

SADD page1:uv user1

对于一个搞大促的电商网站而言,这样的页面可能有成千上万个,假设这个页面的访问量达到了千万,使用Redis容量估算工具估算一下,大约需要95G的内存空间。

16.jpg
Redis 提供的 HyperLogLog,是一种用于统计基数的数据集合类型,它的最大优势就在于,当集合元素数量非常多时,它计算基数所需的空间总是固定的,而且还很小。在 Redis 中,每个 HyperLogLog 只需要花费 12 KB 内存,就可以计算接近 2^64 个元素的基数。

可以用 PFADD 命令(用于向 HyperLogLog 中添加新元素)把访问页面的每个用户都添加到 HyperLogLog 中。存储1000个page的访问量,也只需要1000 * 12 KB 约11M的内存就够了。

//添加元素
PFADD page1:uv user1 user2 user3 user4 user5

//返回 HyperLogLog 的统计结果。
PFCOUNT page1:uv

HyperLogLog 的统计规则是基于概率完成的,所以它给出的统计结果是有一定误差的,标准误算率是 0.81%。这也就意味着,你使用 HyperLogLog 统计的 UV 是 100 万,但实际的 UV 可能是 101 万。虽然误差率不算大,但是,如果你需要精确统计结果的话,最好还是继续用 Set 或 Hash 类型。

2、位置信息服务

在日常生活中,我们越来越依赖搜索“附近的餐馆”、在打车软件上叫车,这些都离不开基于位置信息服务(Location-Based Service,LBS)的应用。以叫车服务为例,来分析下 LBS 应用中经纬度的存取特点。

  1. 每一辆网约车都有一个编号(例如 33),网约车需要将自己的经度信息(例如 116.034579)和纬度信息(例如 39.000452 )发给叫车应用。
  2. 用户在叫车的时候,叫车应用会根据用户的经纬度位置(例如经度 116.054579,纬度 39.030452),查找用户的附近车辆,并进行匹配。
  3. 等把位置相近的用户和车辆匹配上以后,叫车应用就会根据车辆的编号,获取车辆的信息,并返回给用户。

Redis 中的扩展数据类型 GEO 就非常适合应用在叫车应用的场景中。在使用 GEO 类型时,我们经常会用到两个命令,分别是 GEOADD 和 GEORADIUS。

  1. GEOADD 命令:用于把一组经纬度信息和相对应的一个 ID 记录到 GEO 类型集合中;
  2. GEORADIUS 命令:会根据输入的经纬度位置,查找以这个经纬度为中心的一定范围内的其他元素。当然,我们可以自己定义这个范围。

假设车辆 ID 是 33,经纬度位置是(116.034579,39.030452),我们可以用一个 GEO 集合保存所有车辆的经纬度,集合 key 是 cars:locations。执行下面的这个命令,就可以把 ID 号为 33 的车辆的当前经纬度位置存入 GEO 集合中:

GEOADD cars:locations 116.034579 39.030452 33

当用户想要寻找自己附近的网约车时,LBS 应用就可以使用 GEORADIUS 命令。例如,LBS 应用执行下面的命令时,Redis 会根据输入的用户的经纬度信息(116.054579,39.030452 ),查找以这个经纬度为中心的 5 公里内的车辆信息,并返回给 LBS 应用。当然, 你可以修改“5”这个参数,来返回更大或更小范围内的车辆信息。

GEORADIUS cars:locations 116.054579 39.030452 5 km ASC COUNT 10

可以使用 ASC 选项,让返回的车辆信息按照距离这个中心位置从近到远的方式来排序,以方便选择最近的车辆;还可以使用 COUNT 选项,指定返回的车辆信息的数量。

相关文章

  • Redis数据案例二

    本文作为学习笔记,文章内容来自“极客时间”专栏《Redis核心技术与实战》,如有侵权,请告知,必即时删除。 1、统...

  • Redis

    Redis 关系型和非关系数据库比较: redis数据结构 redis列表数据结构 案例 概念: redis是一款...

  • Redis数据案例一

    本文作为学习笔记,文章内容来自“极客时间”专栏《Redis核心技术与实战》,如有侵权,请告知,必即时删除。 1、S...

  • NoSQL二--Redis

    目录 一、Redis介绍二、安装Redis三、Redis 持久化四、Redis 的数据类型五、Redis常用操作六...

  • Redis

    一、redis是什么? 是一个key-value数据库,用来存储数据 二、如何使用redis? 本地启动redis...

  • Redis

    Redis 案例:

  • Redis基础使用和可视化工具

    Redis 案例:

  • redis

    Redis 案例:

  • Python爬虫第十天:数据存储MySql-Redis|Scra

    内容简述: 一:数据存储-MySQL|Redis 二:分布式爬虫Scrapy-Redis...

  • 28.redis

    内容 Redis 案例:

网友评论

      本文标题:Redis数据案例二

      本文链接:https://www.haomeiwen.com/subject/jybfdltx.html