当前位置: 首页 > news >正文

Redis应用-在用户数据里的应用

1.社区电商的业务闭环

接下来介绍的社区电商是以Redis作为主体技术、以MySQL和RocketMQ作为辅助技术实现的。

(1)社区电商运作模式

社区电商的关键点在于社区,而电商则是辅助性质(次要地位,流量变现)。社区可以分成很多种社区,比如美食社区、美妆社区、影评社区、妈妈社区。社区平台也有很多很多,一般中小型的社区平台居多,比如体育社区、汽车社区、本地生活社区。

比如美食社区APP:用户可以分享积累的美食食谱、或者对美食看法、甚至是出门体验的一些餐馆,用户还可以浏览其他用户发出的一些美食食谱、体验、经历、科普。用户通过浏览其他用户发的帖子,对其进行互动、关注、私信、交流、成为好友。这样一部分用户就可以成立平台里的一个私密圈子,基于美食兴趣爱好进行社交活动。

美食社区APP里会有一些用户发出的帖子内容特别优质,这些帖子内容会吸引很多用户来浏览,浏览量可能会非常大。这时可以在这些帖子添加一些推荐商品,这样浏览帖子的用户就会看到推荐的商品,可以点击商品链接,进入商品详情页,发生购物行为。

(2)电商APP的feed流

feed流指的是APP不断地、主动地显示各种新内容给用户,如果用户主动搜索和浏览就不是feed流。

用户在电商APP首页不断进行下拉时:电商APP会根据用户的喜好、爆款,通过算法不停地显示一批新的内容给用户,这种展示商品的方式就是电商APP的feed流。

比如当用户进入社区电商APP的首页后,进行不停下拉时:电商APP会把用户关注过的大v、可能感兴趣的美食帖子、浏览量高的爆款帖子,通过算法不停地计算出新的一批内容显示给用户, 这就社区电商的feed流。

此外,用户还可以在社区电商APP根据条件和分页进行结构化查询。

(3)社区电商的流量变现交易闭环

对于小红书这些社区电商APP来说,当社区互动做好了之后,APP就会吸引大量流量。而对于这种有大量流量的社区APP,流量变现的最好模式就是种草。

所谓种草就是用户发布分享帖子时,可以在分享内容里插入一些商品推荐并给出商品链接。这样当其他用户在浏览这些分享帖子时,就会看到推荐的商品和链接。然后点击链接就可以进入商品详情页,查看商品标题、图文视频介绍、价格、营销、库存等。接着加入购物车并发起订单提交、支付、履约,最后就能拿到商品。

接下来主要介绍社区电商部分功能点的实现:首页feed流、帖子分享浏览详情、社交分享和团购、商品详情和库存、购物车,这些功能会基于Redis的企业级缓存方案(主要) + RocketMQ(部分)来实现。

2.Redis缓存架构的典型生产问题

Redis的典型生产问题如下:

问题一:热key问题

热key就是某个key形成了热点。比如某明星突然官宣离婚,那么就会出现大量用户瞬时涌入该明星微博进行围观的情况。从而出现瞬时百万级千万级请求去获取Redis某个key的数据,这就是热key问题。

对于社区电商APP来说,如果有一个比较好的帖子分享和团购活动,那么也有可能短时间内引发大量用户把这该帖子详情页分享到微信等社交应用。从而引发大量用户在短时间内查看该分享详情页,最后造成Redis热key问题。

问题二:大value问题

存储的key-value特别大,比如value多达10M。这个value如果被频繁读取,那么就有可能把Redis机器的网络带宽打满,阻塞别的请求。

问题三:缓存穿透击穿问题

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求(布隆过滤器或设置空对象)。缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发请求特别多,同时读缓存没读到数据,又同时去数据库去取数据。

问题四:缓存失效和LRU被清理的问题

缓存数据设置了过期的时间,到期失效后应该如何来处理。Redis如果内存满了,LRU算法会自动淘汰一些数据,对于这些数据应该如何进行处理,如何才能实现自动加载和重建。

问题五:缓存雪崩问题

缓存雪崩是指缓存中数据大批量到过期时间,而查询量巨大,引起数据库压力过大甚至宕机。和缓存击穿不同的是:缓存击穿是指并发查同一条数据,缓存雪崩是不同数据都过期了。

如果Redis集群都崩掉了,只有数据库可以访问。那么首先就需要自动识别出缓存故障,然后马上进行限流对数据库进行保护,不让数据库崩溃,以及马上启动各个接口的降级机制。

各个接口的降级机制可以提前在JVM内存里,准备少量缓存作为降级备用数据。所以每个接口都需要有一个降级方案,一旦出现缓存故障,那么就可以自动限流避免数据库崩溃。

限流 -> 降级 -> 把JVM内存里缓存的默认数据给用户或者 直接对用户进行提醒。

问题六:数据库的一致性问题

缓存数据和数据库之间的一致性的保障,双写、异步同步如何保证一致性。

Redis生产总结:

Redis上了生产以后,首先需要模拟出足量的数据写入Redis里,比如模拟出千万级数据量写入部署好的Redis集群中。然后进行高并发压测,并通过CacheCloud进行监控运维。监控出有多少个缓存节点、里面放了多少G数据、大压力下接口性能如何、QPS多少、Redis机器负载如何、缓存命中率如何、数据库回源比例是多少、演示Redis节点故障的主从切换、演示Redis集群扩容等。

3.用户数据在读多写少场景下的缓存设计

具体的缓存设计如下:

一.新增或更新用户时先获取分布式锁,避免短时间发生多次请求出现重复新增

相关文章:

Redis应用-在用户数据里的应用

1.社区电商的业务闭环 接下来介绍的社区电商是以Redis作为主体技术、以MySQL和RocketMQ作为辅助技术实现的。 (1)社区电商运作模式 社区电商的关键点在于社区,而电商则是辅助性质(次要地位,流量变现)。社区可以分成很多种社区,比如美食社区、美妆社区、影评社区、妈妈社区…...

C++ 中面向对象编程如实现数据隐藏

在C中,面向对象编程(OOP)通过封装(Encapsulation)来实现数据隐藏。封装是OOP的一个核心概念,它允许将对象的属性和行为(即数据和方法)组合在一起,并对外隐藏对象的内部实…...

JavaEE 【知识改变命运】04 多线程(3)

文章目录 多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因:1.线程是抢占式的2. 多线程修改同一个变量(程序的要求)3. 原子性4. 内存可见性5. 指令重排序 总结线程安全问题产生的原因解决线程安全问题1. synchronized关键字…...

gz中生成模型

生成模型 通过服务调用生成 还记得parameter_bridge 吗? 我们在生成桥接的时候调用了这个cpp文件。 一个 parameter_bridge 实例用于消息传递(传感器数据)。之前的例子 另一个 parameter_bridge 实例用于服务桥接(动态生成模型…...

前端(Axios和Promis)

Promise 语法 <script>// 创建promise对象// 此函数需要再传入两个参数,都是函数类型let pnew Promise((resolve,reject)>{if(3>2){resolve({name:"李思蕾",age:23,地址:"河南省"});}else{reject("error");}});console.log(p);p.th…...

AI Agent:重塑业务流程自动化的未来力量(2/30)

《AI Agent&#xff1a;重塑业务流程自动化的未来力量》 摘要&#xff1a;整体思路是先介绍 AI Agent 的基本情况&#xff0c;再深入阐述其实现业务流程自动化的方法和在不同领域的应用&#xff0c;接着分析其价值和面临的挑战&#xff0c;最后得出结论&#xff0c;为读者全面…...

前端页面导出word

html-docx-js bug: vite使用html-docx.js会报错&#xff0c;点击下载上方文件替换即可 正文 npm install html-docx-js -S npm install file-saver -S<template><div id"managerReport">word内容......</div> </template><script>&l…...

【考前预习】1.计算机网络概述

往期推荐 子网掩码、网络地址、广播地址、子网划分及计算-CSDN博客 一文搞懂大数据流式计算引擎Flink【万字详解&#xff0c;史上最全】-CSDN博客 浅学React和JSX-CSDN博客 浅谈云原生--微服务、CICD、Serverless、服务网格_云原生 serverless-CSDN博客 浅谈维度建模、数据分析…...

ubuntu20.04复现 Leg-KILO

这里写目录标题 opencv版本问题下载3.2.0源代码进入解压后的目录创建构建目录运行 CMake 配置 配置时指定一个独立的安装目录&#xff0c;例如 /opt/opencv-3.2&#xff1a;出错&#xff1a; 使用多线程编译错误1&#xff1a; stdlib.h: 没有那个文件或目录错误2&#xff1a;er…...

Ensembl数据库下载参考基因组(常见模式植物)bioinfomatics 工具37

拟南芥参考基因组_拟南芥数据库-CSDN博客 1 Ensembl数据库网址 http://plants.ensembl.org/index.html #官网 如拟南芥等 那么问题来了&#xff0c;基因组fa文件和gff文件在哪里&#xff1f; 2 参考案例 拟南芥基因组fa在这里 注释gff文件在这里...

简单介绍web开发和HTML CSS_web网站开发流程

一、Web 开发&#xff1a;探索互联网世界的基石 1.1 什么是 Web 开发 Web 开发&#xff0c;简单来说&#xff0c;就是构建能够通过浏览器访问的网站的过程。Web 代表着全球广域网&#xff0c;也就是我们熟知的万维网&#xff08;www&#xff09;&#xff0c;它连接着世界各地的…...

Docker 中使用 PHP 通过 Canal 同步 Mysql 数据到 ElasticSearch

一、Mysql 的安装和配置 1.使用 docker 安装 mysql&#xff0c;并且映射端口和 root 账号的密码 # 获取镜像 docker pull mysql:8.0.40-debian# 查看镜像是否下载成功 docker images# 运行msyql镜像 docker run -d -p 3388:3306 --name super-mysql -e MYSQL_ROOT_PASSWORD12…...

数据结构之五:排序

void*类型的实现&#xff1a;排序&#xff08;void*类型&#xff09;-CSDN博客 一、插入排序 1、直接插入排序 思想&#xff1a;把待排序的数据逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 单趟&#x…...

科研绘图系列:R语言绘制热图和散点图以及箱线图(pheatmap, scatterplot boxplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3系统信息参考介绍 R语言绘制热图和散点图以及箱线图(pheatmap, scatterplot & boxplot) 加载R包 library(magrittr) library(dplyr) library(ve…...

基于 webRTC Vue 的局域网 文件传输工具

文件传输工具&#xff0c;匿名加密&#xff0c;只需访问网页&#xff0c;即可连接到其他设备&#xff0c;基于 webRTC 和 Vue.js coturn TURN 服务器 docker pull coturn/coturn docker run -d --networkhost \-v $(pwd)/my.conf:/etc/coturn/turnserver.conf \coturn/coturn…...

LeetCode 718. 最长重复子数组 java题解

https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/ 动态规划 class Solution {public int findLength(int[] nums1, int[] nums2) {int len1nums1.length,len2nums2.length;int[][] dpnew int[len11][len21];dp[0][0]0;//没有意义&#xff0c;…...

算法知识-15-深搜

一、概念 深度优先搜索&#xff08;Deep First Search, DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种策略沿着树的深度遍历树的节点&#xff0c;尽可能深地搜索树的分支。 二、关键步骤 选择起点&#xff1a;根据题目要求&#xff0c;选择一个或多个节点作为搜索…...

区块链dapp 开发详解(VUE3.0)

1、安装metamask 插件。 2、使用封装的工具包: wagmi . 3、 wagmi 操作手册地址:connect | Wagmi 4、注意事项&#xff1a; 因为最初是react 版本&#xff0c;所以在VUE版的官方文档有很多地方在 import 用的是 wagmi,需要改为 wagmi/vue 。 连接成功后打印的内容如下&…...

Plugin [id: ‘flutter‘] was not found in any of the following sources解决方法

文章目录 错误描述解决方法修正方案&#xff1a;继续使用 apply from修正后的 build.gradle说明警告的处理进一步验证 错误描述 Plugin [id: ‘flutter’] was not found in any of the following sources: Gradle Core Plugins (not a core plugin, please see https://docs…...

专升本-高数 1

第 0 章&#xff0c;基础知识 一&#xff0c;重要公式 1、完全平方 (ab)a2abb (a-b)a-2abb 2、平方差公式 &#xff08;a-b&#xff09;(ab)a-b 3、立方差公式 a-b(a-b)(aabb) 4、 立方和公式 ab(ab)(a-abb) 二&#xff0c;基本初等函数 1&#xff0c;幂函数 一元二…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...