zoukankan      html  css  js  c++  java
  • StackExchange.Redis 使用 (一)


    在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类, 它存在于StackExchange.Redis命名空间中。
    这个类隐藏了Redis服务的操作细节,ConnectionMultiplexer类做了很多东西, 在所有调用之间它被设计为共享和重用的。
    不应该为每一个操作都创建一个ConnectionMultiplexer 。 ConnectionMultiplexer是线程安全的 , 推荐使用下面的方法。
    在所有后续示例中 , 都假定你已经实例化好了一个ConnectionMultiplexer类,它将会一直被重用 ,
    现在我们来创建一个ConnectionMultiplexer实例。它是通过ConnectionMultiplexer.Connect 或者 ConnectionMultiplexer.ConnectAsync,
    传递一个连接字符串或者一个ConfigurationOptions 对象来创建的。
    连接字符串可以是以逗号分割的多个服务的节点, 我们仅仅需要连接一个在本地计算机中的redis服务,redis服务的默认端口是6379.

    using StackExchange.Redis;
    ...
    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
    // ^^^ store and re-use this!!!

    注意 : ConnectionMultiplexer 实现了IDisposable接口当我们不再需要是可以将其释放的 , 这里我故意不使用 using 来释放他。 简单来讲创建一个ConnectionMultiplexer是十分昂贵的 , 一个好的主意是我们一直重用一个ConnectionMultiplexer对象。
    一个复杂的的场景中可能包含有主从复制 , 对于这种情况,只需要指定所有地址在连接字符串中(它将会自动识别出主服务器)
    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("server1:6379,server2:6379");

    假设这里找到了两台主服务器,将会对两台服务进行裁决选出一台作为主服务器来解决这个问题 , 这种情况是非常罕见的 ,我们也应该避免这种情况的发生。


    现在你已经拥有了一个 ConnectionMultiplexer , 下面三件事情可能是你想要做的。

    1. 访问数据库。(注意在使用集群的情况下,一个数据库可能会分部在多个节点中)
    2. 使用redis的发布订阅功能
    3. 维护和监控一台服务器

    访问数据库
    访问数据库的操作非常简单:

    IDatabase db = redis.GetDatabase();

    GetDatabase 返回一个IDatabase接口。 注意 redis允许配置多个数据库,可以在调用GetDatabase() 时候指定数据库.另外,如果你计划使用异步的api , Task.AsyncState 必须拥有一个值 ,也可以这样指定。

    int databaseNumber = ...
    object asyncState = ...
    IDatabase db = redis.GetDatabase(databaseNumber, asyncState);

    现在你已经拥有了一个 IDatabase 对象 , 他可以对redis数据库进行操作。所有的方法都有同步和异步两个版本 , 按照微软的命名约定 ,所有的异步方法都以Async结尾。

    最简单的操作 存储和获取一个值 。

    string value = "abcdefg";
    db.StringSet("mykey", value);
    ...
    string value = db.StringGet("mykey");
    Console.WriteLine(value); // writes: "abcdefg"

    String前缀这里代表的是Redis中的String类型 , 和.net中的String类型有很大的区别 , 尽管两者都可以保存字符串类型。然后 ,Redis允许键值为二进制数据 , 示例如下:

    byte[] key = ..., value = ...;
    db.StringSet(key, value);
    ...
    byte[] value = db.StringGet(key);

    StackExchange.Redis 支持所有的 redis shell命令, 具体可以参考redis官网。


  • 相关阅读:
    HTTP协议中GET、POST和HEAD的介绍
    Django model 字段类型清单
    MySQL的菜鸟级操作
    windows7下将Cygwin加入右键菜单,并从当前目录打开
    数组指针和指针数组的区别
    const引用与非const引用
    printf("33[1;33m ***** 33[0m ");
    C语言可变参数函数详解示例
    机顶盒demux的工作原理
    机顶盒的工作原理
  • 原文地址:https://www.cnblogs.com/deosky/p/4846111.html
Copyright © 2011-2022 走看看