.Net Core redis 调用报错 '6000 Redis requests per hour' 解决 6000 此调用限制
.Net Core redis 调用报错 '6000 Redis requests per hour' 解决 6000 此调用限制
问题描述
redis 是一种基于内存,性能高效的 NoSQL 数据库,性能高主要就体现在数据交互耗时较短,能够段时快速的对用户的请求做出反应,所以在业务比较复杂或交互量需求大时,必然会超过 6000次/h,同时你引用的动态库 ServiceStack.redis.dll 版本在 v4 及以上时,就会出现如下报错:
The free-quota limit on ‘6000 Redis requests per hour‘ has been reached. Please see https://servicestack.net to upgrade to a commercial license.
若想突破次数限制,则需要降低 ServiceStack.redis.dll 版本。因为 ServiceStack.Redis.dll 这个官方 Redis 访问组件从 4.0 版本后开始商业化了。v3 的最后一个版本是 v3.9.71。
仅升级动态库 ServiceStsck.redis.dll 报错解决('get_Db')
报错详情:'Method 'get_Db' in type 'ServiceStack.Redis.RedisNativeClient' from assembly 'ServiceStack.Redis, Version=3.9.71.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.'
问题原因:
主要是因为在高版本中,ServiceStsck.redis.dll 已将对 ServiceStack.Common.dll 和 ServiceStack.Text.dll 的依赖去除,而在老版本中仍然有依赖。
解决方法:
因此在版本将至 v3.9.71 后,需要额外引用动态库:ServiceStack.Common.dll、ServiceStack.Text.dll,版本同样选择 v3.9.71。
新旧版本的写法区别
主要就是实例化 RedisClient 时的区别。
1 //新版写法 v4及以后 2 var redisEndpoint = new RedisEndpoint { Host = "", Password = "", Port = Convert.ToInt32("3679"), Db = 0 }; 3 using (RedisClient redisClient = new RedisClient(redisEndpoint)) 4 { 5 var strlist = redisClient.GetHashValues("hashId");//新老版本语法相同 6 var strlist2 = redisClient.GetValuesFromHash("hashId",new string[] { "key1","key2" });//新老版本语法相同 7 }
1 //旧版写法 v4之前 2 using (RedisClient redisClient = new RedisClient("redishost", Convert.ToInt32("redisport"), "redispass", 0)) 3 { 4 var strlist = redisClient.GetHashValues("hashId");//新老版本语法相同 5 var strlist2 = redisClient.GetValuesFromHash("hashId",new string[] { "key1","key2" });//新老版本语法相同 6 }