Redis使用Set实现点赞功能



在这里插入图片描述

在这里插入图片描述


set 数据类型介绍

Redis中的set类型是一组无序的字符串值。

在这里插入图片描述

set通过其独特的数据结构和丰富的命令提供了在存储和处理集合元素方面的一些非常有用的功能。下面列出了主要的set类型命令:

  • SADD key member1 [member2]:向指定键名的集合中添加一个或多个成员,并返回成功添加的成员数量。

  • SREM key member1 [member2]:从指定键名的集合中移除一个或多个成员,并返回成功移除的成员数量。

  • SMEMBERS key:返回指定键名集合中所有的成员。

  • SISMEMBER key member:检查指定成员是否在集合中,存在返回1,不存在则返回0。

  • SRANDMEMBER key [count]:随机获取指定键名集合中的一个或多个成员。如果指定count参数,则表示获取不重复的count个随机成员。

  • SCARD key:获取指定键名集合中的成员数。

  • SPOP key [count]:随机弹出指定键名集合中的一个或多个成员。如果指定count参数,则表示弹出不重复的count个随机成员。

  • SDIFF key1 [key2]:对两个或多个集合执行差集操作,返回结果集中保存的成员。

  • SUNION key1 [key2]:对两个或多个集合执行并集操作,返回结果集中保存的成员。

  • SINTER key1 [key2]:对两个或多个集合执行交集操作,返回结果集中保存的成员。

  • SDIFFSTORE destination_key key1 [key2]:对两个或多个集合执行差集操作,并将结果保存到指定键名的集合中。

  • SUNIONSTORE destination_key key1 [key2]:对两个或多个集合执行并集操作,并将结果保存到指定键名的集合中。

  • SINTERSTORE destination_key key1 [key2]:对两个或多个集合执行交集操作,并将结果保存到指定键名的集合中。

set类型提供了非常丰富的命令来管理集合中的元素,使其在实际应用场景中有很大的灵活性和适用性


不排序实现

场景:一件商品 同一个用户只能点赞一次

使用 Redis 的 set(唯一 & 不排序) 数据结构

// 	判断当前登录用户是否已经点赞
String key = BLOG_LIKED_KEY + id;
Boolean isMember = stringRedisTemplate.opsForSet().isMember(key, userId.toString());
//	保存用户到Redis的set集合
stringRedisTemplate.opsForSet().add(key, userId.toString());
//  把用户从Redis的set集合移除
stringRedisTemplate.opsForSet().remove(key, userId.toString());

排序实现

场景:一件商品 同一个用户只能点赞一次 且 按照点赞时间排序

使用 Redis 的 sortedSet(唯一 & 排序) 数据结构

// 保存用户到Redis的sortedSet集合  zadd key value score
stringRedisTemplate.opsForZSet().add(key, userId.toString(), System.currentTimeMillis());

// 获取当前登录用户是否已经点赞(null 未点赞)
String key = BLOG_LIKED_KEY + id;
Double score = stringRedisTemplate.opsForZSet().score(key, userId.toString());

// 把用户从Redis的set集合移除 key value 
stringRedisTemplate.opsForZSet().remove(key, userId.toString());

// 查询top5的点赞用户 zrange key 0 4 (范围查询)
Set<String> top5 = stringRedisTemplate.opsForZSet().range(key, 0, 4);

在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值