redis 实现互相关注功能
突然想到平时的设计软件如何实现互相关注这个功能,然后查询后大致思路如下:
可以使用 Redis 数据库来存储关注关系。
在社交网络应用程序中,互相关注功能(也称为双向关注或好友关系)是一种常见的功能,允许用户之间相互关注彼此。在Redis中,可以使用集合(Set)数据结构来实现互相关注功能。
假设我们有两个用户,分别是用户A和用户B,他们之间可以相互关注。
1. **用户A关注用户B:**
SADD following:A B
```
这个命令将用户A的关注列表中添加了用户B。
2. **用户B关注用户A:**
SADD following:B A
```
这个命令将用户B的关注列表中添加了用户A。
3. **检查两个用户是否互相关注:**
SISMEMBER following:A B
SISMEMBER following:B A
```
以上两个命令分别检查用户A的关注列表中是否包含用户B,以及用户B的关注列表中是否包含用户A。如果返回1,表示互相关注,如果返回0,表示未互相关注。
4. **获取用户A的关注列表:**
SMEMBERS following:A
```
这个命令将返回用户A关注的所有用户的列表。
5. **获取用户B的关注列表:**
SMEMBERS following:B
```
这个命令将返回用户B关注的所有用户的列表。
需要注意的是,以上示例假设用户ID是唯一的。可以将用户ID作为集合的键,以及关注的用户ID作为集合的成员。。
然后用一个示例 Python 代码,演示了如何实现互相关注功能:
首先,确保已经安装和启动了 Redis 服务器。然后,使用一个 Redis 客户端库(如 redis-py
)来与 Redis 交互。
import redis# 连接到 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0)# 定义关注和被关注的用户的键名
def get_user_key(user_id):return f'user:{user_id}'# 实现关注功能
def follow_user(user_id, target_user_id):user_key = get_user_key(user_id)target_user_key = get_user_key(target_user_id)# 将 target_user_id 添加到用户的关注列表中r.sadd(f'{user_key}:following', target_user_id)# 将用户的 user_id 添加到 target_user_id 的粉丝列表中r.sadd(f'{target_user_key}:followers', user_id)# 实现取消关注功能
def unfollow_user(user_id, target_user_id):user_key = get_user_key(user_id)target_user_key = get_user_key(target_user_id)# 从用户的关注列表中移除 target_user_idr.srem(f'{user_key}:following', target_user_id)# 从 target_user_id 的粉丝列表中移除 user_idr.srem(f'{target_user_key}:followers', user_id)# 获取用户的关注列表
def get_following(user_id):user_key = get_user_key(user_id)# 获取用户的关注列表return r.smembers(f'{user_key}:following')# 获取用户的粉丝列表
def get_followers(user_id):user_key = get_user_key(user_id)# 获取用户的粉丝列表return r.smembers(f'{user_key}:followers')# 示例用法
user1_id = 'user1'
user2_id = 'user2'
user3_id = 'user3'follow_user(user1_id, user2_id)
follow_user(user1_id, user3_id)
follow_user(user2_id, user1_id)print(f'User1 is following: {get_following(user1_id)}')
print(f'User1 has followers: {get_followers(user1_id)}')
使用 Redis 的集合(Set)来存储用户的关注列表和粉丝列表。sadd
用于将用户添加到关注列表,srem
用于从关注列表中移除用户。通过这些操作,我们可以实现用户之间的互相关注关系,并轻松地获取关注列表和粉丝列表。
相关文章:
redis 实现互相关注功能
突然想到平时的设计软件如何实现互相关注这个功能,然后查询后大致思路如下: 可以使用 Redis 数据库来存储关注关系。 在社交网络应用程序中,互相关注功能(也称为双向关注或好友关系)是一种常见的功能,允许…...

【代码随想录】算法训练营 第十一天 第五章 栈与队列 Part 2
20. 有效的括号 题目 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一…...
mysql 启动报错 Can t change dir to xxx, No such file or directory 配置错误或挂载导致
省流: 挂载的话,使用 /etc/fstab 放fstab里会在程序启动前加载NFS文件系统,放rc.local里往往造成程序启动加载时找不到路径。 正文: 在企业中,服务器重启,有时候会遇到mysql 启动报错 Cant change dir …...

AWS SAA-C03考试知识点整理
S3: 不用于数据库功能 分类: S3 Standard :以便频繁访问 S3 Standard-IA 或 S3 One Zone-IA : 不经常访问的数据 Glacier: 最低的成本归档数据 S3 Intelligent-Tiering智能分层 :存储具有不断变化或未知访问…...

HugeGraph 部署和Hubble1.0.0的数据导入Bug修复
背景 HugeGraph 安装部署了最新版本1.0.0,发现它的 Web 工具 Hubble 有一个大 Bug。数据导入的时候,配置节点属性映射这个选项时,下拉框只有一个选项,但实际上,元数据配置中的属性有3个,这个 Bug 是怎么产…...

01、字符传实现为什么是SDS而不是char*?
问题: 1. sds 是什么 ? 2. sds 相对于char * 有什么好处 ?解决了哪些疑难杂症? 3. sds 有什么不足?可以优化的点? 思考下: 平常工作开发中,我们记录一条用户信息、订单信息&…...

顺应趋势,用大数据精准营销抓住大数据时代的机遇
想先问大家一个问题:“你觉得现在的营销好做吗?”想必大多数人在说到自己如何营销这一点上,都有道不完的“苦水”。“现在找客户难,投了几十万的广告费,真正来的客户却少得可怜,平均获客成本高得吓人”一位…...
面向石油和天然气的计算机视觉和深度学习1
面向石油和天然气的计算机视觉和深度学习1 1. 好处1.1 安全1.2 生产优化与估算(Production Optimization and Estimation)1.3 降低生产和维护成本(Reduce Production and Maintenance Costs) 2. 应用2.1 维护2.1.1 预测维护&#…...

微信小程序三种授权登录以及授权登录流程讲解
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯Ἲ…...
C现代方法(第10章)笔记——程序结构
文章目录 第10章 程序结构10.1 局部变量10.1.1 静态局部变量10.1.2 形式参数 10.2 外部变量10.2.1 示例:用外部变量实现栈10.2.2 外部变量的利与弊 10.3 程序块10.4 作用域10.5 构建C程序10.5.1 复杂程序:给一手牌分类 问与答写在最后 第10章 程序结构 …...
解密Web安全:Session、Cookie和Token的不解之谜
解密Web安全:Session、Cookie和Token的不解之谜 前言第一部分:什么是Session、Cookie和Token1. Session(会话):2. Cookie(HTTP Cookie):3. Token(令牌):比较: 第二部分&a…...

1016 部分A+B
#include<bits/stdc.h> using namespace std; int main(){string str1;string str2;int a,b;cin>>str1>>a>>str2>>b;int a10;int a20;for(auto t:str1){if(t-0a){a1a1*10a;}}for(auto t:str2){if(t-0b){a2a2*10b;}}cout<<a1a2; }...

搭建react项目
一、环境准备 1、安装node 官网下载安装:https://nodejs.org/en 注: npm5.2以后,安装node会自动安装npm和npx 2、安装webpack npm install -g webpack3、安装create-react-app npm install -g create-react-app二、创建react项目 1、初…...
Hive跨集群数据迁移过程
文章目录 环境数据迁移需求迁移过程记录 环境 Hive集群AHive集群B跳转机一台 数据迁移需求 本次迁移数据100G,15亿条,数据流转方向从集群A经过跳转机到集群B,通过HDFS拉取和重新建表导入的方式完成数据库迁移。 迁移过程记录 - 当前操作…...

中国移动启动算网大脑“天穹”全网试商用
10月12日,中国移动在2023全球合作伙伴大会主论坛正式启动算网大脑“天穹”全网试商用,全面开启算力网络2.0新征程,标志着中国移动算力网络迈向“融合统一”新阶段。 为落实国家“东数西算”战略,中国移动开创性提出算力网络新理念…...

apk和小程序渗透
apk和小程序域服务器通信使用的还是http协议,只是使用了加密。只要可以获取到http的请求报文,就可以回归到web渗透的层面。apk和小程序的渗透很复杂,涉及逆向时要进行脱壳,脱壳后反编译了,源代码没做加密就能直接逆向出…...
播放svga动画的时候 第一次加载资源,然后切换动画 会动画会重影
如果在切换 SVGA 动画的过程中,第一次加载时出现重影,但第二次及以后的切换没有重影,这可能是由于第一次加载时资源缓存不完整导致的。为了解决这个问题,你可以尝试以下方法: 1.在每次切换动画之前,预先加…...

如何实现前端音频和视频播放?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

chatgpt 4V 识图功能
1.获取图片的sig和file_id 2e0edc6e489ed13a3f32f0dd87527d77.jpg是本地图片的名字 头部认证信息自己F12 抓取 1.获取图片的sighttps://chat.openai.com/backend-api/filesAuthorization:Bearer eyJhbGc****************5V-lztYwLb9hr6LP7g Cookie: **********************…...

展馆导览系统之AR互动式导航与展品语音讲解应用
一、项目背景 随着科技的进步和人们对于文化、艺术、历史等方面需求的提升,展馆在人们的生活中扮演着越来越重要的角色。然而,传统的展馆导览方式,如纸质导览、人工讲解等,已无法满足参观者的多元化需求。为了提升参观者的体验&a…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...