Foundatio.Redis 10.7.1
标识已保留
dotnet add package Foundatio.Redis --version 10.7.1
NuGet\Install-Package Foundatio.Redis -Version 10.7.1
<PackageReference Include="Foundatio.Redis" Version="10.7.1" />
paket add Foundatio.Redis --version 10.7.1
#r "nuget: Foundatio.Redis, 10.7.1"
// Install Foundatio.Redis as a Cake Addin #addin nuget:?package=Foundatio.Redis&version=10.7.1 // Install Foundatio.Redis as a Cake Tool #tool nuget:?package=Foundatio.Redis&version=10.7.1
构建松散耦合分布式应用的模块化基础块。
包括Redis、Azure、AWS、RabbitMQ、Kafka和内存(开发)中的实现。
为什么选择Foundatio?
在构建几个大型云应用时,我们发现缺乏出色的解决方案(不是说不存在解决方案)来解决构建可伸缩分布式应用所需的关键部分,同时保持开发体验简单。以下是我们构建并使用Foundatio的几个原因示例
- 想要针对抽象接口进行构建,以便我们可以轻松地更改实现。
- 想要块对依赖注入友好。
- 缓存:我们最初使用开源Redis缓存客户端,但后来它变成了一个带有高许可成本的商业产品。不仅如此,还没有内存实现,因此每个开发人员都必须设置和配置Redis。
- 消息总线:我们最初考察了NServiceBus(优秀的产品),但由于其高昂的许可费用(他们也需要生存),并且不太友好开源软件(OSS),我们决定放弃。我们也考察了MassTransit(另一个优秀的产品),但当时发现Azure支持不全面,并且本地设置很麻烦(对于内存存储)。我们想要一个简单易用的消息总线,能适用于本地或云端。
- 存储:我们找不到任何现有项目是解耦合且支持内存存储、文件存储或Azure Blob存储的。
总结一下,如果您希望开发测试无忧,同时允许您的应用程序扩展,那么请使用Foundatio!
实现
- Redis - 缓存、存储、队列、消息传递、锁、度量
- Azure 存储服务 - 存储、队列
- Azure 服务总线 - 队列、消息传递
- AWS - 存储、队列、度量
- Kafka - 消息传递
- RabbitMQ - 消息传递
- Minio - 存储
- 阿里云存储服务 - 存储
- SshNet 存储服务 - 存储
入门(开发)
通过NuGet包管理器安装Foundatio。如果您需要帮助,请提交问题或者加入我们的Discord聊天室。如果您有任何问题,我们都随时为您提供帮助!
本节仅用于开发目的!如果您正在尝试使用Foundatio库,请从NuGet获取。
- 您需要安装Visual Studio Code。
- 打开
Foundatio.sln
Visual Studio解决方案文件。
使用Foundatio
以下各节仅包含 Foundatio 可用功能的很小部分。我们建议您查看源代码以获取更多信息。如果您有任何问题或需要帮助,请告知我们!
缓存
缓存可以快速存储和访问数据,从而节省创建或获取数据的昂贵操作。我们提供四种不同的基于 ICacheClient
接口 的缓存实现。
- InMemoryCacheClient:内存缓存客户端实现。此缓存实现仅在进程生命周期内有效。请注意,内存缓存客户端具有通过
MaxItems
属性缓存最近 X 项的能力。我们在 Exceptionless 中使用它以仅保存最后 250 个解析的 geoip 结果。 - HybridCacheClient:此缓存实现使用
ICacheClient
和InMemoryCacheClient
并使用IMessageBus
来同步进程间的缓存。这可以带来 巨大的性能提升,因为当项存在于本地缓存中时,你将节省序列化操作和对远程缓存的调用。 - RedisCacheClient:Redis缓存客户端实现。
- RedisHybridCacheClient:
HybridCacheClient
的一个实现,使用RedisCacheClient
作为ICacheClient
,而使用RedisMessageBus
作为IMessageBus
。 - ScopedCacheClient:这种缓存实现接受一个
ICacheClient
的实例和一个字符串scope
。范围被添加到每个缓存键之前。这使得所有缓存键的划分变得非常简单,并且可以轻松删除。
示例
using Foundatio.Caching;
ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");
队列
队列提供先入先出(FIFO)的消息传递。我们提供了四个不同的队列实现,它们都是基于IQueue
接口的。
- InMemoryQueue:内存队列实现。此队列实现仅在进程的生命周期内有效。
- RedisQueue:Redis队列实现。
- AzureServiceBusQueue:Azure Service Bus 队列实现。
- AzureStorageQueue:Azure 存储队列实现。
- SQSQueue:AWS SQS 实现。
示例
using Foundatio.Queues;
IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();
await queue.EnqueueAsync(new SimpleWorkItem {
Data = "Hello"
});
var workItem = await queue.DequeueAsync();
锁
锁确保资源在任何给定时间只能由一个消费者访问。我们提供了两个不同的锁实现,这两个实现都是从ILockProvider
接口派生出来的。
- CacheLockProvider:使用缓存进行进程间通信的锁实现。
- ThrottlingLockProvider:仅允许一定数量的锁通过。您可以使用此功能来限制对某些外部服务的API调用,并且该锁定机制将跨所有请求该锁的进程进行节流。
- ScopedLockProvider:此锁实现接受一个
ILockProvider
的实例和一个字符串scope
。范围被添加到每个锁键之前。这使得所有锁的划分变得非常简单,并且可以轻松释放。
值得注意的是,所有锁提供者都接受一个ICacheClient
。这允许您确保代码在多台机器上正确锁定。
示例
using Foundatio.Lock;
ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();
ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// ...
await throttledLock.ReleaseAsync();
消息
允许您发布和订阅流经您的应用程序的消息。我们提供了四个不同的消息总线实现,这些实现都是从IMessageBus
接口派生出来的。
- InMemoryMessageBus:内存消息总线实现。此消息总线实现仅在进程的生命周期内有效。
- RedisMessageBus:Redis消息总线实现。
- RabbitMQMessageBus:RabbitMQ 实现。
- KafkaMessageBus:Kafka 实现。
- AzureServiceBusMessageBus:Azure Service Bus实现的类。
示例
using Foundatio.Messaging;
IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
// Got message
});
await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });
作业
允许您运行长时间运行的过程(进程内或进程外)而不用担心它会被提前终止。我们根据您的使用情况,提供三种不同的方式来定义工作。
- 工作:所有工作都必须从
IJob
接口 继承。我们还有一个可从之继承的JobBase
基类,它提供了工作上下文和日志记录。然后,您可以通过在任务上调用RunAsync()
或通过创建一个JobRunner
类 的实例并调用其中一种运行方法来运行任务。JobRunner 可以用于轻松地将您的任务作为 Azure Web 任务运行。
示例
using Foundatio.Jobs;
public class HelloWorldJob : JobBase {
public int RunCount { get; set; }
protected override Task<JobResult> RunInternalAsync(JobContext context) {
RunCount++;
return Task.FromResult(JobResult.Success);
}
}
var job = new HelloWorldJob();
await job.RunAsync(); // job.RunCount = 1;
await job.RunContinuousAsync(iterationLimit: 2); // job.RunCount = 3;
await job.RunContinuousAsync(cancellationToken: new CancellationTokenSource(10).Token); // job.RunCount > 10;
- 队列处理器工作:队列处理器工作非常适合处理将来自队列数据的工作。队列处理器任务必须从
QueueJobBase<T>
类 继承。然后,您可以通过在任务上调用RunAsync()
或将其传递给JobRunner
类 来运行任务。JobRunner 可以用于轻松地将您的任务作为 Azure Web 任务运行。
示例
using Foundatio.Jobs;
public class HelloWorldQueueJob : QueueJobBase<HelloWorldQueueItem> {
public int RunCount { get; set; }
public HelloWorldQueueJob(IQueue<HelloWorldQueueItem> queue) : base(queue) {}
protected override Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<HelloWorldQueueItem> context) {
RunCount++;
return Task.FromResult(JobResult.Success);
}
}
public class HelloWorldQueueItem {
public string Message { get; set; }
}
// Register the queue for HelloWorldQueueItem.
container.AddSingleton<IQueue<HelloWorldQueueItem>>(s => new InMemoryQueue<HelloWorldQueueItem>());
// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<HelloWorldWorkItem> queue
IJob job = new HelloWorldQueueJob();
await job.RunAsync(); // job.RunCount = 0; The RunCount wasn't incremented because we didn't enqueue any data.
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunAsync(); // job.RunCount = 1;
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunUntilEmptyAsync(); // job.RunCount = 3;
- 工作项工作:工作项工作将在工作池中与其他工作项工作一起运行。此类任务非常适合不常发生但应在工作(例如:删除具有许多子实体的实体)中的情况。当您在
消息总线上发布消息时
,它将被触发。工作必须从WorkItemHandlerBase
类 继承。然后,您可以通过JobRunner
类 运行所有共享工作。JobRunner 可以用于轻松地将您的任务作为 Azure Web 任务运行。
示例
using System.Threading.Tasks;
using Foundatio.Jobs;
public class HelloWorldWorkItemHandler : WorkItemHandlerBase {
public override async Task HandleItemAsync(WorkItemContext ctx) {
var workItem = ctx.GetData<HelloWorldWorkItem>();
// We can report the progress over the message bus easily.
// To receive these messages just inject IMessageSubscriber
// and Subscribe to messages of type WorkItemStatus
await ctx.ReportProgressAsync(0, "Starting Hello World Job");
await Task.Delay(TimeSpan.FromSeconds(2.5));
await ctx.ReportProgressAsync(50, "Reading value");
await Task.Delay(TimeSpan.FromSeconds(.5));
await ctx.ReportProgressAsync(70, "Reading value");
await Task.Delay(TimeSpan.FromSeconds(.5));
await ctx.ReportProgressAsync(90, "Reading value.");
await Task.Delay(TimeSpan.FromSeconds(.5));
await ctx.ReportProgressAsync(100, workItem.Message);
}
}
public class HelloWorldWorkItem {
public string Message { get; set; }
}
// Register the shared job.
var handlers = new WorkItemHandlers();
handlers.Register<HelloWorldWorkItem, HelloWorldWorkItemHandler>();
// Register the handlers with dependency injection.
container.AddSingleton(handlers);
// Register the queue for WorkItemData.
container.AddSingleton<IQueue<WorkItemData>>(s => new InMemoryQueue<WorkItemData>());
// The job runner will automatically look for and run all registered WorkItemHandlers.
new JobRunner(container.GetRequiredService<WorkItemJob>(), instanceCount: 2).RunInBackground();
// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<WorkItemData> queue
// NOTE: You may have noticed that HelloWorldWorkItem doesn't derive from WorkItemData.
// Foundatio has an extension method that takes the model you post and serializes it to the
// WorkItemData.Data property.
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
文件存储
我们提供不同类型的文件存储实现,这些实现从 IFileStorage
接口 继承。
- InMemoryFileStorage:内存文件实现。这种文件存储实现仅在进程生命周期内有效。
- FolderFileStorage:使用硬盘进行存储的文件存储实现。
- AzureFileStorage:Azure Blob 存储实现。
- S3FileStorage:AWS S3 文件存储实现。
- RedisFileStorage:Redis 文件存储实现。
- MinioFileStorage:Minio 文件存储实现。
- AliyunFileStorage:阿里云文件存储实现。
- SshNetFileStorage:SFTP 文件存储实现。
我们建议将所有 IFileStorage
实现作为单例使用。
示例
using Foundatio.Storage;
IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")
指标
我们提供了五种实现,这些实现都是基于 IMetricsClient
界面 的。
- InMemoryMetricsClient:内存指标实现。
- RedisMetricsClient:Redis指标实现。
- StatsDMetricsClient:statsd指标实现。
- MetricsNETClient:一个 Metrics.NET 实现。
- AppMetricsClient:一个 AppMetrics 实现。
- CloudWatchMetricsClient:AWS CloudWatch实现。
我们建议将所有 IMetricsClient
实现 都作为单例使用。
示例
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);
示例应用程序
我们提供了幻灯片 和一个示例应用程序,展示了如何使用Foundatio。
感谢所有贡献者
产品 | 版本 兼容的以及额外的计算目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET Standard | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- Foundatio (>= 10.7.1)
- StackExchange.Redis (>= 2.7.33)
NuGet 包 (10)
显示依赖 Foundatio.Redis 的前 5 个 NuGet 包
包 | 下载 |
---|---|
SoftwarePioniere.Fx.Redis
包描述 |
|
SoftwarePioniere.Foundatio.Redis
Software Pioniere Fx Foundatio Redis 扩展 |
|
HttpRequester
多个 http 客户端 |
|
Neolution.Extensions.Caching.RedisHybrid 包描述 |
|
Permian.Dal
包描述 |
GitHub 仓库 (1)
显示依赖 Foundatio.Redis 的前 1 个流行 GitHub 仓库
仓库 | 星标 |
---|---|
exceptionless/Exceptionless
Exceptionless 应用程序
|
版本 | 下载 | 最后更新 |
---|---|---|
10.7.1 | 324,982 | 3/27/2024 |
10.7.0 | 115,572 | 1/5/2024 |
10.6.1 | 264,890 | 6/23/2023 |
10.6.0 | 226,410 | 1/1/2023 |
10.5.0 | 68,444 | 5/18/2022 |
10.4.0 | 16,535 | 3/8/2022 |
10.3.0 | 5,416 | 1/20/2022 |
10.2.3 | 165,755 | 9/24/2021 |
10.2.2 | 496 | 9/23/2021 |
10.2.0 | 35,024 | 7/8/2021 |
10.1.0 | 8,987 | 6/16/2021 |
10.0.2 | 36,278 | 1/20/2021 |
10.0.0 | 35,676 | 9/16/2020 |
10.0.0-beta9 | 1,010 | 8/25/2020 |
10.0.0-beta8 | 394 | 8/3/2020 |
10.0.0-beta6 | 846 | 7/8/2020 |
10.0.0-beta5 | 571 | 6/20/2020 |
10.0.0-beta3 | 491 | 6/14/2020 |
10.0.0-beta2 | 441 | 6/6/2020 |
10.0.0-beta10 | 394 | 9/16/2020 |
10.0.0-beta1 | 456 | 5/26/2020 |
9.0.0 | 113,578 | 1/16/2020 |
8.1.1662 | 116,460 | 8/30/2019 |
8.1.1651 | 20,385 | 8/1/2019 |
8.1.1648 | 1,506 | 7/20/2019 |
8.1.1642 | 13,263 | 5/14/2019 |
8.1.1638 | 2,467 | 4/16/2019 |
8.0.1631 | 1,482 | 4/3/2019 |
8.0.1627 | 13,511 | 2/24/2019 |
8.0.1621 | 1,127 | 2/22/2019 |
7.1.1608 | 131,924 | 11/9/2018 |
7.0.1584 | 4,475 | 10/18/2018 |
7.0.1570 | 3,267 | 9/7/2018 |
7.0.1564 | 19,322 | 5/9/2018 |
6.0.1496 | 6,031 | 11/30/2017 |
5.1.1478 | 9,534 | 8/21/2017 |
5.1.1468 | 5,420 | 6/23/2017 |
5.1.1460 | 1,723 | 5/5/2017 |
5.0.1336 | 1,363 | 3/14/2017 |
5.0.1334 | 1,187 | 3/13/2017 |
5.0.1331 | 1,228 | 3/12/2017 |
5.0.1329-pre | 833 | 3/12/2017 |
5.0.1328-pre | 822 | 3/12/2017 |
5.0.1327-pre | 884 | 3/12/2017 |
5.0.1326-pre | 882 | 3/12/2017 |
5.0.1324-pre | 866 | 3/12/2017 |
4.3.1323-pre | 845 | 3/11/2017 |
4.3.1317 | 3,315 | 2/23/2017 |
4.3.1316 | 1,260 | 2/22/2017 |
4.3.1315 | 1,295 | 2/22/2017 |
4.3.1314 | 1,453 | 2/20/2017 |
4.3.1312 | 1,248 | 2/20/2017 |
4.3.1311-pre | 847 | 2/20/2017 |
4.3.1307 | 1,298 | 2/16/2017 |
4.3.1306 | 1,252 | 2/15/2017 |
4.3.1305 | 1,143 | 2/15/2017 |
4.3.1304-pre | 846 | 2/15/2017 |
4.3.1303-pre | 810 | 2/14/2017 |
4.3.1301 | 1,201 | 2/14/2017 |
4.3.1299 | 1,209 | 2/14/2017 |
4.3.1293 | 1,277 | 2/12/2017 |
4.3.1292 | 1,263 | 2/10/2017 |
4.3.1291 | 1,276 | 2/10/2017 |
4.3.1290 | 1,210 | 2/10/2017 |
4.3.1289 | 1,267 | 2/9/2017 |
4.3.1288 | 1,193 | 2/9/2017 |
4.3.1286 | 1,179 | 2/8/2017 |
4.3.1282 | 1,244 | 2/5/2017 |
4.3.1281 | 1,223 | 2/5/2017 |
4.3.1280 | 1,222 | 2/5/2017 |
4.3.1276-pre | 857 | 2/5/2017 |
4.3.1177-pre | 990 | 9/2/2016 |
4.3.1164-pre | 852 | 8/21/2016 |
4.2.1205-pre | 1,166 | 9/19/2016 |
4.2.1183 | 2,163 | 9/9/2016 |
4.2.1179 | 1,187 | 9/8/2016 |
4.2.1176 | 1,177 | 9/2/2016 |
4.2.1172 | 1,125 | 9/1/2016 |
4.2.1171-pre | 859 | 9/1/2016 |
4.2.1169 | 1,191 | 8/22/2016 |
4.2.1167-pre | 834 | 8/22/2016 |
4.2.1166-pre | 847 | 8/22/2016 |
4.2.1161 | 1,102 | 8/10/2016 |
4.2.1156-pre | 789 | 8/2/2016 |
4.2.1155 | 1,122 | 8/1/2016 |
4.2.1150 | 1,326 | 7/20/2016 |
4.2.1149-pre | 861 | 7/19/2016 |
4.2.1148-pre | 851 | 7/19/2016 |
4.2.1147-pre | 818 | 7/19/2016 |
4.2.1146-pre | 861 | 7/19/2016 |
4.2.1137 | 1,145 | 7/19/2016 |
4.2.1129-pre | 828 | 7/19/2016 |
4.2.1128-pre | 817 | 7/19/2016 |
4.2.1127-pre | 797 | 7/19/2016 |
4.2.1126-pre | 820 | 7/19/2016 |
4.2.1125-pre | 820 | 7/19/2016 |
4.2.1123-pre | 852 | 7/19/2016 |
4.2.1119-pre | 819 | 7/18/2016 |
4.2.1113-pre | 861 | 7/16/2016 |
4.2.1108-pre | 896 | 7/15/2016 |
4.2.1107-pre | 884 | 7/15/2016 |
4.2.1104-pre | 1,056 | 7/13/2016 |
4.2.1099-pre | 1,054 | 7/12/2016 |
4.2.1098-pre | 1,029 | 7/12/2016 |
4.2.1093-pre | 905 | 7/8/2016 |
4.2.1091-pre | 929 | 7/8/2016 |
4.2.1090-pre | 925 | 7/8/2016 |
4.2.1089-pre | 907 | 7/7/2016 |
4.2.1087-pre | 914 | 7/7/2016 |
4.2.1083-pre | 908 | 7/6/2016 |
4.2.1082-pre | 895 | 7/6/2016 |
4.2.1081-pre | 887 | 7/6/2016 |
4.2.1079-pre | 886 | 7/6/2016 |
4.2.1078-pre | 868 | 7/6/2016 |
4.2.1073-pre | 907 | 7/5/2016 |
4.2.1070-pre | 922 | 7/5/2016 |
4.2.1069-pre | 859 | 7/1/2016 |
4.2.1059-pre | 872 | 7/1/2016 |
4.2.1046-pre | 830 | 6/24/2016 |
4.2.1031-pre | 820 | 6/24/2016 |
4.2.1028-pre | 835 | 6/24/2016 |
4.2.1027-pre | 832 | 6/24/2016 |
4.1.1009 | 1,455 | 6/15/2016 |
4.1.1002-pre | 1,135 | 6/14/2016 |
4.1.995-pre | 1,156 | 6/13/2016 |
4.1.989-pre | 1,163 | 5/26/2016 |
4.1.983-pre | 855 | 5/25/2016 |
4.1.982-pre | 826 | 5/25/2016 |
4.1.978-pre | 908 | 5/6/2016 |
4.1.977-pre | 989 | 5/5/2016 |
4.1.975-pre | 827 | 5/5/2016 |
4.0.958 | 2,789 | 5/1/2016 |
4.0.957 | 1,269 | 4/29/2016 |
4.0.956 | 1,288 | 4/29/2016 |
4.0.955 | 1,180 | 4/28/2016 |
4.0.941 | 1,449 | 4/27/2016 |
4.0.940 | 1,386 | 4/27/2016 |
4.0.925 | 1,337 | 4/27/2016 |
4.0.922 | 1,263 | 4/27/2016 |
4.0.909 | 1,389 | 4/20/2016 |
4.0.880 | 1,625 | 4/7/2016 |
4.0.869 | 1,232 | 3/30/2016 |
4.0.864 | 1,148 | 3/29/2016 |
4.0.861 | 1,146 | 3/29/2016 |
4.0.860 | 1,121 | 3/29/2016 |
4.0.857 | 1,154 | 3/29/2016 |
4.0.855 | 1,206 | 3/29/2016 |
4.0.846 | 1,273 | 3/22/2016 |
4.0.842 | 1,305 | 3/21/2016 |
4.0.836 | 1,210 | 3/18/2016 |
4.0.835 | 1,227 | 3/18/2016 |
4.0.834 | 1,142 | 3/17/2016 |
4.0.832 | 1,172 | 3/17/2016 |
4.0.831 | 1,158 | 3/16/2016 |
4.0.829 | 1,143 | 3/16/2016 |
4.0.828 | 1,122 | 3/15/2016 |
4.0.827 | 1,104 | 3/15/2016 |
4.0.826 | 1,095 | 3/15/2016 |
4.0.825 | 1,402 | 3/13/2016 |
4.0.821 | 1,222 | 3/11/2016 |
4.0.819 | 1,159 | 3/11/2016 |
4.0.818 | 1,273 | 3/11/2016 |
4.0.816 | 1,303 | 3/11/2016 |
4.0.815 | 1,118 | 3/11/2016 |
4.0.814 | 1,257 | 3/11/2016 |
4.0.813 | 1,167 | 3/10/2016 |
4.0.812 | 1,257 | 3/10/2016 |
4.0.811 | 1,214 | 3/10/2016 |
4.0.810 | 1,171 | 3/10/2016 |
4.0.809 | 1,183 | 3/10/2016 |
4.0.805 | 1,155 | 3/9/2016 |
4.0.797 | 1,114 | 3/9/2016 |
4.0.796 | 1,155 | 3/9/2016 |
4.0.794 | 1,131 | 3/9/2016 |
4.0.793 | 1,137 | 3/9/2016 |
4.0.792 | 1,142 | 3/8/2016 |
4.0.791 | 1,137 | 3/8/2016 |
4.0.790 | 1,131 | 3/8/2016 |
4.0.788 | 1,110 | 3/8/2016 |
4.0.774 | 1,317 | 3/2/2016 |
4.0.773 | 1,179 | 3/1/2016 |
4.0.772 | 1,257 | 3/1/2016 |
4.0.770 | 1,268 | 3/1/2016 |
4.0.769 | 1,107 | 3/1/2016 |
4.0.762 | 1,109 | 3/1/2016 |
4.0.761 | 1,143 | 3/1/2016 |
4.0.760 | 1,623 | 2/29/2016 |
4.0.759 | 1,099 | 2/29/2016 |
4.0.758 | 1,096 | 2/29/2016 |
4.0.757 | 1,121 | 2/29/2016 |
4.0.756 | 1,581 | 2/27/2016 |
4.0.755 | 1,554 | 2/27/2016 |
4.0.754 | 1,169 | 2/27/2016 |
4.0.753 | 1,501 | 2/27/2016 |
4.0.752 | 1,593 | 2/27/2016 |
4.0.750 | 1,643 | 2/27/2016 |
4.0.749 | 1,348 | 2/27/2016 |
4.0.747 | 1,246 | 2/26/2016 |
4.0.746 | 1,453 | 2/26/2016 |
4.0.744 | 1,250 | 2/26/2016 |
4.0.743 | 1,517 | 2/26/2016 |
4.0.742 | 1,192 | 2/26/2016 |
4.0.741 | 1,466 | 2/26/2016 |
4.0.739 | 1,384 | 2/25/2016 |
4.0.738 | 1,343 | 2/25/2016 |
4.0.734 | 1,290 | 2/25/2016 |
4.0.733-beta | 1,127 | 2/25/2016 |
4.0.672 | 1,328 | 2/16/2016 |
4.0.669 | 1,323 | 2/11/2016 |
4.0.668 | 1,131 | 2/11/2016 |
3.0.654 | 2,604 | 2/10/2016 |
3.0.646 | 1,176 | 2/5/2016 |
3.0.645 | 1,169 | 2/5/2016 |
3.0.644 | 1,179 | 2/5/2016 |
3.0.639 | 1,138 | 2/3/2016 |
3.0.638 | 1,155 | 2/2/2016 |
3.0.637 | 1,160 | 2/1/2016 |
3.0.635 | 1,151 | 2/1/2016 |
3.0.633 | 1,287 | 1/27/2016 |
3.0.632 | 1,131 | 1/27/2016 |
3.0.629 | 1,515 | 1/18/2016 |
3.0.626 | 1,167 | 1/18/2016 |
3.0.625 | 1,370 | 1/18/2016 |
3.0.624 | 4,132 | 12/17/2015 |
3.0.623 | 1,226 | 12/9/2015 |
3.0.622 | 1,122 | 12/9/2015 |
3.0.621 | 1,167 | 12/9/2015 |
3.0.620 | 1,168 | 12/8/2015 |
3.0.613 | 1,165 | 12/4/2015 |
3.0.611 | 1,466 | 12/3/2015 |
3.0.610 | 1,488 | 11/30/2015 |
3.0.606 | 1,437 | 11/30/2015 |
3.0.605 | 1,299 | 11/25/2015 |
3.0.603 | 1,317 | 11/23/2015 |
3.0.601 | 1,202 | 11/23/2015 |
3.0.600 | 1,193 | 11/19/2015 |
3.0.599 | 1,203 | 11/19/2015 |
3.0.598 | 1,225 | 11/17/2015 |
3.0.592 | 1,196 | 11/12/2015 |
3.0.589 | 1,233 | 11/10/2015 |
3.0.588 | 1,181 | 11/10/2015 |
3.0.586 | 1,190 | 11/10/2015 |
3.0.584 | 1,199 | 11/10/2015 |
3.0.583 | 1,195 | 11/10/2015 |
3.0.581 | 1,153 | 11/6/2015 |
3.0.579 | 1,159 | 11/6/2015 |
3.0.576 | 1,227 | 11/5/2015 |
3.0.575 | 1,167 | 11/4/2015 |
3.0.574 | 1,162 | 11/4/2015 |
3.0.569 | 1,211 | 11/3/2015 |
3.0.568 | 1,293 | 11/3/2015 |
3.0.566 | 1,181 | 11/3/2015 |
3.0.545 | 1,354 | 10/28/2015 |
3.0.538 | 1,276 | 10/22/2015 |
3.0.537 | 1,155 | 10/21/2015 |
3.0.536 | 1,186 | 10/21/2015 |
3.0.534 | 1,167 | 10/21/2015 |
3.0.532 | 1,140 | 10/21/2015 |
3.0.531 | 1,224 | 10/21/2015 |
3.0.524 | 1,156 | 10/15/2015 |
3.0.523 | 1,254 | 10/10/2015 |
3.0.522 | 1,245 | 10/10/2015 |
3.0.520 | 1,331 | 10/9/2015 |
3.0.519 | 1,219 | 10/9/2015 |
3.0.518 | 1,453 | 10/9/2015 |
3.0.517 | 1,584 | 10/9/2015 |
3.0.516 | 1,307 | 10/7/2015 |
3.0.514 | 1,543 | 10/6/2015 |
3.0.513 | 1,503 | 10/6/2015 |
3.0.512 | 1,281 | 10/6/2015 |
3.0.509 | 1,362 | 10/1/2015 |
3.0.507 | 1,282 | 10/1/2015 |
3.0.505 | 1,312 | 9/30/2015 |
3.0.503 | 1,350 | 9/30/2015 |
3.0.502 | 1,306 | 9/30/2015 |
3.0.479 | 1,288 | 9/25/2015 |
3.0.476 | 1,244 | 9/24/2015 |
3.0.471 | 1,240 | 9/24/2015 |
3.0.470 | 1,246 | 9/24/2015 |
3.0.469 | 1,251 | 9/24/2015 |
3.0.468 | 1,279 | 9/24/2015 |
3.0.467 | 1,252 | 9/24/2015 |
3.0.465 | 1,252 | 9/24/2015 |
3.0.459 | 1,231 | 9/23/2015 |
3.0.456 | 1,237 | 9/23/2015 |
3.0.455 | 1,283 | 9/22/2015 |
3.0.454 | 1,259 | 9/19/2015 |
3.0.453 | 1,214 | 9/19/2015 |
3.0.452 | 1,211 | 9/18/2015 |
3.0.451 | 1,285 | 9/18/2015 |
3.0.450 | 1,238 | 9/18/2015 |
3.0.447 | 1,315 | 9/18/2015 |
2.0.378 | 1,272 | 9/5/2015 |
2.0.372 | 1,146 | 9/4/2015 |
2.0.370 | 1,272 | 9/4/2015 |
2.0.368 | 1,270 | 9/4/2015 |
2.0.365 | 2,102 | 9/3/2015 |
2.0.363 | 1,247 | 9/3/2015 |
2.0.361 | 1,184 | 9/3/2015 |
1.0.360 | 1,209 | 9/1/2015 |
1.0.359 | 1,189 | 9/1/2015 |
1.0.358 | 1,169 | 9/1/2015 |
1.0.356 | 1,238 | 8/31/2015 |
1.0.355 | 1,228 | 8/31/2015 |
1.0.354 | 1,214 | 8/29/2015 |
1.0.305 | 1,210 | 8/19/2015 |
1.0.299 | 1,535 | 8/8/2015 |
1.0.293 | 1,245 | 7/20/2015 |
1.0.292 | 1,312 | 7/20/2015 |
1.0.289 | 1,468 | 7/10/2015 |
1.0.288 | 1,202 | 7/10/2015 |
1.0.286 | 1,338 | 7/7/2015 |
1.0.285 | 1,271 | 7/7/2015 |
1.0.284 | 1,231 | 7/7/2015 |
1.0.282 | 1,238 | 7/6/2015 |
1.0.281 | 1,211 | 7/6/2015 |
1.0.279 | 1,199 | 7/6/2015 |
1.0.277 | 1,288 | 6/18/2015 |
1.0.276 | 1,238 | 6/8/2015 |
1.0.275 | 1,161 | 6/8/2015 |
1.0.274 | 1,184 | 6/8/2015 |
1.0.272 | 1,639 | 6/1/2015 |
1.0.269 | 1,218 | 5/25/2015 |
1.0.268 | 1,195 | 5/24/2015 |
1.0.266 | 1,153 | 5/24/2015 |
1.0.263 | 1,153 | 5/21/2015 |
1.0.258 | 1,172 | 5/19/2015 |
1.0.257 | 1,272 | 5/18/2015 |
1.0.256 | 1,352 | 5/17/2015 |
1.0.254 | 1,206 | 5/13/2015 |
1.0.253 | 1,153 | 5/13/2015 |
1.0.250 | 1,144 | 5/13/2015 |
1.0.249 | 1,192 | 5/12/2015 |
1.0.248 | 1,176 | 5/12/2015 |
1.0.245 | 1,114 | 5/12/2015 |
1.0.241 | 1,146 | 5/12/2015 |
1.0.240 | 1,167 | 5/12/2015 |
1.0.237 | 1,260 | 5/11/2015 |
1.0.234 | 1,201 | 5/9/2015 |
1.0.233 | 1,183 | 5/9/2015 |
1.0.231 | 1,177 | 5/7/2015 |
1.0.230 | 1,202 | 5/7/2015 |
1.0.229 | 1,185 | 5/7/2015 |
1.0.226 | 1,301 | 5/7/2015 |
1.0.217 | 1,443 | 4/28/2015 |
1.0.215 | 1,391 | 4/27/2015 |
1.0.213 | 1,437 | 4/23/2015 |
1.0.210 | 1,295 | 4/23/2015 |
1.0.209 | 1,238 | 4/15/2015 |
1.0.202 | 1,264 | 4/15/2015 |
1.0.201 | 1,255 | 4/15/2015 |
1.0.198 | 1,318 | 4/15/2015 |
1.0.197 | 1,246 | 4/15/2015 |
1.0.196 | 1,268 | 4/15/2015 |
1.0.195 | 1,225 | 4/15/2015 |
1.0.194 | 1,243 | 4/15/2015 |
1.0.193 | 1,274 | 4/15/2015 |
1.0.192 | 1,255 | 4/15/2015 |
1.0.191 | 1,274 | 4/14/2015 |
1.0.189 | 1,240 | 4/10/2015 |
1.0.187 | 1,205 | 4/9/2015 |
1.0.186 | 1,221 | 4/8/2015 |
1.0.185 | 1,361 | 4/6/2015 |
1.0.183 | 1,195 | 4/3/2015 |
1.0.181 | 1,241 | 4/3/2015 |
1.0.180 | 1,207 | 4/2/2015 |
1.0.178 | 1,255 | 4/1/2015 |
1.0.177 | 1,195 | 4/1/2015 |
1.0.175 | 1,168 | 4/1/2015 |
1.0.171 | 1,206 | 3/31/2015 |
1.0.170 | 1,211 | 3/31/2015 |
1.0.168 | 1,221 | 3/31/2015 |
1.0.164 | 1,193 | 3/30/2015 |
1.0.162 | 1,222 | 3/28/2015 |
1.0.160 | 1,236 | 3/27/2015 |
1.0.159 | 1,215 | 3/26/2015 |
1.0.157 | 1,479 | 3/24/2015 |
1.0.156 | 1,227 | 3/24/2015 |
1.0.154 | 1,190 | 3/24/2015 |
1.0.152 | 1,226 | 3/24/2015 |
1.0.151 | 1,171 | 3/24/2015 |
1.0.150 | 1,191 | 3/23/2015 |
1.0.149 | 1,192 | 3/23/2015 |
1.0.148 | 1,267 | 3/23/2015 |
1.0.147 | 1,201 | 3/21/2015 |
1.0.146 | 1,190 | 3/20/2015 |
1.0.145 | 1,192 | 3/19/2015 |
1.0.143 | 1,179 | 3/18/2015 |
1.0.142 | 1,334 | 3/12/2015 |
1.0.141 | 1,206 | 3/12/2015 |
1.0.140 | 1,381 | 3/5/2015 |
1.0.139 | 1,178 | 3/5/2015 |
1.0.138 | 1,205 | 3/4/2015 |
1.0.137 | 1,266 | 3/3/2015 |
1.0.134 | 1,172 | 3/3/2015 |
1.0.129 | 1,240 | 3/3/2015 |
1.0.128 | 1,534 | 3/3/2015 |
1.0.125 | 1,343 | 2/28/2015 |
1.0.124 | 1,374 | 2/28/2015 |
1.0.122 | 1,448 | 2/28/2015 |
1.0.119 | 1,622 | 2/25/2015 |
1.0.117 | 1,763 | 2/24/2015 |
1.0.115 | 1,560 | 2/24/2015 |
1.0.114 | 1,568 | 2/23/2015 |
1.0.113 | 1,603 | 2/23/2015 |
1.0.112 | 1,610 | 2/23/2015 |
1.0.111 | 1,516 | 2/23/2015 |
1.0.110 | 1,582 | 2/23/2015 |
1.0.109 | 1,643 | 2/22/2015 |
1.0.108 | 1,583 | 2/22/2015 |
1.0.103 | 1,480 | 2/22/2015 |
1.0.37 | 1,421 | 2/18/2015 |
1.0.36 | 1,458 | 2/18/2015 |
1.0.35 | 1,398 | 2/17/2015 |
1.0.34 | 1,442 | 2/17/2015 |
1.0.33 | 1,512 | 2/17/2015 |
1.0.32 | 1,207 | 2/15/2015 |
1.0.31 | 1,426 | 2/15/2015 |
1.0.30 | 1,410 | 2/15/2015 |
1.0.28 | 1,443 | 2/15/2015 |
1.0.27 | 1,465 | 2/15/2015 |
1.0.26 | 1,466 | 2/13/2015 |
1.0.25 | 1,397 | 2/13/2015 |
1.0.24 | 1,383 | 2/12/2015 |
1.0.23 | 1,452 | 2/12/2015 |
1.0.0 | 2,147 | 2/21/2015 |