java如何保证数据安全_java高并发下怎么保障数据安全?有哪些办法?
近些年科技发展水平越来越快速了,这也促使了大家对于新兴软件的学习。尤其是对于java的渴求更是明显,这也进一步说明了java功能的强大。今天就来为大家介绍一下java高并发下怎么保障数据安全以及有哪些办法?一起看看吧。
一、首先说一下怎么保障数据安全。
我们知道在多线程写入同一个文件的时候,会存现“线程安全”的问题。秒杀和抢购的场景中,还有另外一个问题,就是“超发”,如果在这方面控制不慎,会产生发送过多的情况。
1. 超发的原因
假设某个抢购场景中,我们一共只有100个商品,在最后一刻,我们已经消耗了99个商品,仅剩最后一个。这个时候,系统发来多个并发请求,这批请求读取到的商品余量都是99个,然后都通过了这一个余量判断,最终导致超发。
2. 悲观锁思路
解决线程安全的思路很多,可以从“悲观锁”的方向开始讨论。
悲观锁,也就是在修改数据的时候,采用锁定状态,排斥外部请求的修改。遇到加锁的状态,就必须等待。
虽然上述的方案的确解决了线程安全的问题,但是,会有很多这样的修改请求,每个请求都需要等待“锁”,某些线程可能永远都没有机会抢到这个“锁”,这种请求就会死在那里。同时,这种请求会很多,瞬间增大系统的平均响应时间,结果是可用连接数被耗尽,系统陷入异常。
3. FIFO队列思路
直接将请求放入队列中的,采用FIFO,这样的话,就不会导致某些请求永远获取不到锁。
然后,我们现在解决了锁的问题,全部请求采用“先进先出”的队列方式来处理。那么新的问题来了,高并发的场景下,因为请求很多,很可能一瞬间将队列内存“撑爆”,然后系统又陷入到了异常状态。
或者设计一个极大的内存队列,也是一种方案,但是,系统处理完一个队列内请求的速度根本无法和疯狂涌入队列中的数目相比。也就是说,队列内的请求会越积累越多,最终Web系统平均响应时候还是会大幅下降,系统还是陷入异常。
4. 乐观锁思路
这个时候,我们就可以讨论一下“乐观锁”的思路了。乐观锁,是相对于“悲观锁”采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。
这个数据所有请求都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他的返回抢购失败。这样的话,我们就不需要考虑队列的问题,不过,它会增大CPU的计算开销。但是,综合来说,这是一个比较好的解决方案。
5. 缓存服务器
redis分布式要保证数据都能能够平均的缓存到每一台机器,首先想到的做法是对数据进行分片,因为Redis是key-value存储的,首先想到的是Hash分片,可能的做法是对key进行哈希运算,得到一个long值对分布式的数量取模会得到一个一个对应数据库的一个映射,没有读取就可以定位到这台数据库。
有很多软件和服务都“乐观锁”功能的支持,。通过这个实现,可以保证数据的安全。
以上就是关于java高并发下怎么保障数据安全以及有哪些办法的主要内容了。总的来说过程还是比较复杂的。如果你对java知识感兴趣,想要了解更多常见问题,敬请关注奇Q工具网。
推荐阅读:
java如何保证数据安全_java高并发下怎么保障数据安全?有哪些办法?相关推荐
- java 怎么保证余额_高并发下怎么做余额扣减?
余额操作在大多数系统都是不可缺少和不允许出现问题的 如何修改余额 , 这个问题可能在实际项目中 没那么简单; 如何修改余额 假设一个用户数据 : id⇒12 | user_name⇒放放 | fee⇒ ...
- java耗时操作阻塞_springboot~高并发下耗时操作的实现
高并发下的耗时操作 官方文档中说DeferredResult和Callable都是为了异步生成返回值提供基本的支持.简单来说就是一个请求进来,如果你使用了DeferredResult或者Callabl ...
- JAVA random 缺陷_Random在高并发下的缺陷以及JUC对其的优化
Random可以说是每个开发都知道,而且都用的很6的类,如果你说,你没有用过Random,也不知道Random是什么鬼,那么你也不会来到这个技术类型的社区,也看不到我的博客了.但并不是每个人都知道Ra ...
- 国家加强网络数据安全管控 中信国安鸿联九五助力企业保障数据安全
近年来,我国先后出台实施<中华人民共和国网络安全法><中华人民共和国数据安全法><中华人民共和国个人信息保护法>,2021年11月14日,国家互联网信息办公室发布了 ...
- java 内存模型 多线程_Java 高并发三:Java内存模型和线程安全详解
网上很多资料在描述Java内存模型的时候,都会介绍有一个主存,然后每个工作线程有自己的工作内存.数据在主存中会有一份,在工作内存中也有一份.工作内存和主存之间会有各种原子操作去进行同步. 下图来源于这 ...
- java service层 事务_Java高并发秒时啊API之Service层1
---2-1 使用Spring托管Service依赖理论---------------------------- spring ioc优势(工厂模式): 1.对象创建统一托管 2.规范的生命周期管理 ...
- java queue源码_Java高并发系列之ArrayBlockingQueue源码解析
JUC包下定义了一个接口:BlockingQueue.其实现类有ArrayBlockingQueue等.本文先来介绍一下ArrayBlockingQueue.从字面可以看出,ArrayBlocking ...
- 聊聊高并发下库存加减那些事儿——“异步扣减库存”
聊聊高并发下库存加减那些事儿 不定期福利发放哦 聊聊高并发下库存加减那些事儿 背景 一般在日常开发中经常会遇到打折促销,秒杀活动,就如拼多多最近的4999抢券买爱疯11促销活动,毕竟谁的钱也不是大风刮 ...
- java高并发下的数据安全
高并发下的数据安全 我们知道在多线程写入同一个文件的时候,会存现"线程安全"的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程 ...
最新文章
- Android四大基本组件介绍与生命周期
- 【Hibernate】Hibernate的jar包的用途
- BZOJ1054(搜索)
- 《跟我一起写Makefile》读书笔记(3)
- snort简介以及在Ubuntu下的安装
- python3 beautifulsoup_Python3中BeautifulSoup的使用方法
- Windows 10 之修改登录背景(Win10BGChanger)
- 数据结构上机实践第11周项目3 - 图遍历算法实现
- 查看Linux版本命令
- SpringBoot2 Spring Cloud consul 分布式配置中心使用教程
- 刷ROM必備的clockworkmod recovery
- adb命令——简单常用命令介绍:截图——adb shell screencap -p /sdcard/123.png...
- mac 安装apk包 =》 adb (安装android 包)
- 互联网企业实习面试经验分享(谷歌微软hulu阿里腾讯字节美团百度等等)
- 阿里资深架构师总结:顶级高手都具备的四种思维模型
- ELK基于ElastAlert实现日志的微信报警
- 在类方法中可 用this来调用本类的类方法
- 谷歌浏览器Google如何设置站点弹出窗口
- “刘畊宏女孩”掀起居家云健身热潮,海外健身市场引流变现新方向?
- html自动登录蓝奏云,蓝奏云真实地址解析