做服装行业网站/产品宣传方式有哪些

做服装行业网站,产品宣传方式有哪些,怎么做网站的广告,模板网站建设流程图从你提供的文本来看,核心是 Redis 作为缓存的检查机制,以及非原子性操作导致的不一致性问题。 我们可以拆解为两个部分来理解: 📌 1. 逻辑:先查 Redis,再决定是否注册 逻辑流程 先查询 Redis 是否有某个 …

从你提供的文本来看,核心是 Redis 作为缓存的检查机制,以及非原子性操作导致的不一致性问题。
我们可以拆解为两个部分来理解:


📌 1. 逻辑:先查 Redis,再决定是否注册

逻辑流程

  1. 先查询 Redis 是否有某个 key(可能是用户注册标识、验证码等)。
  2. 如果 Redis 中有数据,则直接返回(避免重复操作)。
  3. 如果 Redis 中没有数据,则执行新的注册,并存入 Redis,设置60秒过期时间

示例代码

String key = "user:register:" + phoneNumber;
String cachedValue = redisTemplate.opsForValue().get(key);if (cachedValue == null) {  // Redis 无数据,执行注册逻辑// 执行新用户注册userService.register(phoneNumber);// 将 key 存入 Redis,防止重复注册redisTemplate.opsForValue().set(key, "registered", 60, TimeUnit.SECONDS);
} else {System.out.println("该用户已注册");
}

⏳ 作用

  • 通过 Redis 缓存查询结果,降低数据库查询次数,提高性能。
  • 避免并发重复注册。

📌 2. 非原子性操作,导致数据不一致

这一部分说的是 多个 Redis 操作不是原子的,可能会导致数据不一致问题,尤其是在并发情况下

⚠ 问题:非原子性操作

Redis 并不自动保证多个操作的原子性。如果有多个线程同时执行:

  1. A 线程查询 Redis,发现 key 不存在(缓存失效)。
  2. B 线程也查询 Redis,发现 key 也不存在(同样缓存失效)。
  3. A 和 B 线程都开始执行注册逻辑(导致重复注册)。
  4. A 和 B 线程都将数据写入 Redis,但只有一个生效,另一个可能会被覆盖。
🛠 解决方案
  1. 使用 SETNX 实现分布式锁

    • SETNX(SET if Not eXists)可以确保只有一个线程可以写入 key,避免并发问题:
    Boolean success = redisTemplate.opsForValue().setIfAbsent(key, "registered", 60, TimeUnit.SECONDS);
    if (Boolean.TRUE.equals(success)) {userService.register(phoneNumber);
    } else {System.out.println("该用户已注册");
    }
    

    作用

    • 只有第一个线程能成功写入 key,其余线程会失败,避免重复注册。
  2. 使用 Redis 事务 (MULTI / EXEC)

    • MULTI + EXEC 确保多个 Redis 操作在同一事务中执行
    redisTemplate.execute((RedisCallback<Object>) connection -> {connection.multi();connection.set(key.getBytes(), "registered".getBytes());connection.expire(key.getBytes(), 60);return connection.exec();
    });
    

    作用

    • 确保写入 key 和设置过期时间是原子的,不会被中途修改。
  3. 使用 Redisson 分布式锁

    • 适用于高并发场景,保证多个服务器之间不会重复注册:
    RLock lock = redissonClient.getLock("register-lock:" + phoneNumber);
    try {if (lock.tryLock(5, 10, TimeUnit.SECONDS)) { userService.register(phoneNumber);}
    } finally {lock.unlock();
    }
    

    作用

    • 只有一个线程能拿到锁,执行注册,其他线程等待或直接返回。

🔍 结论

  • 先查 Redis,若不存在则执行注册并缓存数据,提升性能,减少数据库压力。
  • 但多个 Redis 操作非原子性,可能会导致数据不一致(如并发下重复注册)。
  • 解决方案
    1. SETNX(互斥锁):确保只有一个线程能注册。
    2. Redis 事务:保证多个 Redis 操作同时执行。
    3. Redisson 分布式锁:在多服务器环境下防止并发问题。

最终目标确保并发情况下数据一致性,避免重复注册或异常数据覆盖。 🚀

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

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

相关文章

git-提交时间和作者时间的区别

1.介绍 定义介绍 提交时间&#xff08;Committer Date&#xff09;&#xff1a;决定了提交在 Git 历史中的位置&#xff0c;通常影响 GitHub 上提交显示的顺序。 作者时间&#xff08;Author Date&#xff09;&#xff1a;虽然不影响提交的排序&#xff0c;但在每个提交详情页…

Leetcode 146 LRU缓存 的三种解法

146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0…

尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类

6-5 抽象类(abstract)与抽象方法&#xff08;important&#xff09; 一、什么叫抽象类&#xff1a; 有时候将一个父类设计的非常抽象&#xff0c;以至于它没有具体的实例&#xff0c;这样的类称为抽象类 abstract关键字的使用&#xff1a; ​ 1、abstract:抽象的 ​ 2、abs…

【Python pro】基本数据类型

一、数字类型 1.1 数字类型的组成 1.1.1 整数 &#xff08;1&#xff09;十进制&#xff0c;二进制0b&#xff0c;八进制0o&#xff0c;十六进制0x print(16 0b10000 0o20 0x10) # 输出&#xff1a;True&#xff08;2&#xff09;十进制转其他进制 a bin(16) b oct(1…

拯救者电脑在重装系统之后电源计划丢失Fn+Q切换不了模式怎么恢复?

参考联想知识库的一下链接&#xff1a; https://iknow.lenovo.com.cn/detail/196192 其中下载的解压文件后的文件需要复制粘贴到D盘的根目录下&#xff0c;再来运行文件。若在生成的log文件中看到导入成功以及控制面板中看到已添加的电源计划即可 如果还是无效可是试试以下的…

ubuntu 执行 sudo apt-get update 报错

记录一下&#xff0c;遇到这个问题了&#xff0c;网络上看到的解决办法&#xff0c;亲测有效 执行sudo apt-get update ,却报以下错误&#xff0c;“SECURITY: URL redirect target contains control characters rejecting ” 经检查发现&#xff0c;/etc/apt/source.list 下的…

深度集成DeepSeek大模型:WebSocket流式聊天实现

目录 5分钟快速接入DeepSeek大模型&#xff1a;WebSocket实时聊天指南创建应用开发后端代码 (Python/Node.js)结语 5分钟快速接入DeepSeek大模型&#xff1a;WebSocket实时聊天指南 创建应用 访问DeepSeek官网 前往 DeepSeek官网。如果还没有账号&#xff0c;需要先注册一个。…

java断点调试(debug)

在开发中&#xff0c;新手程序员在查找错误时, 这时老程序员就会温馨提示&#xff0c;可以用断点调试&#xff0c;一步一步的看源码执行的过程&#xff0c;从而发现错误所在。 重要提示: 断点调试过程是运行状态&#xff0c;是以对象的运行类型来执行的 断点调试介绍 断点调试是…

软件技术实训室解决方案(2025年最新版)

软件产业作为新兴产业的核心组成部分&#xff0c;是推动数字经济发展的重要力量。在“十四五”规划的新机遇与挑战下&#xff0c;我国已明确将加强关键数字技术创新应用作为战略重点&#xff0c;并将软件和信息技术服务业的发展列为重中之重。这不仅是为了加速构建现代产业体系…

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版&#xff1a;一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式&#xff0c;包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐&#xff0c;foobar2000都能完美播放。除此之…

DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地

对于个人开发者或尝鲜者而言&#xff0c;本地想要部署 DeepSeek 有很多种方案&#xff0c;但是一旦涉及到企业级部署&#xff0c;则步骤将会繁琐很多。 比如我们的第一步就需要先根据实际业务场景评估出我们到底需要部署什么规格的模型&#xff0c;以及我们所要部署的模型&…

EXCEL解决IF函数“您已为此函数输入太多个参数”的报错

IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果)&#xff0c;所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时&#xff0c;Excel就会报这个错误。比如多个IF语句叠加&#xff0c;但可能在嵌套的过程中没有正确关闭每个IF函数的括号&#xff0c;导…

图像质量评价指标-UCIQE-UIQM

一、评价指标UCIQE 在文章《An underwater color image quality evaluation metric》中&#xff0c;提到的了评价指标UCIQE&#xff08;Underwater Colour Image Quality Evaluation&#xff09;&#xff0c;是一种无参考图像质量评价指标&#xff0c;主要用于评估水下图像的质…

基于Springboot+微信小程序调用文心一言大模型实现AI聊天

一、文章前言 此文主要实现基于Springboot微信小程序调用文心一言大模型实现AI聊天对话功能&#xff0c;使用Java作为后端语言进行支持&#xff0c;界面友好&#xff0c;开发简单。 二、开发流程及工具准备 2.1、登录百度智能云平台&#xff0c;获取 API Key 和 Secret Key两个…

python爬虫系列课程2:如何下载Xpath Helper

python爬虫系列课程2:如何下载Xpath Helper 一、访问极简插件官网二、点击搜索按钮三、输入xpath并点击搜索四、点击推荐下载五、将下载下来的文件解压缩六、打开扩展程序界面七、将xpath.crx文件拖入扩展程序界面一、访问极简插件官网 极简插件官网地址:https://chrome.zzz…

PHP支付宝--转账到支付宝账户

官方参考文档&#xff1a; ​https://opendocs.alipay.com/open/62987723_alipay.fund.trans.uni.transfer?sceneca56bca529e64125a2786703c6192d41&pathHash66064890​ 可以使用默认应用&#xff0c;也可以自建新应用&#xff0c;此处以默认应用来讲解【默认应用默认支持…

对称加密算法——IDEA加密算法

Java IDEA算法详解 1. 理论背景 IDEA&#xff08;International Data Encryption Algorithm&#xff09;是一种对称密钥加密算法&#xff0c;由Xuejia Lai和James Massey于1991年提出。它被设计用于替代DES&#xff08;Data Encryption Standard&#xff09;算法&#xff0c;…

rustdesk远程桌面自建服务器

首先&#xff0c;我这里用到的是阿里云服务器 centos7版本&#xff0c;win版客户端。 准备工作 centos7 服务器端文件&#xff1a; https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip win版客户端安装包&#xff1…

【DL】浅谈深度学习中的知识蒸馏 | 输出层知识蒸馏

目录 一 核心概念与背景 二 输出层知识蒸馏 1 教师模型训练 2 软标签生成&#xff08;Soft Targets&#xff09; 3 学生模型训练 三 扩展 1 有效性分析 2 关键影响因素 3 变体 一 核心概念与背景 知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;是一种模…

嵌入式学习第十六天--stdio(二)

文件打开 open函数 #include <fcntl.h> int open(const char *pathname&#xff0c;int flags); int open(const char *pathname&#xff0c;int flags&#xff0c;mode_t mode); 功能: 打开或创建文件 参数: pathname //打开的文件名 flags //操作…