基于redis实现点赞和取消点赞功能

·  阅读 2031

前言

 恭喜恭喜恭喜你啊恭喜恭喜恭喜你,祝大家虎年大吉,新春快乐,今天把视频的点赞的点赞功能以文章的形式表述一下,点赞的功能是基于redis的set实现的,在讲设计图之前,我们先把redis基本的数据结构复习一下~

Redis数据结构

为什么使用redis?

 在项目中,很多场景的并发量很大,如秒杀之类,若不使用redis缓存直接让其访问数据库,那么会对数据库造成很大的压力从而导致数据库崩了,因此引入redis做分布式缓存,redis基于内存效率高速度快,单线程没有多线程抢占问题,aqs支持高,并发支撑大,并且提供了很多api方便我们的开发。

redis的五种数据结构:

  • String类型 keyValue都是String (可以用作缓存)

  • List类型 Value可存放多个值,有序且重复(可以通过lpush,rpop实现队列 也可以通过range范围查询来实现分页功能,用户最近视频观看记录)

  • Set类型 无序但不可重复(因为可以自动去重因此可以实现并集交集差集,可以实现好友去重,可以实现抽奖活动,去重保证每个人参加一次,可以实现朋友圈点赞)

  • Zset类型 对应的每个set元素可添加一个分数(可以实现排行榜)
    zset的底层是用跳表(一个多层的有序链表,一种基于概率统计的插入算法)实现

  • Hash类型 value就是一个map类型(购物车),redis的Hash其实可以理解成JAVA中的MAP<String,Map<KEY,VALUE>>

    redis分为key和value,一般说的数据结构就是值value的结构,其中list、set、hash和java中的集合类似。

点赞设计

 大概了解完数据结构之后我们来看点赞的设计图:

image.png

 可以看到我把点赞的功能放到了用户服务下,因为点赞这个业务,是以用户为中心出发的,用户对多个视频点赞,所以我归到了用户服务下,用户从浏览器点赞之后,请求先来到网关看是否携带了token,不携带则拦截下来返回前端,跳转到登录页面,携带则路由到用户服务,通过token在redis中取出用户信息(上面忘画了…),接下来我们分析点赞这个业务,它既要点赞数又要点赞状态,所以在redis中需要有两个key,一个用来存放状态,一个用来存放点赞数,又因为点赞和取消点赞是互斥的两个状态,所以还需要一个key用来记录取消的点赞视频,= = 回归正题,我们通过redis的increment实现自增,如果没有这个key则从0开始递增,下来是用户点赞视频,一个用户会点赞很多视频,这些视频必定是不可以重复的,set集合在这里正好,可以防重复,存入到redis之后,因为我们有个互斥的取消点赞,所以需要看取消点赞(不喜欢)这个key里面是isMember当前视频的id,有的话则从set中remove掉。

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改