### **如何解决redis的并发竞争key问题**
分析:这个问题大致就是,同时有多个子系统去set一个key。这个时候要注意什么呢?大家思考过么。需要说明一下,博主提前百度了一下,发现答案基本都是推荐用redis事务机制。博主不推荐使用redis的事务机制。因为我们的生产环境,基本都是redis集群环境,做了数据分片操作。你一个事务中有涉及到多个key操作的时候,这多个key不一定都存储在同一个redis-server上。因此,redis的事务机制,十分鸡肋。
回答:如下所示
(1)如果对这个key操作,不要求顺序
这种情况下,准备一个分布式锁,大家去抢锁,抢到锁就做set操作即可,比较简单。
(2)如果对这个key操作,要求顺序
假设有一个key1,系统A需要将key1设置为valueA,系统B需要将key1设置为valueB,系统C需要将key1设置为valueC.
期望按照key1的value值按照 valueA–>valueB–>valueC的顺序变化。这种时候我们在数据写入数据库的时候,需要保存一个时间戳。假设时间戳如下
> 系统A key 1 {valueA 3:00}
>
> 系统B key 1 {valueB 3:05}
>
> 系统C key 1 {valueC 3:10}
那么,假设这会系统B先抢到锁,将key1设置为{valueB 3:05}。接下来系统A抢到锁,发现自己的valueA的时间戳早于缓存中的时间戳,那就不做set操作了。以此类推。
- 前言
- php
- 设计模式
- 代码安全
- 性能测试
- 自动化测试
- 项目质量
- 自动化部署
- 掌握框架
- laravel5.8
- laravel声明周期
- mysql
- 物理文件组成
- 存储引擎和优化
- 权限和安全
- 备份和恢复
- 查询优化
- 索引优化
- 主从架构
- 监测工具
- redis
- redis简介
- redis存储
- windows下 php7.3+redis3 安装
- 参数配置说明
- redis 数据类型
- 缓存穿透和缓存雪崩问题
- redis并发竞争key问题
- thinkphp5+redis+mysql抢票示例
- apache
- nginx
- Nginx服务器的安装部署
- Nginx服务器架构
- Nginx服务器的高级配置
- Nginx服务器的Rewrite功能
- Nginx服务器的代理服务
- Nginx服务器的缓存机制
- Nginx源码结构
- Nginx基本数据结构
- 微服务
- 分布式
- 前后端分离解决方案
- 服务端实现
- thinkphp5
- laravel5
- 客户端实现H5
- vue.js
- element-ui
- vue-cli
- 客户端APP
- 客户端小程序
- 代码自动生成
- 商城项目实战
- 系统架构