zoukankan      html  css  js  c++  java
  • 2019/1/10 redis学习笔记(二)

    本文不涉及集群搭建操作

    关于在lua脚本中操作redis的应用场景

    大家都知道redis对于单个集合的操作是原子性的;但是有可能有一种场景是这样.比如说抢红包,现在有十个人抢五份红包,抽象到我们java代码里就是十个线程争抢五份资源,

    而这个逻辑如果使用redis操作的话,是需要进行多步骤的数据增改操作,但是因为是多步骤,所以在第一个步骤或第二个步骤进行操作的时候redis都没任何问题,但是第三步可能就失败了.但因为不是原子性的,第一个步骤和第二个就不会回滚,数据就会不一致,但其它线程也不知道,依然会继续往下走,并且因为如果是分布式的话,那么因为无法加锁的原因(使用分布式锁情况例外,但性能并不好),就可能会发生不可预估的情况;那么这个时候我们的lua脚本就派上用场了,我们只需要将对redis进行操作的代码写进脚本里,并交给java去执行,那么 它的这几个步骤就都是原子性的,失败就一起失败,不用担心不会回滚的问题,而且你就算是线程再多,也只能一个一个的来执行脚本,并且因为是jvm内部执行脚本(也就是由cpu直接操作),性能也很高;

    redis主从模式:

      redis的主从模式就是一个主负责写或读,而一个或几个从则只负责读,由主定时的将记录添加或更改数据的日志文件同步到从数据库中,并且在同步的过程中,不会堵塞客户端的请求,通过这个模式可以很好的实现读写分离.但缺点就是不能实现高可用,一旦主数据库故障就会全面挂掉;

    redis哨兵模式:

      一个主加一个或多个从,这个就是在主从模式上实现了多可用,由一个或多个Sentinel 实例来监视主数据库,一旦挂机,就终止复制,并且提升一个从为新的主;

    redis cluster模式:

      多个主加多个从组成的redis集群,也是现在最常用的模式,也就是一个主一般带一个从,并且主从之间实现了哨兵模式,一旦主挂掉,从立马补上,并且几个主也就是Master之间实现了互相通信;

  • 相关阅读:
    CF1394A Boboniu Chats with Du 题解
    P3377 【模板】左偏树(可并堆)题解
    P2152 [SDOI2009]SuperGCD 题解
    在其他模块中调用代码
    教程:创建Go模块
    Go入门
    反悔贪心
    codeforces 1569 E. Playoff Restoration (meet-in-the-middle)
    codeforces 1036 F. Relatively Prime Powers (容斥+精度处理+大数边界处理)
    icpc沈阳2020 H. The Boomsday Project (dp+二分)
  • 原文地址:https://www.cnblogs.com/yangfeiORfeiyang/p/8267835.html
Copyright © 2011-2022 走看看