并发下如何使用redis存储列表数据
1、问题
今天在工作中遇到一个问题,需要查询表A,需要根据每天所处小时所在时段,返回不同的记录给前端展示,如0-2时是在昨日0到2时生成的记录,而2-4时则是在昨日2-4时生成的记录,每条记录有一个唯一的id。表A记录的数据只读不写,但会一一对应关联另外一个表B的数据,表B的数据需要读和写。
由于表A的数据只读不写,所以会在第一次查询时,缓存进redis,这样每一天只需要进行一次IO,后续就可以只通过缓存读取。而表B的数据需要会涉及到写,且每个用户共享这些记录,所以并发会比较高。为了减少缓存穿透,并没有将表B符合条件的记录作为列表存入redis(因为存入列表,写一条记录就需要删除整个列表缓存),而是先筛选表A的记录,收集id列表,再查表B,再将表B记录的id的作为key单独存入redis。这是一个非常蠢的设计,记录单独存入redis中,也就意味着根据id循环io查单条和循环写入缓存,程序需要与数据库和redis进程频繁交互,原本为了提高查询效率的考虑,反而大大增加了查询压力,直接影响就是查询效率极低,压力测试不通过。
由于每个时段需要展示的数据量并不多,只有几十条,于是便采用list进存入redis,但在压力测试高并发的条件下,会导致重复添加记录到redis,这样会造成两个影响,其一是冗余数据在redis中会形成大key,占用空间增大且查询减慢,其二是程序处理也会增加遍历成本且可能出错。可如果对该查询进行同步(加锁),这又会影响查询效率,达不到性能优化的目的。那么应该如何解决呢?
2、解决:redis的hash结构
redis中的另一种数据结构hash,则可以完美解决这个问题: hash可以类比成Java中的Map,在这个业务当中,可以将每条记录的id作为key,记录本身作为value,形成一个会去重的key-value列表,在高并发下,多个线程的写入,相同的key会去重,这样不会造成冗余数据
相关文章:
并发下如何使用redis存储列表数据
1、问题 今天在工作中遇到一个问题,需要查询表A,需要根据每天所处小时所在时段,返回不同的记录给前端展示,如0-2时是在昨日0到2时生成的记录,而2-4时则是在昨日2-4时生成的记录,每条记录有一个唯一的id。表…...
Leecode螺旋矩阵 II59
59.螺旋矩阵II 题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 文章讲解:代码随想录 视频…...
echarts 横向柱状图
<template><div ref"chart" style"height: 100%"></div> </template><script> import * as echarts from "echarts"; var cate ["质量通病1", "质量通病2", "质量通病3", "质…...
Vue3 —— to 全家桶及源码学习
该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>,且包含 typescript 的基础用法 前言 本篇主要学习几个 api 及相关源码: toReftoRefstoRaw 一、toRef toRef(reactiveObj, key) 接收两个参数,第一个是 响应式对象…...
(第三篇) ansible-kubeadm在线安装高可以用集群()
ansible可以安装的KS8版本如下: 请按照此博客中的内容操作后,才可以通过下面的命令查询到版本。 [rootk8s-master01 ~]# yum list kubectl --showduplicates | sort -r kubectl.x86_64 1.20.0-0 kubern…...
flutter开发实战-颜色Color与16进制转换
flutter开发实战-颜色Color与16进制转换 一、颜色Color与16进制转换 代码如下 import dart:ui; class ColorUtil {/// 十六进制颜色,/// hex, 十六进制值,例如:0xffffff,/// alpha, 透明度 [0.0,1.0]static Color hexColor(int hex, {doub…...
Linux(进程地址空间)
进程地址空间 程序地址空间进程地址空间 程序地址空间 在Linux环境下,我们可以对上述程序空间地址进行验证: 运行程序,可以看到,我们就可以很好看出程序的地址空间的排布了: 进程地址空间 严格来说,我们…...
VLAN监控及常见问题排查
局域网,我们通常称为LAN,是一种由基于同一地理位置的设备组成的网络,可实现它们之间的通信,局域网的虚拟对应物是虚拟局域网或 VLAN。VLAN 增强了 LAN,提供了进行更改的灵活性、更高的可扩展性和更好的安全性。 使用 …...
PromQL实现Actuator获取的JVM指标的Full GC次数监控
Spring Boot 版本需要2.0.0或更高版本。 添加Micrometer Prometheus registry依赖: <dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId> </dependency>在application.properties中开…...
3.正则表达式
3.1什么是正则表达式 ●正则表达式( Regular Expression) 是用于匹配字符串中字符组合的模式。在JavaScript中, 正则表达式也是对象 ●通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式 ●正则表达式在JavaScript中的使用场景: ➢…...
【学习FreeRTOS】第3章——FreeRTOS移植及配置文件
1.FreeRTOS源码简介 【一级目录:/】以下FreeRTOS的源码,其中,FreeRTOS文件夹最为重要,代笔FreeRTOS内核 【二级目录:/FreeRTOS】以下为FreeRTOS文件夹的内容,比较重要的有Demo文件夹和Source文件夹 【三级…...
Java算法_ LRU 缓存(LeetCode_Hot100)
题目描述:请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 import java.util.HashMap; import java.util.Map;/*** 2 * Author: L…...
Hugging Face 的文本生成和大语言模型的开源生态
[更新于 2023 年 7 月 23 日: 添加 Llama 2。] 文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性,并且和原始训练数据更加接近,也更不像人话。最近的研…...
Docker Compose用法详解
文章目录 Docker Compose是什么安装Docker ComposeCompose文件编写使用Docker Compose部署-管理应用 Docker Compose是什么 Docker Compose是一个用于定义和运行多容器Docker应用程序的python工具。它允许您使用一个单独的配置文件来定义和配置多个相关容器的服务,…...
分布式链路追踪概述
分布式链路追踪概述 文章目录 分布式链路追踪概述1.分布式链路追踪概述1.1.什么是 Tracing1.2.为什么需要Distributed Tracing 2.Google Dapper2.1.Dapper的分布式跟踪2.1.1.跟踪树和span2.1.2.Annotation2.1.3.采样率 3.OpenTracing3.1.发展历史3.2.数据模型 4.java探针技术-j…...
css中的var函数
css中的var函数 假设我们在css文件存在多个相同颜色值,当css文件越来越大的时候,想要改颜色就要手动在每个旧颜色上修改,这样维护工作非常难进行。 但是我们可以使用变量来存储值,这样可以在整个css样式表中重复使用,…...
第五次作业 运维高级 构建 LVS-DR 集群和配置nginx负载均衡
1、基于 CentOS 7 构建 LVS-DR 群集。 LVS-DR模式工作原理 首先,来自客户端计算机CIP的请求被发送到Director的VIP。然后Director使用相同的VIP目的IP地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包…...
neo4j电影库-关系查询
关系类型数量源数据目标数据属性ACTED_IN172演员电影roles(角色扮演)属性,属性值为数组DIRECTED44导演电影无PRODUCED15制片商电影无WROTE10作家电影无FOLLOWS3影评人影评人无REVIEWED9影评人电影summary(影评摘要)和 …...
2020/10-2023/7 Notes
2020/10-2023/7 Notes 1.Unity WebGL 字体 动态字体 2.Path.Combine 3.播放Unity WebGL构建包 Vistual Studio Code->Extensions->Live Server 4.Cloud Compare laszip.net RenderDoc Mike Zero Ras Mapper HDF Viewer 5.使Unity支持GLSL Project->添加命令行参数-&g…...
在UOS系统中管理ORACLE数据库
在明确了“数字中国”建设战略后。自主创新与国产化已成为我国实现科技强国、经济强国的发展趋势与行业共识。 即信息技术应用创新产业,简称“信创”。 而现有的国产操作系统,虽然已日趋成熟,但因为很多应用软件由国外垄断,因此…...
别再手动回微信了!用Python+WxAuto给电脑微信装个AI助理(支持ChatGPT/DeepSeek)
打造智能微信助手:PythonWxAuto实现24小时AI自动回复系统 微信已经成为现代人工作和生活中不可或缺的通讯工具,但对于忙碌的开发者、电商运营者或自由职业者来说,频繁的消息回复常常成为效率杀手。想象一下这样的场景:当你正在专…...
Fan Control终极指南:从静音办公到游戏超频的完整风扇控制解决方案
Fan Control终极指南:从静音办公到游戏超频的完整风扇控制解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub…...
Windows窗口管理终极指南:Traymond让系统托盘变身高效收纳站
Windows窗口管理终极指南:Traymond让系统托盘变身高效收纳站 【免费下载链接】traymond A simple Windows app for minimizing windows to tray icons 项目地址: https://gitcode.com/gh_mirrors/tr/traymond 你是否厌倦了Windows任务栏上拥挤不堪的窗口图标…...
互联网大厂为啥不把研发迁到二三线城市?
👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事上…...
Adafruit MPR121电容触摸库深度解析与嵌入式集成指南
1. 项目概述Adafruit MPR121 是一款专为 Adafruit 官方 MPR121 电容式触摸传感器模块设计的 Arduino 兼容库,面向嵌入式硬件工程师与固件开发者提供稳定、可复用的底层驱动能力。该库并非通用型 MPR121 封装,而是深度适配 Adafruit 自研硬件(…...
OpenClaw技能扩展实战:用Qwen3.5-9B实现公众号图文自动化
OpenClaw技能扩展实战:用Qwen3.5-9B实现公众号图文自动化 1. 为什么选择OpenClaw做公众号自动化 去年我开始运营技术公众号时,最头疼的就是内容发布的繁琐流程:写完Markdown要手动转格式、找配图、调整排版,最后才能上传到公众号…...
Windows安卓应用运行新方案:轻量级安卓环境搭建与实践指南
Windows安卓应用运行新方案:轻量级安卓环境搭建与实践指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化办公与多设备协同的时代,用户…...
007、记忆(Memory)机制:让AI拥有对话上下文的能力
007、记忆(Memory)机制:让AI拥有对话上下文的能力 昨天深夜调试一个对话机器人,用户问“今天的天气怎么样?”,系统返回了天气信息;接着用户又问“那明天呢?”,结果机器人…...
2025届学术党必备的六大降重复率工具推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 需从文本特征方面来着手降低AIGC率,详而言之,对于高频词汇能够予以替…...
Cosmos-Reason1-7B作品集:覆盖IMO/CMO/AMC等国际数学竞赛真题解析
Cosmos-Reason1-7B作品集:覆盖IMO/CMO/AMC等国际数学竞赛真题解析本文展示Cosmos-Reason1-7B在数学竞赛真题解析中的实际效果,所有案例均基于真实题目生成1. 工具简介:你的本地数学竞赛解题助手 Cosmos-Reason1-7B是一款专门针对推理任务优化…...
