• Redis 在 分布式项目中 的小应用--分布式锁 模拟session 分布式自增id


            在分布式 项目 各个模块彼此相对独立,

    比较夸张一点的情况,  =>例如说: 大部分模块是 java 语言写 ,有的模块比较适合用Python,就有用Python语言写的模块,不同模块 彼此通过 json 字符串 交流沟通;

      这个时候就产生了 对公共资源的一些问题;

    /*************************************************************************************************************************************/

    分布式 锁 

    Redis 解决方案:

    把各个模块拟人化,大家需要访问共同的数据资源;这个资源需要保证同步;

    大家共同约定 在 这个资源上 约定 一个锁 (redis 中的 一个 key);

    比如说

    张三进入这个资源的时候,就随手关门,把这个新增key锁(这个时候张三正在里面使用数据),

    其他人,过来需要访问这个资源了,看这个有key锁, 就知道,现在不能进,则等待,过段时间再来尝试;

    等张三完事以后释放资源,就是删除这个 key ,代表张三完事了,现在没人访问资源了;

    这时其他模块看到 key 不存在了,就可以访问资源了;

    如此用redis 作为 分布式的锁;

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    在如上逻辑的基础之上,升级版

    为这个key锁 设置超时时间;

    可能出现糟糕的情况是,张三在门外挂着锁,然后张三因为意外在里面挂了,张三模块在释放锁之前宕机了,则 锁key将一直挂着们上,其他模块访问不到;

    升级版是 大家 包括 张三 在进去 访问资源 挂起 key锁 的时候,为锁设置过期时间,每个人进去需要干多长时间,设置多久这个因人而异,但是都要设置这样

    一个key的过期时间,保证锁最终会被释放;

    这时有人肯定会说, 如果张三自己设置的时间,自己在里面超时也没做完自己的工作 锁自动过期了 怎么办;

    为了严谨,张三在里面做事的时候 可以一直读秒,并且所有操作由redis 的事务保证 数据的一致性;

    ###########################################################################################

    用Redis模拟Session

    session 是 服务器 会话技术,是在服务器中 保存 会话 中的 临时数据 并给 客户端发一个小 cookie 是 键为JSESSIONID 以便区分 谁 是 谁;

    分布式项目中,各个服务器 如何共享 session 数据,

    可以通过 Redis 做 存储供大家来调用 session 数据;

    ###########################################################################################

    MySQL 集群

    表 中的 主键 往往 设置 int 类型 或者 bigint 类型 做主键自增 => 保证主键唯一性;

    MySQL 集群中 新增 数据 它MySQL自己 保证 主键自增 是很难沟通协调的;

    对应这种 新增数据 保证 主键唯一性 的情况;

    可以利用Redis 单线程 的 特点,每次新增数据 主键 是多少 从 Redis 数据库 里面取, 取一个,Redis里面的值 自增1,

    则保证 主键 的唯一性;

    对于这种情景,Twitter 公司 开源了 一种 称为 雪花算法  SnowFlake 的算法技术,

    寓意 雪花 从天空中落下,每一片雪花是相似的,但是没有一片雪花是相同的,

    雪花算法就是这样可以 生成 存数字, 有序 不连续 的 数据,来作为 主键使用;

  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/cjd01/p/14065634.html
Copyright © 2020-2023  润新知