当前位置 博文首页 > 以往清泉:.Net Core 使用 CSRedisCore 访问 Redis 的哨兵和主从

    以往清泉:.Net Core 使用 CSRedisCore 访问 Redis 的哨兵和主从

    作者:以往清泉 时间:2021-02-04 00:22

    一、创建Redis服务

    运行环境是Window,安装Redis请看:安装教程。

    直接开始创建Redis服务,演示就创建两个一主一从,先把安装路径下的 redis.windows.conf 文件复制一份重命名并更改端口号为6380,

    并且把文件中的bind字段注释,protected-mode设置为no,

    打开CMD跳转到安装目录,创建服务语句如下

    D:\Redis>redis-server.exe --service-install redis.windows.conf --service-name Redis6379 --loglevel verbose
    D:\Redis>redis-server.exe --service-install redis.windows.6380.conf --service-name Redis6380 --loglevel verbose

     然后打开服务,如果没有运行就点击启动运行。

    二、设置Redis主从复制

    将6379端口的Redis作为主,6380端口的作为从,通过slaveof命令设置从Redis即可如下:

    C:\Users\Xu>redis-cli -p 6380
    127.0.0.1:6380> slaveof 127.0.0.1 6379
    OK

     我这是本地的服务所以访问没问题,如果是不同服务器的服务,请关注防火墙、ip等信息,确保服务器直接能互相访问。

    三、设置哨兵

     在Redis安装路径中新建哨兵配置文件sentinel.conf如下:

    port 26379
    protected-mode no
    logfile "D:/Redis/senitnel.log"
    sentinel monitor mymaster 127.0.0.1 6379 1

    文件中设置了哨兵的端口、是否保护、日志文件保存地址和监听的主Redis数据库。一般是需要多个哨兵的,演示的话就创建一个,想多创建几个就多建几个配置文件,然后将哨兵设为服务,管理员打开CMD语句如下:

    sc create RedisSentinel binpath= "\"D:\Redis\redis-server.exe\" --service-run sentinel.conf --service--name RedisSentienl --sentinel --loglevel verbose" start= auto

    可以看到服务中已经有了,没有启动就启动下,哨兵这里如果是多台服务器就需要注意防火墙、ip等信息,否则无法连通。启动后配置文件会被写入其他的哨兵和从数据库等信息,如下

    port 26379
    protected-mode no
    logfile "D:/Redis/senitnel.log"
    sentinel myid bc139114daeb8c50b65466ae58f89822503b58da
    # Generated by CONFIG REWRITE
    loglevel verbose
    dir "D:\\Redis"
    sentinel monitor mymaster 127.0.0.1 6379 1
    sentinel config-epoch mymaster 6
    sentinel leader-epoch mymaster 6
    sentinel known-slave mymaster 127.0.0.1 6380
    sentinel current-epoch 6

    我们通过redis-cli命令可以进入哨兵和redis数据库查看信息,来判断是否配置正确,我们进入哨兵查看信息如下:

    C:\Users\Xu>redis-cli -h 127.0.0.1 -p 26379
    127.0.0.1:26379> info sentinel
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=1,sentinels=1

    可以看到最后一条显示主数据是6379端口的,从数据一个哨兵一个,说明配置成功了(如果有问题可以通过哨兵日志等方式查看问题)。

    四、在.Net Core中实现代码

     在nuget中引用CSRedisCore,有两个类可以访问哨兵并访问redis数据库,分别是CSRedisClient和RedisSentinelManager。

    1.RedisSentinelManager

    public static void Set(int dbid)
    {
        using (var sentinel = new RedisSentinelManager(false, new string[] { "127.0.0.1:26379" }))   //设置哨兵
        {
            sentinel.Connect("mymaster"); // 打开主数据库连接,参数是主数据库别称,在设置哨兵的时候有设置
            var test2 = sentinel.Call(t => t.Select(dbid)); // 使用Call方法可以运行当前主数据的操作,select方法是选择数据库0-14号进行操作
            sentinel.Call(t => t.Set("haha", DateTime.Now.ToString()));//执行方法
        }
    }    

    2.CSRedisClient

    public class RedisCache
    {
        CSRedisClient[] redis = new CSRedisClient[14]; //Singleton
        public RedisCache()
        {
        for (var a = 0; a < redis.Length; a++)
         redis[a] = new CSRedisClient("mymaster,defaultDatabase=" + a, new string[] { "127.0.0.1:26379" });
        }
        public void Set(int dbid)
        {
            redis[1].Set("haha","123123");
        }
    }    

    可以手动关闭redis服务来测试,会自动切换访问的数据。

    bk
    下一篇:没有了