在日常的开发中,有时我们会遇到这样的场景:多个人对同一个数据进行修改操作,导致并发问题发生。这个问题可以通过悲观锁来解决,但是悲观锁也是有限制的,在某些场景中是不适应的,因为和数据的耦合度太高了,可能会影响到其他业务的操作。而使用redis来解决这一问题是很好的选择。

原理介绍

redis的存储指令中有一个setnx方法,这个方法有一个特性,就是当键不存在的时候,会将这条数据插入,并且返回1,如果这个键已经存在了,那么就不会插入这条数据,并且返回0。

功能实现

明白了这个实现的原理之后,要实现这个功能就很简单了。

  1. 在事务开启的时候,我们就去redis中setnx一条数据,这条数据的键要和你当前操作的数据有关,这样就只会锁定一条数据,而不影响其他数据的业务,例如:做订单审核的时候,将订单号+业务简写作为键。
  2. 判断上面插入操作的返回值,如果返回1,就继续执行,如果返回0,直接return.
  3. 在事务结束之后,将redis中的这条数据删除。直接使用del(String key)就可以了。

具体实现可以参考:注解的方式实现redis分布式锁
使用zookeeper实现分布式锁的示例:zookeeper实现分布式锁

使用redis解决并发操作问题相关推荐

  1. java操作redis并发_使用Redis incr解决并发问题的操作

    项目背景: 1.新增问题件工单,工单中有工单编码字段,工单编码字段的规则为 "WT"+yyyyMMdd+0000001. 2.每天的工单生成量是30W,所以会存在并发问题 解决思路 ...

  2. Redis解决高并发(秒杀抢红包)

    1,Redis 丰富的数据结构(Data Structures) 字符串(String) Redis字符串能包含任意类型的数据 一个字符串类型的值最多能存储512M字节的内容 利用INCR命令簇(IN ...

  3. 解决redis高并发问题的几种思路

    解决redis高并发问题的几种思路 1:布隆过滤器 首先,布隆过滤器能解决绝大部分恶意攻击的请求,比如我们数据库中的id通常都设为自增的,是有一定范围大小的,如果有黑客恶意用数据库中没有的id一直访问 ...

  4. Redis高并发问题的解决

    redis为什么会有高并发问题 redis的出身决定 redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘.由于单线程所以redis本身并没有锁的概念,多个客户端连接 ...

  5. 使用高并发利器redis—解决淘宝/微博的【热门搜索】和【最近搜索】的功能

    推荐以下好文: 详解单体架构 微服务 微服务架构 微服务各个组件 分布式 集群 负载均衡 微服务springcloud环境下基于Netty搭建websocket集群实现服务器消息推送----netty ...

  6. JAVA面试题系列:如何解决Redis的并发竞争问题

    1 面试题 redis的并发竞争问题是什么?如何解决这个问题?了解Redis事务的CAS方案吗? 2 考点分析 这个也是线上非常常见的一个问题,就是多客户端同时并发写一个key,可能本来应该先到的数据 ...

  7. Nginx与Redis解决高并发问题

    Nginx与Redis解决高并发问题 参考文章: (1)Nginx与Redis解决高并发问题 (2)https://www.cnblogs.com/nucdy/p/5516511.html 备忘一下.

  8. 使用Redis解决高并发方案 以及 思路讲解

    NoSQL Not Only SQL的简称.NoSQL是解决传统的RDBMS在应对某些问题时比较乏力而提出的. 即非关系型数据库,它们不保证关系数据的ACID特性,数据之间一般没有关联,在扩展上就非常 ...

  9. redis解决高并发问题,如商品秒杀

    redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动... redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提 ...

最新文章

  1. mysql etc_mysql etc下my.conf配置详情
  2. “95后”曹原又双叒叕发Nature了!1个月2篇,已经第6篇了……
  3. 基于SSM实现垃圾分类信息管理系统
  4. [SDUT](3329)顺序表应用5:有序顺序表归并 ---有序表归并(线性表)
  5. boost::fusion::pop_back用法的测试程序
  6. [转载]:合并两个已排序好的int数组,并排序返回c#实现
  7. python3中的rang()函数
  8. Python教程-python字典中key的灵活使用fromkeys()
  9. 抽奖随机滚动_年会抽奖该怎么玩?
  10. 手机号码归属地查询,手机号码归属地批量查询
  11. PLM项目目标及阶段
  12. android 标准注释方法,android studio 学习笔记之 注释规范化
  13. [译] The Cost Of JavaScript
  14. 【ICML 2020联邦学习论文解读】SCAFFOLD: Stochastic Controlled Averaging for Federated Learning
  15. URL重写实现会话跟踪
  16. 懒人理财法之基金定投(Automatic Investment Plan)
  17. Mathorcup数学建模竞赛第六届-【妈妈杯】A题:基于模糊综合评价和灰色关联度的淡水养殖池塘水华分析、预测及净化模型(附一等奖获奖论文和matlab代码)
  18. GPU百科全书(1)方程与几何
  19. python 源码编译 without_vcmi(魔法门英雄无敌3 - 开源复刻版) 源码编译(示例代码)...
  20. MySql·设置字符集编码

热门文章

  1. MySQL集群架构-DRBD+headbeat +lvs+keepalived
  2. SCCM2012系列之四,SCCM2012部署前的SQL Server准备
  3. 手动添加linux用户
  4. JQuery Mobile中特有事件和方法
  5. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信
  6. Nginx默认虚拟主机、 Nginx用户认证、Nginx域名重定向、访问日志·····
  7. CentOS7添加Nginx为系统服务
  8. 利用java poi对excel表的读写操作
  9. Deploy sahara on openstack-icehouse
  10. Spring中HibernateCallback的用法(转)