您现在的位置是:网站首页 > 心得笔记

redis中set的常见业务场景(3)

盛悦2025-02-2014人围观
简介本文将介绍redis中set数据类型下的常见业务场景(标签系统+好友关系管理)

一. set(集合)类型


1.数据结构

Redis的Set数据结构是一个无序且元素唯一的集合,它支持集合运算,如添加、删除、取交集、并集、差集等。这使得Set类型非常适合用于实现一些需要进行成员关系测试或集合操作的场景。


SADD key member - 向指定的集合添加元素。
SADD mySet "item1"


SREM key member - 从集合中删除元素。

SREM mySet "item1"



SISMEMBER key member - 检查元素是否是集合的成员。
SISMEMBER mySet "item1"

SINTER key [key ...] - 取一个或多个集合的交集。

SINTER mySet myOtherSet

SUNION key [key ...]  - 取一个或多个集合的并集。

SUNION mySet myOtherSet


SDIFF key [key ...]  - 取一个集合与另一个集合的差集。

SDIFF mySet myOtherSet


2.场景应用

    2.1.标签系统

    Set类型可用于存储和处理具有标签特性的数据,如商品标签、文章分类标签等。

    在一个内容平台上,用户可以给文章打上不同的标签,系统需要根据标签过滤和推荐文章。

    // 给文章添加标签
    Redis::SADD(key, "article:"+articleID+":tags", tag)
    // 根据标签获取文章列表
    Redis::SMEMBERS(key, "global:tags:"+tag)
    // 获取文章的所有标签
    Redis::SMEMBERS(key, "article:"+articleID+":tags")

    2.2.社交网络好友关系

    Set类型可以表示用户的好友列表,支持快速好友关系测试和好友推荐。

    在一个社交网络应用中,用户可以添加和删除好友,系统需要管理用户的好友关系。

    衍生问题:set类型处理社交网络好友关系的优势

    解决方案:

    1.唯一性:保证好友列表中不会有重复的好友。
    2.快速关系测试:快速判断两个用户是否互为好友。
    3.好友推荐:利用集合运算,如差集,推荐可能认识的好友。
    
    // 添加好友
     Redis::SADD(ctx, "user:"+userOneID+":friends", userTwoID)
     Redis::SADD(ctx, "user:"+userTwoID+":friends", userOneID)
     
     // 判断是否是好友
     Redis::SISMEMBER(ctx, "user:"+userOneID+":friends", userTwoID) == 1
     
     // 获取用户的好友列表
     Redis::SMEMBERS(ctx, "user:"+userID+":friends")


     3.注意事项

1.虽然Set是无序的,但Redis会保持元素的插入顺序,直到集合被重新排序。
2.Set中的元素是唯一的,任何尝试添加重复元素的操作都会无效。
3.使用集合运算时,需要注意结果集的大小,因为它可能会影响性能。