serviceStack.Redis 在PooledRedisClientManager 中设置密码
本文内容纲要:
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