Foundatio.Redis 10.7.1

标识已保留
dotnet add package Foundatio.Redis --version 10.7.1                
NuGet\Install-Package Foundatio.Redis -Version 10.7.1                
此命令旨在在Visual Studio中的包管理器控制台中使用,因为它使用了NuGet模块的Install-Package版本。
<PackageReference Include="Foundatio.Redis" Version="10.7.1" />                
对于支持PackageReference的项目,将此XML节点复制到项目文件以引用包。
paket add Foundatio.Redis --version 10.7.1                
#r "nuget: Foundatio.Redis, 10.7.1"                
#r指令可以在F# Interactive和Polyglot Notebooks中使用。将此内容复制到交互式工具或脚本的源代码中以引用包。
// 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                

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

构建松散耦合分布式应用的模块化基础块。

包括Redis、Azure、AWS、RabbitMQ、Kafka和内存(开发)中的实现。

为什么选择Foundatio?

在构建几个大型云应用时,我们发现缺乏出色的解决方案(不是说不存在解决方案)来解决构建可伸缩分布式应用所需的关键部分,同时保持开发体验简单。以下是我们构建并使用Foundatio的几个原因示例

  • 想要针对抽象接口进行构建,以便我们可以轻松地更改实现。
  • 想要块对依赖注入友好。
  • 缓存:我们最初使用开源Redis缓存客户端,但后来它变成了一个带有高许可成本的商业产品。不仅如此,还没有内存实现,因此每个开发人员都必须设置和配置Redis。
  • 消息总线:我们最初考察了NServiceBus(优秀的产品),但由于其高昂的许可费用(他们也需要生存),并且不太友好开源软件(OSS),我们决定放弃。我们也考察了MassTransit(另一个优秀的产品),但当时发现Azure支持不全面,并且本地设置很麻烦(对于内存存储)。我们想要一个简单易用的消息总线,能适用于本地或云端。
  • 存储:我们找不到任何现有项目是解耦合且支持内存存储、文件存储或Azure Blob存储的。

总结一下,如果您希望开发测试无忧,同时允许您的应用程序扩展,那么请使用Foundatio!

实现

入门(开发)

通过NuGet包管理器安装Foundatio。如果您需要帮助,请提交问题或者加入我们的Discord聊天室。如果您有任何问题,我们都随时为您提供帮助!

本节仅用于开发目的!如果您正在尝试使用Foundatio库,请从NuGet获取。

  1. 您需要安装Visual Studio Code
  2. 打开 Foundatio.sln Visual Studio解决方案文件。

使用Foundatio

以下各节仅包含 Foundatio 可用功能的很小部分。我们建议您查看源代码以获取更多信息。如果您有任何问题或需要帮助,请告知我们!

缓存

缓存可以快速存储和访问数据,从而节省创建或获取数据的昂贵操作。我们提供四种不同的基于 ICacheClient 接口 的缓存实现。

  1. InMemoryCacheClient:内存缓存客户端实现。此缓存实现仅在进程生命周期内有效。请注意,内存缓存客户端具有通过 MaxItems 属性缓存最近 X 项的能力。我们在 Exceptionless 中使用它以仅保存最后 250 个解析的 geoip 结果
  2. HybridCacheClient:此缓存实现使用 ICacheClientInMemoryCacheClient 并使用 IMessageBus 来同步进程间的缓存。这可以带来 巨大的性能提升,因为当项存在于本地缓存中时,你将节省序列化操作和对远程缓存的调用。
  3. RedisCacheClient:Redis缓存客户端实现。
  4. RedisHybridCacheClientHybridCacheClient的一个实现,使用RedisCacheClient作为ICacheClient,而使用RedisMessageBus作为IMessageBus
  5. ScopedCacheClient:这种缓存实现接受一个ICacheClient的实例和一个字符串scope。范围被添加到每个缓存键之前。这使得所有缓存键的划分变得非常简单,并且可以轻松删除。
示例
using Foundatio.Caching;

ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");

队列

队列提供先入先出(FIFO)的消息传递。我们提供了四个不同的队列实现,它们都是基于IQueue接口的。

  1. InMemoryQueue:内存队列实现。此队列实现仅在进程的生命周期内有效。
  2. RedisQueue:Redis队列实现。
  3. AzureServiceBusQueue:Azure Service Bus 队列实现。
  4. AzureStorageQueue:Azure 存储队列实现。
  5. 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接口派生出来的。

  1. CacheLockProvider:使用缓存进行进程间通信的锁实现。
  2. ThrottlingLockProvider:仅允许一定数量的锁通过。您可以使用此功能来限制对某些外部服务的API调用,并且该锁定机制将跨所有请求该锁的进程进行节流。
  3. 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接口派生出来的。

  1. InMemoryMessageBus:内存消息总线实现。此消息总线实现仅在进程的生命周期内有效。
  2. RedisMessageBus:Redis消息总线实现。
  3. RabbitMQMessageBus:RabbitMQ 实现。
  4. KafkaMessageBus:Kafka 实现。
  5. 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" });

作业

允许您运行长时间运行的过程(进程内或进程外)而不用担心它会被提前终止。我们根据您的使用情况,提供三种不同的方式来定义工作。

  1. 工作:所有工作都必须从 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;
  1. 队列处理器工作:队列处理器工作非常适合处理将来自队列数据的工作。队列处理器任务必须从 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;
  1. 工作项工作:工作项工作将在工作池中与其他工作项工作一起运行。此类任务非常适合不常发生但应在工作(例如:删除具有许多子实体的实体)中的情况。当您在 消息总线上发布消息时,它将被触发。工作必须从 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 接口 继承。

  1. InMemoryFileStorage:内存文件实现。这种文件存储实现仅在进程生命周期内有效。
  2. FolderFileStorage:使用硬盘进行存储的文件存储实现。
  3. AzureFileStorage:Azure Blob 存储实现。
  4. S3FileStorage:AWS S3 文件存储实现。
  5. RedisFileStorage:Redis 文件存储实现。
  6. MinioFileStorage:Minio 文件存储实现。
  7. AliyunFileStorage:阿里云文件存储实现。
  8. SshNetFileStorage:SFTP 文件存储实现。

我们建议将所有 IFileStorage 实现作为单例使用。

示例
using Foundatio.Storage;

IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")

指标

我们提供了五种实现,这些实现都是基于 IMetricsClient 界面 的。

  1. InMemoryMetricsClient:内存指标实现。
  2. RedisMetricsClient:Redis指标实现。
  3. StatsDMetricsClient:statsd指标实现。
  4. MetricsNETClient:一个 Metrics.NET 实现。
  5. AppMetricsClient:一个 AppMetrics 实现。
  6. CloudWatchMetricsClient:AWS CloudWatch实现。

我们建议将所有 IMetricsClient 实现 都作为单例使用。

示例
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

示例应用程序

我们提供了幻灯片 和一个示例应用程序,展示了如何使用Foundatio。

感谢所有贡献者

contributors

产品 兼容的以及额外的计算目标框架版本。
.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 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多有关目标框架.NET Standard的信息。

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