zoukankan      html  css  js  c++  java
  • 在window上搭建redis cluster并在.net core下使用csrediscore访问

    在redis 5.0之前,redis cluster的搭建需要借助Ruby环境,使用redis-trib指令进行集群的管理,redis5.0以后,redis已经内置了集群管理,使用redis-cli客户端指令就可以进行集群的搭建和管理了。

    因为是在window下使用,最高版本是3.2.1版本的,所以需要先安装Ruby。

     一、安装Ruby与Redis驱动

    ruby下载地址:https://rubyinstaller.org/downloads/

     下载后直接安装,然后下载redis驱动。驱动下载地址: https://rubygems.org/gems/redis/versions/3.3.2,选择对应的版本点击下载

     将下载下来的gem文件复制到ruby的安装路径下,默认的安装路径在C:Ruby30-x64,在安装路径下运行cmd安装驱动gem,如下所示为成功

    C:UsersXu>cd c:Ruby30-x64
    c:Ruby30-x64>gem install --local C:/Ruby30-x64/redis-4.4.0.gem
    Successfully installed redis-4.4.0
    Parsing documentation for redis-4.4.0
    Installing ri documentation for redis-4.4.0
    Done installing documentation for redis after 5 seconds
    1 gem installed

     二、配置并安装节点服务启动集群

     复制六个redis运行文件夹,分别修改其中的redis.windows.conf文件内容如下:

    1、修改端口 port 6380,端口自定义

    2、将appendonly设置为yes

    3、开启集群模式cluster-enabled yes

    4、保存节点配置cluster-config-file nodes-6380.conf,自动创建自动更新,加上对应端口

    5、设置集群节点超时时间cluster-node-timeout 15000

    之后构建集群脚本redis-trib.rb,点击此处下载。最后目录结构如下:

    分别启动六个redis,大家可以创建成window服务,我这里直接cmd在redis文件夹下启动:

    redis-server redis.windows.conf

    之后运行cmd在redis-trib.rb所在目录运行如下命令启动集群:

    redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6390 127.0.0.1:6391 127.0.0.1:6392

     如下的信息表示运行成功,redis cluster 默认分配了 16384 个slot,并且将slot(槽)分配给了各个redis。分别是:

    1、127.0.0.1:6380分配0-5460

    2、127.0.0.1:6381分配5461-10922

    3、127.0.0.1:6382分配10923-16383

    >>> Creating cluster
    Connecting to node 127.0.0.1:6380: OK
    Connecting to node 127.0.0.1:6381: OK
    Connecting to node 127.0.0.1:6382: OK
    Connecting to node 127.0.0.1:6390: OK
    Connecting to node 127.0.0.1:6391: OK
    Connecting to node 127.0.0.1:6392: OK
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    127.0.0.1:6380
    127.0.0.1:6381
    127.0.0.1:6382
    Adding replica 127.0.0.1:6390 to 127.0.0.1:6380
    Adding replica 127.0.0.1:6391 to 127.0.0.1:6381
    Adding replica 127.0.0.1:6392 to 127.0.0.1:6382
    M: a3a99540b358a6dbd1e421d1feb3c0d9c8de0207 127.0.0.1:6380
       slots:0-5460 (5461 slots) master
    M: 0c1dfe04b14143c7b790efa0f1b2bee72af8c7cc 127.0.0.1:6381
       slots:5461-10922 (5462 slots) master
    M: 4dc03ba5e34003fe648d213f5c0cc37802fc31d4 127.0.0.1:6382
       slots:10923-16383 (5461 slots) master
    S: 873ec67ae3dbc2ea8f67d8062bad46c76d6b4462 127.0.0.1:6390
       replicates a3a99540b358a6dbd1e421d1feb3c0d9c8de0207
    S: 1182560131583d2ff590e99e5fe2afb8d2a3e134 127.0.0.1:6391
       replicates 0c1dfe04b14143c7b790efa0f1b2bee72af8c7cc
    S: 0228dec64f82712f43d09458ffc7f69601d70e23 127.0.0.1:6392
       replicates 4dc03ba5e34003fe648d213f5c0cc37802fc31d4
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join.....
    >>> Performing Cluster Check (using node 127.0.0.1:6380)
    M: a3a99540b358a6dbd1e421d1feb3c0d9c8de0207 127.0.0.1:6380
       slots:0-5460 (5461 slots) master
    M: 0c1dfe04b14143c7b790efa0f1b2bee72af8c7cc 127.0.0.1:6381
       slots:5461-10922 (5462 slots) master
    M: 4dc03ba5e34003fe648d213f5c0cc37802fc31d4 127.0.0.1:6382
       slots:10923-16383 (5461 slots) master
    M: 873ec67ae3dbc2ea8f67d8062bad46c76d6b4462 127.0.0.1:6390
       slots: (0 slots) master
       replicates a3a99540b358a6dbd1e421d1feb3c0d9c8de0207
    M: 1182560131583d2ff590e99e5fe2afb8d2a3e134 127.0.0.1:6391
       slots: (0 slots) master
       replicates 0c1dfe04b14143c7b790efa0f1b2bee72af8c7cc
    M: 0228dec64f82712f43d09458ffc7f69601d70e23 127.0.0.1:6392
       slots: (0 slots) master
       replicates 4dc03ba5e34003fe648d213f5c0cc37802fc31d4
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

     我们可以进入redis执行set和get看到如下情况

    C:Usersxu>redis-cli.exe  -c -p 6381
    127.0.0.1:6381> set myname xu
    -> Redirected to slot [12807] located at 127.0.0.1:6382
    OK
    127.0.0.1:6382> get myname xu
    (error) ERR wrong number of arguments for 'get' command
    127.0.0.1:6382> get myname
    "xu"

    可以看到集群会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上CRC16(key) % 16384,通过slot来对需要操作的key进行定位。

    所以,可以看到我们set的key计算之后被分配到了slot-12807 上, 而slot-12807处在节点6382上,因此redis自动redirect到了6382节点上。

    在使用集群的时候有如下限制:

    1、key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key执行批量操作。对弈映射为不同slot值的key由于执行mget。mset等操作可能存在多个节点上,因此不被支持。

    2、key事务操作支持有限。同理只支持多key在统一节点上的事务操作,当多个key分布在不同的节点上时无法使用事务功能。

    3、key作为数据分区的最小粒度读,因此不能将一个大的键值对象如hash、list等映射到不同的节点。

    4、不支持多数据空间。单机下的Redis可以支持16个数据库,集群模式下只能使用一个数据库空间,即db0.

    5、复制结构值支持一层,从节点只能复制主节点,不支持嵌套梳妆复制结构

    三、.net core使用redis cluster

    使用在nuget上安装CSRedisCore,之后写任意一个地址即可,其它节点在运行过程中自动增加,如有密码确保每个节点密码一致。

    public IActionResult Index()
    {
        CSRedisClient client = new CSRedisClient("127.0.0.1:6380");
        return Content(client.Get("db_number"));
    }
  • 相关阅读:
    在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别
    RESTful 的总结
    Mvc项目部署IIS报错:没有为请求的URL配置默认文档,并且没有在服务器设置目录浏览
    Ajax的请求方式几传参的区别
    响应式布局中的CSS相对量
    理解 ES6 语法中 yield* 关键字的作用
    理解 ES6 语法中 yield 关键字的返回值
    配置IIS Express以便通过IP地址访问调试的网站
    在IntelliJ IDEA 13中配置OpenCV的Java开发环境
    iOS UITableView获取cell的indexPath及cell内部按钮点击事件处理
  • 原文地址:https://www.cnblogs.com/xwc1996/p/15087056.html
Copyright © 2011-2022 走看看