当前位置: 首页 > news >正文

济宁网站建设流程购物网站 怎么做

济宁网站建设流程,购物网站 怎么做,公司网站建设步骤,网站底部模板源码redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩https://zhenghuisheng.blog.csdn.net/article/details/142577507【四】redisson实现分布式锁实战和源码剖析https://zhenghuisheng.blog.csdn.net/article/details/142646301【五】redis保证和mysql数据一致性https://zhenghuisheng.blog.csdn.net/article/details/142687101 如需转载请输入https://blog.csdn.net/zhenghuishengq/article/details/142687101 redis保证和mysql数据一致性 一redis保证和mysql数据一致性1数据不一致原因1.1更新缓存出现的问题1.2删除缓存出现的问题1.3理想情况 2数据不一致解决方案2.1延迟双删(不推荐)2.2消息队列2.3分布式锁2.4canal同步 一redis保证和mysql数据一致性 在项目中redis一般作为缓存使用从而加快系统的读写效率和吞吐量但是数据最终一般是存储在mysql中因此在实际开发中尤其是在高并发的互联网项目中经常会遇到这种mysql和redis数据不一致的情况。如在一个电商的扣减库存的场景中如果redis中的数据和mysql中的数据没有保证一致那么就很有可能造成超卖的问题那么平台就可能会因为这个问题造成商家的损失 1数据不一致原因 数据不一致原因无非就是那几种原因在分布式场景中并发带来的问题网络抖动带来的问题分布式事务不一致问题等。 1.1更新缓存出现的问题 如下面这个场景以扣减库存的场景为例假设有100个库存此时多个线程对该商品下单。如在一个4s的时间线内线程1和线程2先后下单在不考虑mysql事务的情况下来查看以下会出现的问题其流程如下 首先在第一秒时线程1进行一个扣减库存操作但是由于网络卡顿的原因导致在第4秒才更新redis的缓存只为95并且写入mysql的数据也为95在第二秒时线程2也下单10件商品此时redis缓存还是100因此操作的还是这个100那么扣减库存之后的值变成90然后在第三秒时更新缓存值为90由于暂时不考虑事务因此此时mysql的值为100-10-5为85而redis中的缓存值由于覆盖的问题导致还是95此时就出现了mysql和redis值不一致的问题。 1.2删除缓存出现的问题 更新缓存指的是在写完mysql数据之后立马就去更新缓存效率可能会低一些除了更新缓存还可以删除缓存就是在写的时候不更新缓存而是直接删掉缓存再读数据的时候进行redis缓存数据的写入如以下流程 首先线程1在第一秒时扣减5个库存然后将缓存删除此时redis中的值为95第二秒一个线程3来读数据发现缓存没有就读数据库此时数据库的值为95在第三秒有一个用户下单扣减库存操作为10此时mysql中为85删除缓存由于卡顿问题在第四秒线程3才执行更新缓存操作但是拿的值不是最新值导致原本redis值为85的由于覆盖的问题此时redis的值为95导致redis和mysql数据不一致的问题 1.3理想情况 在理想情况下我们更希望的是每个命令都可以顺序执行将各种无法预料的并发问题直接改成串行化操作。当然如果在此基础上进行优化的话在加锁的同时考虑加一把互斥锁从而保证读读共享其他互斥的操作 2数据不一致解决方案 2.1延迟双删(不推荐) 延迟双删顾名思义就是延迟一段时间删除某些线程因为卡顿原因导致更新缓存的值出错如下图线程3由于卡顿造成缓存覆盖的问题从而导致了redis中缓存和mysql中的值出现不一致的问题但是通过延迟双删的方式对缓存做两次删除并且两次删除间设置一定的时间间隔从而解决部分卡顿问题 其伪代码如下首先是第一次删除缓存然后休眠个300秒然后再次删除缓存。 #第一次删除缓存 redis.delKey(phone:1001) #休眠300毫秒 Thread.sleep(300) #再删除缓存 redis.delKey(phone:1001)延迟双删的方式也不能完全解决这种数据不一致问题只能减少这种数据不一致概率的事件发生因为不能保证某些查询的线程要卡顿多久比如我设置300毫秒但是有的线程卡顿一秒因此也不能够完全解决。 其次所有的写操作都得删除两次这对redis来说会有一定的性能影响除了本身的操作之外还得额外的增加一段延时的时间对于使用redis的初衷来说就没那么友好更加的适用于 读多写少 的场景如商品首页等。 2.2消息队列 如果为了强一致性那么可以直接使用消息队列来使用其本质也很简单将并行的操作全部加入到消息队列中串行执行。 消息队列确实可以解决这种数据不一致问题因为都串行执行不会有那种并行和并发的问题。但是使用消息队列需要额外的引入中间件还需要考虑数据的持久化不丢失以及顺序消费等问题如果整个系统是已经有再使用消息中间件的话如kafka、rocketMq这些那么是可以考虑使用这种方式的 2.3分布式锁 在上一篇中讲解了redis分布式锁的使用和底层原理分布式锁的机制和上面的消息队列的机制一样都是将并行执行的操作方式改成串行的执行方式直接通过redisson实现的分布式锁即可 RLock lock redisson.getLock(PHONE_ID); lock.lock(); lock.unlock();通过这种分布所锁机制可以保证数据的串行执行不出现redis数据脏写问题和覆盖问题 当然也可以通过redis的 读写锁 进行优化部分代码如下直接在读的接口中使用读锁使用后需要释放锁 //获取一把读写锁 RReadWriteLock readWriteLock redissoon.getReadWriteLock(lockKey); //获取读锁 RLock readLock readWriteLock.readLock(); //加锁 readLock.lock(); //解锁 readLock.unlock();写的接口中使用写锁即可使用后也许把锁释放。 //获取一把读写锁 RReadWriteLock readWriteLock redissoon.getReadWriteLock(lockKey); //获取写锁 RLock writeLock readWriteLock.writeLock(); //加锁 writeLock.lock(); //解锁 writeLock.unlock();不管是原生的Redission锁还是这种读写锁底层都是通过lua脚本实现这种方式也更加的适用于 读多写少 的场景。相对于消息队列可以选这种方式实现 2.4canal同步 上面几种方式都是需要通过手动的删除缓存或者更新缓存的数据实现数据同步除了上面几种方式之外还可以用阿里的canal开源中间件来实现数据的同步并且通过这种方式不需要认为的去操作缓存 其原理也很简单就类似于mysql的主从复制原理伪装成一个从结点监听mysql的binlog日志然后将执行的mysql的操作通过这个canal中间件同步到redis中。 这样的话也不需要去考虑redis的更新和删除操作只需要查即可查不到再查mysql。 当然如果想直接使用这种canal中间件的话需要手动的重新部署也相当于重新引入了一个新的中间件。如果数据量大的话可以考虑使用这种方式来解决数据不一致问题。
http://www.hkea.cn/news/14370744/

相关文章:

  • 上海网站建设seodian自定义wordpress后台
  • 电子商务网站建设与电子支付用二级页面做网站的源代码
  • 深圳哪些设计公司做网站比较出名网站建设接口开发
  • 企业网站建设找哪家俄罗斯军事新闻最新消息
  • 积极做好门户网站建设工作惠阳做网站公司
  • 织梦cms做多语言的网站什么是seo什么是sem
  • 统计网站建设企业管理咨询公司起名
  • 阿里巴巴吧做网站福州如何做百度的网站
  • 官方模板关键字生成的代码添加在网站的什么地方?东莞常平嘉华学校
  • 网站空间托管合同 .doc东莞市南华职业技术学校
  • 有什么网站是做办公家具做网站销售需要注意的
  • 无法连接到wordpress站点六安市民网
  • 都匀住房和城乡建设厅网站视频号直播怎么引流
  • 网站建设编辑教程室内设计网页
  • 河南餐饮网站建设盐田网站设计
  • 要建设网站成都装修设计公司排名
  • 做网站多少钱_西宁君博领衔竞价推广是什么意思
  • 夹江移动网站建设app软件下载站seo教程
  • python网站开发集成环境网站关键字设置
  • 贵州黔水建设股份有限公司网站邢台网上办事大厅
  • 专业外贸网站建设全网最稳最低价自助下单网站
  • 公司注册网站模板南昌地宝网租房个人房源
  • 湘潭网站设计祁阳seo
  • 建站最好的四川省建筑人才网
  • 网站开发属于软件开发公司网站 正式上线
  • 有没有做宠物的网站东莞建网站服务
  • 阿里云做网站可以免备案吗网站开发能作为无形资产吗
  • php做网站的支付功能免费网站统计
  • 做英文简历的网站关键词难易度分析
  • 各网站的网络联盟郑州百度网站优化