学习记录12 Hadoop生态圈技术栈(十)-数据库论坛-技术分享-千百度社区

学习记录12 Hadoop生态圈技术栈(十)

学习记录12 Hadoop生态圈技术栈(十)

讲义在讲Redis之前,花了很大的篇幅去写缓存的知识,可见缓存与Redis的关系非同一般。那么Redis就是缓存吗?
我们这里也写学习一些缓存的知识。
缓存存在的意义是为了减轻服务器的压力,提高系统的响应。
以前缓存指的是CPU上的告诉储存器,现在泛指计算机上原始数据集的复制集,便于快速访问。
其实缓存是一门艺术,一门空间换时间的艺术
其实说到这,也不难看出缓存的优缺点的。
大概总结一下就是缓存可以提升用户体验,减轻服务器压力,提高性能。缺点就是额外的硬件付出,并且缓存时也会出现一些问题。

缓存的读写模式

缓存有三种读写模式,这里只讲最常用的一种。就是Cache Aside Pattern,中文名为旁路缓存,这是最经典的缓存+数据库读写模式。
具体就是在读的时候,先读缓存,缓存没有的话再去读数据库,然后顺便将数据库取出的数据放入缓存,同时返回响应。
缓存的野心很大,读数据你得先问问缓存,缓存没有,你去问数据库要,之后也得分给我!
那么问题来了,如果数据库更新了怎么办?更新缓存吗?其实不是,是直接删除缓存,这也是数据库唯一报仇的以此的,直接杀死缓存。
为什么是删除缓存而不是更新呢?其实也很简单,因为缓存的结构机理,更新数据需要先遍历一遍,这就意味着我删除后重新加入新数据也比直接更新要快。
另外顺序也有要求,得先更新数据库,再去杀死缓存。(不然数据库打不过)

Redis

缓存就了解这么多就可以了,接下来就是核心Redis了。
Redis是远程的字典服务器,是一个键值对内存数据库,储值类型有五种,比较少,但也是最常用的了。就是字符串、散列、列表、集合和有序集合。
说到底还是一个数据库呗?那他存在的意义在哪呢?
他可以给缓存使用,减轻数据库的压力,也可以直接给数据库使用,用来临时存储文件,在一些数据交互要求高的场景下经常能见到他的身影。
具体的使用再后面的操作环节在做解说。

MySQL每日一刷

这道题是计算视频的完播率,在抖音这类短视频平台应该是挺常见的。
可以看下下面的数据情况,给了两个表(大多情况下都是多个表需要自己组合),表1就是用户和视频的交互表,里面给了基本的id数据和视频的开始结束时间数据(需要以此来判断视频是否播放完了)。


image.png

表2就是短视频的信息表了,包含视频的id、作者等信息。


image.png

其实不难看出,计算出2021年,短视频的完播率情况并不难,首先写出出视频完播率公式:count(结束时间-开始时间>视频时长,1,null)/ count(开始时间)

不得不说,这可能是这道题唯一的一个小难点了。不过我的写法肯定是有问题的,比较时间差直接用两个时间相减着实是有些low。

观看时间= timestampdiff(second, start_time, end_time)记得改成这个不然真会被人笑掉大牙🤔

select
  a.video_id,
  round(
    count(if(end_time - start_time >= duration,1,null)) / count(start_time),
    3
  ) as avg_comp_play_rate
from
  tb_user_video_log as a
  left join tb_video_info as b on a.video_id = b.video_id
where
  year(start_time) = 2021
group by
  video_id
order by
  avg_comp_play_rate desc

© 著作权归作者所有,转载或内容合作请联系作者

请登录后发表评论

    没有回复内容