阿里云KVStore兼容Redis。由于KVStore就至关于Redis的服务器端,咱们代码只是看成客户端,连接上服务器端就好了,阿里云的KVStore详情文档见,https://docs.aliyun.com/#/pub/kvstore/key-value-store/kvstore-introduction。git
1.阿里云文档上介绍的是用ServiceStack去连接KVStore。那咱们项目中就用nuget去下载ServiceStack包。nuget搜索ServiceStack,搜索到的结果以下图,安装图中标识的就能够了。这个应该是最新的V4版本,当提醒你须要用商业版的时候,能够去还原以前的V3版本,具体还原方法见,https://github.com/ServiceStackV3/ServiceStackV3。github
nuget搜索结果以下:redis
2.安装好之后,写连接和调用kvstore的代码。其中_setting.AccessId, _setting.AccessKey, _setting.HostAddress,分别是KVStore的实例ID,连接密码和连接地址。数据库
1 using ServiceStack.Redis; 2 //using ServiceStack.Text; 3 using ServiceStack.Common; 4 using System; 5 using System.Collections.Generic; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Web.Script.Serialization; 10 using Zupo.Core.Caching; 11 using System.Text.RegularExpressions; 12 13 14 namespace KVStore 15 { 16 public class KVStoreService 17 { 18 19 IKVStoreSetting _setting; 20 private IRedisClient redisClient; 21 private bool linkServer = true; 22 23 public KVStoreService(IKVStoreSetting setting) 24 { 25 try 26 { 27 this._setting = setting; 28 //链接池模式 29 //string[] testReadWriteHosts = new[] { 30 //string.Format("redis://:{0}:{1}@{2}:6379",_setting.AccessId,_setting.AccessKey,_setting.HostAddress)/*redis://:实例id:密码@访问地址:端口*/ 31 //}; 32 //RedisClientManagerConfig RedisConfig = new RedisClientManagerConfig(); 33 //RedisConfig.AutoStart = true; 34 //RedisConfig.MaxReadPoolSize = 60; 35 //RedisConfig.MaxWritePoolSize = 60; 36 ////RedisConfig.VerifyMasterConnections = false;//须要设置 37 ////PooledRedisClientManager redisPoolManager = new PooledRedisClientManager(10/*链接池个数*/, 10/*链接池超时时间*/, testReadWriteHosts); 38 //PooledRedisClientManager redisPoolManager = new PooledRedisClientManager(10/*链接池个数*/, 10/*链接池超时时间*/, testReadWriteHosts); 39 //redisClient = redisPoolManager.GetClient();//获取链接 40 ////RedisNativeClient redisNativeClient = (RedisNativeClient)redisClient; 41 ////redisNativeClient.Client = null;//KVStore不支持client setname因此这里须要显示的把client对象置为null 42 //var dbSize = redisClient.DbSize; 43 44 //单连接模式 45 //string host = _setting.HostAddress;/*访问host地址*/ 46 //string password = string.Format("{0}:{1}", _setting.AccessId, _setting.AccessKey);/*实例id:密码*/ 47 //redisClient = new RedisClient(host, 6379, password); 48 //var dbSize = redisClient.DbSize; 49 50 RedisClientManagerConfig RedisConfig = new RedisClientManagerConfig(); 51 RedisConfig.AutoStart = true; 52 RedisConfig.MaxReadPoolSize = 60; 53 RedisConfig.MaxWritePoolSize = 60; 54 RedisConfig.DefaultDb = 1; //默认第一个db 55 56 PooledRedisClientManager prcm = new PooledRedisClientManager(new List<string>() { string.Format("{0}:{1}@{2}:6379", _setting.AccessId, _setting.AccessKey, _setting.HostAddress) }, 57 new List<string>() { string.Format("{0}:{1}@{2}:6379", _setting.AccessId, _setting.AccessKey, _setting.HostAddress) }, RedisConfig); 58 redisClient = prcm.GetClient(); 59 } 60 catch (Exception) 61 { 62 linkServer = false; 63 } 64 } 65 66 /// <summary> 67 /// 是否处于连接状态 68 /// </summary> 69 protected bool LinkServer 70 { 71 get 72 { 73 return linkServer; 74 } 75 } 76 77 /// <summary> 78 /// 根据传入的key-value添加一条记录,当key已存在返回false 79 /// </summary> 80 /// <typeparam name="T"></typeparam> 81 /// <param name="key"></param> 82 /// <param name="value"></param> 83 /// <returns></returns> 84 protected bool Add<T>(string key, T value) 85 { 86 return redisClient.Add<T>(key, value);