首页 文章资讯内容详情

serviceStack.Redis 在PooledRedisClientManager 中设置密码

2026-06-01 4 花语

本文内容纲要:

ServiceStack.Redis是一个C#访问Redis的客户端,可以说可以通过它实现所有需要Redis-Cli的功能。但是今天我在主Redis实例设置了访问密码,而在slave上没有设置,我通过一个缓存工厂来获取连接。在redisClient实例化可以直接设置密码。

1///<summary> 2///缓存客户端管理器工厂 3///</summary> 4publicclassPoolManagerFactory 5{ 6privatestaticPooledRedisClientManagerManager=null; 7publicstaticPooledRedisClientManagerCreateManager(string[]readWriteHosts,string[]readOnlyHosts,intinitialDB=0) 8{ 9if(Manager==null) 10{ 11Manager=newPooledRedisClientManager(readWriteHosts,readOnlyHosts,newRedisClientManagerConfig() 12{ 13MaxWritePoolSize=5, 14MaxReadPoolSize=5, 15AutoStart=true 16},initialDB,50,5); 17} 18returnManager; 19} 20 21}

我一直认为readWriteHosts数组中只能输入ip:port来代表一个redis实例的连接,但是如何把密码加在里面呢?想不到如何实现,只能下载了源代码查看,原来这个实现是通过分隔字符串来实现,

1///<summary> 2///IP地址中可以加入auth验证password@ip:port 3///</summary> 4///<paramname="hosts"></param> 5///<returns></returns> 6publicstaticList<RedisEndpoint>ToRedisEndPoints(thisIEnumerable<string>hosts) 7{ 8if(hosts==null)returnnewList<RedisEndpoint>(); 9//redis终结点的列表 10varredisEndpoints=newList<RedisEndpoint>(); 11foreach(varhostinhosts) 12{ 13RedisEndpointendpoint; 14string[]hostParts; 15if(host.Contains("@")) 16{ 17hostParts=host.SplitOnLast(@); 18varpassword=hostParts[0]; 19hostParts=hostParts[1].Split(:); 20endpoint=GetRedisEndPoint(hostParts); 21endpoint.Password=password; 22} 23else 24{ 25hostParts=host.Split(:); 26endpoint=GetRedisEndPoint(hostParts); 27} 28redisEndpoints.Add(endpoint); 29} 30returnredisEndpoints; 31}

在ip:port前面加上@用来表示密码,比如password@ip:port,现在才知道能看到源码的程序是多么的幸福的一件事。开源伟大。

master:设置密码:configsetrequirepasspassword

slave指定master密码:configsetmasterauthpassword就可以实现在master设置密码,并且不需要重启redis实例非常方便,但是这种方式重启后失效。

本文内容总结:

原文链接:https://www.cnblogs.com/jiagoushi/p/4024530.html