第4章 Redis,一站式高性能存储方案,笔记问题

点赞具体要实现功能有哪些?

  1. 可以点赞的地方:对帖子点赞,对评论点赞
  2. 点一次是点赞,再点一次是取消赞
  3. 统计点赞的数量(计数,string),帖子被点赞的数量,某个用户被点赞的数量

点赞使用到的Redis数据结构是什么?

记录某个实体有哪些用户点赞使用集合数据结构
记录某个用户获得的点赞数使用字符串数据结构进行技术

一个点赞过程是什么?

如果本身有赞了,再去点击点赞按钮,就被认为是取消赞
在这里插入图片描述

如何判断userId是否给某个实体点赞了

给某个实体点赞的key是:like:entity_type:entity_id
value是:集合,{用户id}
所以我们只需判断或者这个实体的用户id集合,然后判断userId是不是属于这个集合
如果属于,代表userId已经给这个用户点赞
如果不属于,则代表userId还没有给这个用户点赞

为什么要用redis事务?

因为点赞这个过程包括两个,一个是对实体点赞的用户id需要加入/移除到集合中;另一个是实体所属的用户需要增加/减少获赞数
为了保证这两个数据的一致性和原子性,所以需要用到redis事务。

一个关注过程是什么样?

在这里插入图片描述
这样设置就可以实现,我关注的人、我关注的帖子、我关注的评论等功能
还可以实现查看,关注我的粉丝,关注这个帖子的粉丝,关注这个评论的粉丝等功能

在这里插入图片描述

为什么要用有序集合存储关注的实体和粉丝

  1. 使用集合的原因:需要获取里面的元素。
  2. 使用有序集合原因:需要分页显示。有序集合可以返回指定索引范围的数据,集合做不到。列表也可以返回指定范围的数据,但是列表无法去重。

综上两点原因,使用有序集合 zrange或zrevrange,返回有序集中指定区间内的成员,通过索引。
列表无法去重
集合无法返回指定索引范围内的元素
所以使用有序集合
有序集合的zrange和zrevrange命令,可以返回有序集合中指定索引范围内的成员,实现分页显示。

Redis作为一级缓存是怎么做的?

用户信息作为经常要访问的信息,如果直接去访问数据库,会造成对数据库的访问压力增大。所以,我将用户信息缓存在Redis中,并设置过期时间,如果查询某个用户,先去Redis缓存中查询,如果查询到了,就返回该用户信息, 不用去数据库查询。如果查询不到用户,就初始化该用户的缓存信息,从数据库取出来,再放到redis中并设置过期时间。如果修改了用户信息,需要清楚缓存。

  1. 优先从缓存中取值:User getCache(int userId)
  2. 取不到时初始化缓存数据:User initCache(int userId)
  3. 数据变更时清除缓存数据:void clearCache(int userId)
	// 1.优先从缓存中取值private User getCache(int userId) {String redisKey = RedisKeyUtil.getUserKey(userId);return (User) redisTemplate.opsForValue().get(redisKey);}// 2.取不到时初始化缓存数据private User initCache(int userId) {User user = userMapper.selectById(userId);String redisKey = RedisKeyUtil.getUserKey(userId);redisTemplate.opsForValue().set(redisKey, user, 3600, TimeUnit.SECONDS);return user;}// 3.数据变更时清除缓存数据private void clearCache(int userId) {String redisKey = RedisKeyUtil.getUserKey(userId);redisTemplate.delete(redisKey);}

在获取用户时:

    public User findUserById(int id) {User user = getCache(id);if (user == null) {user = initCache(id);}return user;}

变更用户信息是需要清除该用户的缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600868.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚道云连接器打通红圈CRM和金蝶云星辰,赋能环境科技公司数字化转型

一、客户介绍 某环境科技有限公司是一家专注于环保科技领域的领先企业,致力于为客户提供全方位的环境解决方案。公司拥有一支经验丰富、技术精湛的团队,不断推动环保技术的创新与应用。作为业内的佼佼者,该公司在环境治理、资源回收和节能减…

PC端音乐神器-解锁全网限制

打软件后就能发现,软件不需要我们登录,就可以使用,下载地址:PC端音乐神器.zip

Social Skill Training with Large Language Models

Social Skill Training with Large Language Models 关键字:社交技能训练、大型语言模型、人工智能伙伴、人工智能导师、跨学科创新 摘要 本文探讨了如何利用大型语言模型(LLMs)进行社交技能训练。社交技能如冲突解决对于有效沟通和在工作和…

共生共舞的期货黄金和现货黄金

期货黄金,作为一种在金融市场上备受关注的投资工具,其价值与价格走势深受现货黄金市场的直接影响和联动。期货黄金交易,本质上是投资者对未来某一特定时间内黄金价格的预期进行押注,而这背后的逻辑支撑和价格基准正是现货黄金市场…

ShardingSphere-JDBC使用时出现雪花算法id无法生成

出现报错: 这是sql 尝试1: 这里改成Long 还是报错 尝试2:将配置重写 删除 props: # 主键生成器属性配置worker-id: 1 # Snowflake算法中的workerId配置解决!

Pandas分箱/离散化cut()与qcut()的区别

cut与qcut区别 1、pd.cut()2、pd.qcut()3、cut与qcut区别 Pandas提供了智能剪贴功能:pd.cut()与pd.qcut(),它们通常用于更方便直观地处理关系型或标签型数据,将数据进行分箱/离散化 1、pd.cut() 我们可以通过两种方式使用cut()函数&#xff…

废品回收小程序推动回收行业的发展趋势

回收在全球都是一个重要行业,它为全球的环保作出了重要贡献。 随着科技的不断发展创新,废品回收的方式也逐渐多样,全新的线上回收小程序也逐渐出现在大众的生活中,在当下的手机时代,线上回收也为大众提供了更加便利的…

安全升级,智能领航:RFID技术推动铁路锁控系统进入新时代

随着我国铁路运输行业的快速发展,铁路安全运营的重要性日益凸显,为了提高铁路运输安全性,降低人为操作失误,航连科技提出了一种基于RFID技术的铁路智能锁控系统解决方案,旨在为我国铁路安全运营提供有力支持。 一、系统…

Windows深度学习环境----Cuda version 10.2 pytorch3d version 0.3.0

Requirements Python version 3.8.5Pytorch version: pytorch1.6.0 torchvision0.8.2 torchaudio0.7.0 cudatoolkit10.2.89pytorch3d version 0.3.0Cuda version 10.2 感觉readme文件里的不适配,跟pytorch官网不同 以前的 PyTorch 版本 |PyTorch的 # CUDA 10.2 c…

【IPV6】--- IPV6过渡技术之6 over 4隧道配置

1. IPV4和IPV6有什么区别? 2. IPV6如何在设备上配置? 3. IPV4和IPV6如何跨协议实现通信? 1. IPV4和IPV6 --- IPV6技术 - IP协议第六版 - 128位二进制数 - 2^12843亿*43亿*43亿*43亿 --- IPV4技术 - IP协议第四版 - 192.1…

演示I2C、SPI、UART的通信过程

** 到目前为止,I2C、SPI和UART等仍然是电子嵌入式设备中最常用的通信协议。本文将剖析这三种协议,让大家清楚、直观地了解它们的功能、优点和局限性,并辅以GIF动图展示。** 一、I2C协议 I2C是一种串行通信协议,通常用于连接低速…

java集合总结

集合 一种装数据的容器,类似于数组,但大小可变 主要用途: 1,提供不同数据结构:java提供了不同类型的集合,每一种集合类的数据结构不同导致其特点和使用场景也不同,开发人员可以通过具体的需求选择合适的数据结构来提高程序的效率和性能. 2,方便的数据操作:java集合提供了丰…