2881099 / csredis

.NET Core or .NET Framework 4.0+ client for Redis and Redis Sentinel (2.8) and Cluster. Includes both synchronous and asynchronous clients.
MIT License
2.02k stars 414 forks source link

HashSetNx 方法第三个参数value改进建议 #39

Open shenlanchenwei opened 6 years ago

shenlanchenwei commented 6 years ago

HashSetNx 方法第三个参数value建议改进成string类型,容易造成误解,结果序列化结果不对,或者增加泛型支持

2881099 commented 6 years ago

object 支持 string 和 byte[]

2881099 commented 6 years ago

存 byte[] 的话不需要序列化

2881099 commented 6 years ago
//
    // 摘要:
    //     只有在字段 field 不存在时,设置哈希表字段的值。
    //
    // 参数:
    //   key:
    //     不含prefix前辍
    //
    //   field:
    //     字段
    //
    //   value:
    //     值(string 或 byte[])
    public static bool HashSetNx(string key, string field, object value);

注释有标明的。

shenlanchenwei commented 6 years ago

你好再请教一个问题,我现在Redis只有主从模式,没有集群模式 有这个(主从)的配置示例吗? 没有看到相关示例,非常感谢!!

2881099 commented 6 years ago

主从模式要使用 CSRedis.RedisSentinelClient,目前没有封装到 CSRedisClient 和 RedisHelper 中。

2881099 commented 6 years ago
using (var sentinel = new RedisSentinelManager("host1:123", "host2:456"))
{
    sentinel.Add(Host); // add host using default port 
    sentinel.Add(Host, 36379); // add host using specific port
    sentinel.Connected += (s, e) => sentinel.Call(x => x.Auth(Password)); // this will be called each time a master connects
    sentinel.Connect("mymaster"); // open connection
    var test2 = sentinel.Call(x => x.Time()); // use the Call() lambda to access the current master connection
}
shenlanchenwei commented 6 years ago

谢谢了!!!

2881099 commented 6 years ago

CSRedisClient 和 RedisHelper 提供的集群模式功能,也可以现实高可用。

static redis1 = new CSRedisClient("192.168.1.9:6379,password=,defaultDatabase=1,poolsize=1");
static redis2 = new CSRedisClient("192.168.1.9:6379,password=,defaultDatabase=2,poolsize=1");

var client = new CSRedisClient(
    key => {
        //在这里判断服务有效性
        try { redis1.Ping(); return "192.168.1.9:6379/1"; } catch { }
        try { redis2.Ping(); return "192.168.1.9:6379/2"; } catch { }
        return "192.168.1.9:6379/1";
    },
    "192.168.1.9:6379,password=,defaultDatabase=1",
    "192.168.1.9:6379,password=,defaultDatabase=2");

这个做法有点生硬,之后会优化。